linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] get_user_pages_locked|unlocked v1
@ 2014-10-29 16:35 Andrea Arcangeli
  2014-10-29 16:35 ` [PATCH 1/5] mm: gup: add get_user_pages_locked and get_user_pages_unlocked Andrea Arcangeli
                   ` (4 more replies)
  0 siblings, 5 replies; 20+ messages in thread
From: Andrea Arcangeli @ 2014-10-29 16:35 UTC (permalink / raw)
  To: Andrew Morton, linux-kernel, linux-mm
  Cc: Kirill A. Shutemov, Michel Lespinasse, Andrew Jones, Hugh Dickins,
	Mel Gorman, Andres Lagar-Cavilla, Minchan Kim, KOSAKI Motohiro,
	\"Dr. David Alan Gilbert\", Peter Feiner, Peter Zijlstra,
	Benjamin Herrenschmidt, James Bottomley, David Miller,
	Steve Capper, Johannes Weiner

This patchset standalone is an optimization leveraging the page fault
FAULT_FLAG_ALLOW_RETRY flag which allows the page fault paths to drop
the mmap_sem before I/O.

For the userfaultfd patchset this patch is instead a dependency as we
need that flag always set the first time any thread attempts a page
fault, in order to release the mmap_sem before stopping the page fault
(while waiting for a later userland wakeup).

http://thread.gmane.org/gmane.linux.kernel.mm/123575

Andrea Arcangeli (5):
  mm: gup: add get_user_pages_locked and get_user_pages_unlocked
  mm: gup: add __get_user_pages_unlocked to customize gup_flags
  mm: gup: use get_user_pages_unlocked within get_user_pages_fast
  mm: gup: use get_user_pages_unlocked
  mm: gup: kvm use get_user_pages_unlocked

 arch/mips/mm/gup.c                 |   8 +-
 arch/powerpc/mm/gup.c              |   6 +-
 arch/s390/mm/gup.c                 |   6 +-
 arch/sh/mm/gup.c                   |   6 +-
 arch/sparc/mm/gup.c                |   6 +-
 arch/x86/mm/gup.c                  |   7 +-
 drivers/iommu/amd_iommu_v2.c       |   6 +-
 drivers/media/pci/ivtv/ivtv-udma.c |   6 +-
 drivers/scsi/st.c                  |   7 +-
 drivers/video/fbdev/pvr2fb.c       |   6 +-
 include/linux/kvm_host.h           |  11 --
 include/linux/mm.h                 |  11 ++
 mm/gup.c                           | 203 ++++++++++++++++++++++++++++++++++---
 mm/nommu.c                         |  33 ++++++
 mm/process_vm_access.c             |   7 +-
 mm/util.c                          |  10 +-
 net/ceph/pagevec.c                 |   6 +-
 virt/kvm/async_pf.c                |   2 +-
 virt/kvm/kvm_main.c                |  50 +--------
 19 files changed, 265 insertions(+), 132 deletions(-)

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 20+ messages in thread
* [PATCH 0/5] leverage FAULT_FOLL_ALLOW_RETRY in get_user_pages try#2
@ 2015-01-13 16:37 Andrea Arcangeli
  2015-01-13 16:37 ` [PATCH 5/5] mm: gup: kvm use get_user_pages_unlocked Andrea Arcangeli
  0 siblings, 1 reply; 20+ messages in thread
From: Andrea Arcangeli @ 2015-01-13 16:37 UTC (permalink / raw)
  To: Andrew Morton, linux-kernel, linux-mm
  Cc: Kirill A. Shutemov, Michel Lespinasse, Andrew Jones, Hugh Dickins,
	Mel Gorman, Andres Lagar-Cavilla, Minchan Kim, KOSAKI Motohiro,
	\"Dr. David Alan Gilbert\", Peter Feiner, Peter Zijlstra,
	Benjamin Herrenschmidt, James Bottomley, David Miller,
	Steve Capper, Johannes Weiner

Last submit didn't go into -mm/3.19-rc, no prob but here I retry
(possibly too early for 3.20-rc but I don't expect breakages in this
area post -rc4) after a rebase on upstream.

FAULT_FOLL_ALLOW_RETRY allows the page fault to drop the mmap_sem for
reading to reduce the mmap_sem contention (for writing), like while
waiting for I/O completion. The problem is that right now practically
no get_user_pages call uses FAULT_FOLL_ALLOW_RETRY, so we're not
leveraging that nifty feature.

Andres fixed it for the KVM page fault. However get_user_pages_fast
remains uncovered, and 99% of other get_user_pages aren't using it
either (the only exception being FOLL_NOWAIT in KVM which is really
nonblocking and in fact it doesn't even release the mmap_sem).

So this patchsets extends the optimization Andres did in the KVM page
fault to the whole kernel. It makes most important places (including
gup_fast) to use FAULT_FOLL_ALLOW_RETRY to reduce the mmap_sem hold
times during I/O.

The only few places that remains uncovered are drivers like v4l and
other exceptions that tends to work on their own memory and they're
not working on random user memory (for example like O_DIRECT that uses
gup_fast and is fully covered by this patch).

A follow up patch should probably also add a printk_once warning to
get_user_pages that should go obsolete and be phased out
eventually. The "vmas" parameter of get_user_pages makes it
fundamentally incompatible with FAULT_FOLL_ALLOW_RETRY (vmas array
becomes meaningless the moment the mmap_sem is released). 

While this is just an optimization, this becomes an absolute
requirement for the userfaultfd feature
http://lwn.net/Articles/615086/ .

The userfaultfd allows to block the page fault, and in order to do so
I need to drop the mmap_sem first. So this patch also ensures that all
memory where userfaultfd could be registered by KVM, the very first
fault (no matter if it is a regular page fault, or a get_user_pages)
always has FAULT_FOLL_ALLOW_RETRY set. Then the userfaultfd blocks and
it is waken only when the pagetable is already mapped. The second
fault attempt after the wakeup doesn't need FAULT_FOLL_ALLOW_RETRY, so
it's ok to retry without it.

Thanks,
Andrea

Andrea Arcangeli (5):
  mm: gup: add get_user_pages_locked and get_user_pages_unlocked
  mm: gup: add __get_user_pages_unlocked to customize gup_flags
  mm: gup: use get_user_pages_unlocked within get_user_pages_fast
  mm: gup: use get_user_pages_unlocked
  mm: gup: kvm use get_user_pages_unlocked

 arch/mips/mm/gup.c                 |   8 +-
 arch/s390/mm/gup.c                 |   6 +-
 arch/sh/mm/gup.c                   |   6 +-
 arch/sparc/mm/gup.c                |   6 +-
 arch/x86/mm/gup.c                  |   7 +-
 drivers/media/pci/ivtv/ivtv-udma.c |   6 +-
 drivers/scsi/st.c                  |   7 +-
 drivers/video/fbdev/pvr2fb.c       |   6 +-
 include/linux/kvm_host.h           |  11 --
 include/linux/mm.h                 |  11 ++
 mm/gup.c                           | 203 ++++++++++++++++++++++++++++++++++---
 mm/nommu.c                         |  33 ++++++
 mm/process_vm_access.c             |   7 +-
 mm/util.c                          |  10 +-
 net/ceph/pagevec.c                 |   6 +-
 virt/kvm/async_pf.c                |   2 +-
 virt/kvm/kvm_main.c                |  50 +--------
 17 files changed, 261 insertions(+), 124 deletions(-)

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2015-01-16 13:03 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-29 16:35 [PATCH 0/5] get_user_pages_locked|unlocked v1 Andrea Arcangeli
2014-10-29 16:35 ` [PATCH 1/5] mm: gup: add get_user_pages_locked and get_user_pages_unlocked Andrea Arcangeli
2014-10-30 12:14   ` Kirill A. Shutemov
2014-10-29 16:35 ` [PATCH 2/5] mm: gup: add __get_user_pages_unlocked to customize gup_flags Andrea Arcangeli
2014-10-30 12:17   ` Kirill A. Shutemov
2014-10-30 17:43     ` Andrea Arcangeli
2014-10-31 16:58       ` Peter Zijlstra
2014-10-31 19:15   ` Peter Feiner
2014-10-29 16:35 ` [PATCH 3/5] mm: gup: use get_user_pages_unlocked within get_user_pages_fast Andrea Arcangeli
2014-10-30 12:21   ` Kirill A. Shutemov
2014-10-31 19:13   ` Peter Feiner
2014-10-29 16:35 ` [PATCH 4/5] mm: gup: use get_user_pages_unlocked Andrea Arcangeli
2014-10-30 12:28   ` Kirill A. Shutemov
2014-10-31 19:06   ` Peter Feiner
2014-10-29 16:35 ` [PATCH 5/5] mm: gup: kvm " Andrea Arcangeli
2014-10-29 17:14   ` Andres Lagar-Cavilla
2014-10-31 19:16   ` Peter Feiner
  -- strict thread matches above, loose matches on Subject: below --
2015-01-13 16:37 [PATCH 0/5] leverage FAULT_FOLL_ALLOW_RETRY in get_user_pages try#2 Andrea Arcangeli
2015-01-13 16:37 ` [PATCH 5/5] mm: gup: kvm use get_user_pages_unlocked Andrea Arcangeli
2015-01-13 19:21   ` Andres Lagar-Cavilla
2015-01-16 13:03   ` Kirill A. Shutemov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).