Skip to content
  • Vlastimil Babka's avatar
    mm, proc: reduce cost of /proc/pid/smaps for unpopulated shmem mappings · 48131e03
    Vlastimil Babka authored
    
    
    Following the previous patch, further reduction of /proc/pid/smaps cost
    is possible for private writable shmem mappings with unpopulated areas
    where the page walk invokes the .pte_hole function.  We can use radix
    tree iterator for each such area instead of calling find_get_entry() in
    a loop.  This is possible at the extra maintenance cost of introducing
    another shmem function shmem_partial_swap_usage().
    
    To demonstrate the diference, I have measured this on a process that
    creates a private writable 2GB mapping of a partially swapped out
    /dev/shm/file (which cannot employ the optimizations from the prvious
    patch) and doesn't populate it at all.  I time how long does it take to
    cat /proc/pid/smaps of this process 100 times.
    
    Before this patch:
    
    real    0m3.831s
    user    0m0.180s
    sys     0m3.212s
    
    After this patch:
    
    real    0m1.176s
    user    0m0.180s
    sys     0m0.684s
    
    The time is similar to the case where a radix tree iterator is employed
    on the whole mapping.
    
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Jerome Marchand <jmarchan@redhat.com>
    Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    48131e03