• Peter Xu's avatar
    mm/gup: accelerate thp gup even for "pages != NULL" · 57edfcfd
    Peter Xu authored
    The acceleration of THP was done with ctx.page_mask, however it'll be
    ignored if **pages is non-NULL.
    
    The old optimization was introduced in 2013 in 240aadee ("mm:
    accelerate mm_populate() treatment of THP pages").  It didn't explain why
    we can't optimize the **pages non-NULL case.  It's possible that at that
    time the major goal was for mm_populate() which should be enough back
    then.
    
    Optimize thp for all cases, by properly looping over each subpage, doing
    cache flushes, and boost refcounts / pincounts where needed in one go.
    
    This can be verified using gup_test below:
    
      # chrt -f 1 ./gup_test -m 512 -t -L -n 1024 -r 10
    
    Before:    13992.50 ( +-8.75%)
    After:       378.50 (+-69.62%)
    
    Link: https://lkml.kernel.org/r/20230628215310.73782-6-peterx@redhat.comSigned-off-by: default avatarPeter Xu <peterx@redhat.com>
    Reviewed-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: James Houghton <jthoughton@google.com>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Kirill A . Shutemov <kirill@shutemov.name>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Mike Rapoport (IBM) <rppt@kernel.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Yang Shi <shy828301@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    57edfcfd
gup.c 96.2 KB