[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 04/17] mm: gup: make get_user_pages_fast and __g
From: |
Andrea Arcangeli |
Subject: |
Re: [Qemu-devel] [PATCH 04/17] mm: gup: make get_user_pages_fast and __get_user_pages_fast latency conscious |
Date: |
Mon, 6 Oct 2014 16:14:28 +0200 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
Hello,
On Fri, Oct 03, 2014 at 11:23:53AM -0700, Linus Torvalds wrote:
> On Fri, Oct 3, 2014 at 10:07 AM, Andrea Arcangeli <address@hidden> wrote:
> > This teaches gup_fast and __gup_fast to re-enable irqs and
> > cond_resched() if possible every BATCH_PAGES.
>
> This is disgusting.
>
> Many (most?) __gup_fast() users just want a single page, and the
> stupid overhead of the multi-page version is already unnecessary.
> This just makes things much worse.
>
> Quite frankly, we should make a single-page version of __gup_fast(),
> and convert existign users to use that. After that, the few multi-page
> users could have this extra latency control stuff.
Ok. I didn't think at a better way to add the latency control other
than to reduce nr_pages in a outer loop instead of altering the inner
calls, but this is what I got after implementing it... If somebody has
a cleaner way to implement the latency control stuff that's welcome
and I'd be glad to replace it.
> And yes, the single-page version of get_user_pages_fast() is actually
> latency-critical. shared futexes hit it hard, and yes, I've seen this
> in profiles.
KVM would save a few cycles from a single-page version too. I just
thought further optimizations could be added later and this was better
than nothing.
Considering I've no better idea how to implement the latency control
stuff, for now I'll just drop this controversial patch, and I'll
convert those get_user_pages to gup_unlocked instead of converting
them to gup_fast, which is more than enough to obtain the mmap_sem
holding scalability improvement (that also solves the mmap_sem trouble
for the userfaultfd). gup_unlocked isn't as good as gup_fast but it's
at least better than the current get_user_pages().
I got into this gup_fast latency control stuff purely because there
were a few get_user_pages that could have been converted to
get_user_pages_fast as they were using "current" and "current->mm" as the
first two parameters, except for the risk of disabling irq for
long. So I tried to do the right thing and fix gup_fast but I'll leave
this further optimization queued for later.
About the missing commit header for the other patch Paolo already
replied to it, to clarify this a bit further in short I expect that
FOLL_TRIED flag to be merged through the KVM git tree which already
contains it. I'll add a comment to the commit header to specify
it. Sorry for the confusion about that patch.
Thanks,
Andrea
- [Qemu-devel] [PATCH 00/17] RFC: userfault v2, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 03/17] mm: gup: use get_user_pages_unlocked within get_user_pages_fast, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 16/17] powerpc: add remap_anon_pages and userfaultfd, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 14/17] userfaultfd: add new syscall to provide memory externalization, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 01/17] mm: gup: add FOLL_TRIED, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 06/17] kvm: Faults which trigger IO release the mmap_sem, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 04/17] mm: gup: make get_user_pages_fast and __get_user_pages_fast latency conscious, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 11/17] mm: swp_entry_swapcount, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 15/17] userfaultfd: make userfaultfd_write non blocking, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 13/17] waitqueue: add nr wake parameter to __wake_up_locked_key, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 09/17] mm: PT lock: export double_pt_lock/unlock, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 07/17] mm: madvise MADV_USERFAULT: prepare vm_flags to allow more than 32bits, Andrea Arcangeli, 2014/10/03
- [Qemu-devel] [PATCH 10/17] mm: rmap preparation for remap_anon_pages, Andrea Arcangeli, 2014/10/03