• Ken Chen's avatar
    [PATCH] simplify shmem_aops.set_page_dirty() method · 76719325
    Ken Chen authored
    shmem backed file does not have page writeback, nor it participates in
    backing device's dirty or writeback accounting.  So using generic
    __set_page_dirty_nobuffers() for its .set_page_dirty aops method is a bit
    overkill.  It unnecessarily prolongs shm unmap latency.
    
    For example, on a densely populated large shm segment (sevearl GBs), the
    unmapping operation becomes painfully long.  Because at unmap, kernel
    transfers dirty bit in PTE into page struct and to the radix tree tag.  The
    operation of tagging the radix tree is particularly expensive because it
    has to traverse the tree from the root to the leaf node on every dirty
    page.  What's bothering is that radix tree tag is used for page write back.
     However, shmem is memory backed and there is no page write back for such
    file system.  And in the end, we spend all that time tagging radix tree and
    none of that fancy tagging will be used.  So let's simplify it by introduce
    a new aops __set_page_dirty_no_writeback and this will speed up shm unmap.
    Signed-off-by: default avatarKen Chen <kenchen@google.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Hugh Dickins <hugh@veritas.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    76719325
page-writeback.c 27.3 KB