• Song Liu's avatar
    filemap: check compound_head(page)->mapping in filemap_fault() · 585e5a7b
    Song Liu authored
    Patch series "Enable THP for text section of non-shmem files", v10;
    
    This patchset follows up discussion at LSF/MM 2019.  The motivation is to
    put text section of an application in THP, and thus reduces iTLB miss rate
    and improves performance.  Both Facebook and Oracle showed strong
    interests to this feature.
    
    To make reviews easier, this set aims a mininal valid product.  Current
    version of the work does not have any changes to file system specific
    code.  This comes with some limitations (discussed later).
    
    This set enables an application to "hugify" its text section by simply
    running something like:
    
              madvise(0x600000, 0x80000, MADV_HUGEPAGE);
    
    Before this call, the /proc/<pid>/maps looks like:
    
        00400000-074d0000 r-xp 00000000 00:27 2006927     app
    
    After this call, part of the text section is split out and mapped to
    THP:
    
        00400000-00425000 r-xp 00000000 00:27 2006927     app
        00600000-00e00000 r-xp 00200000 00:27 2006927     app   <<< on THP
        00e00000-074d0000 r-xp 00a00000 00:27 2006927     app
    
    Limitations:
    
    1. This only works for text section (vma with VM_DENYWRITE).
    2. Original limitation #2 is removed in v3.
    
    We gated this feature with an experimental config, READ_ONLY_THP_FOR_FS.
    Once we get better support on the write path, we can remove the config and
    enable it by default.
    
    Tested cases:
    1. Tested with btrfs and ext4.
    2. Tested with real work application (memcache like caching service).
    3. Tested with "THP aware uprobe":
       https://patchwork.kernel.org/project/linux-mm/list/?series=131339
    
    This patch (of 7):
    
    Currently, filemap_fault() avoids race condition with truncate by checking
    page->mapping == mapping.  This does not work for compound pages.  This
    patch let it check compound_head(page)->mapping instead.
    
    Link: http://lkml.kernel.org/r/20190801184244.3169074-2-songliubraving@fb.comSigned-off-by: default avatarSong Liu <songliubraving@fb.com>
    Acked-by: default avatarRik van Riel <riel@surriel.com>
    Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: William Kucharski <william.kucharski@oracle.com>
    Cc: Hillf Danton <hdanton@sina.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    585e5a7b
filemap.c 96.2 KB