• Stefan Roesch's avatar
    proc/ksm: add ksm stats to /proc/pid/smaps · 8b479335
    Stefan Roesch authored
    With madvise and prctl KSM can be enabled for different VMA's.  Once it is
    enabled we can query how effective KSM is overall.  However we cannot
    easily query if an individual VMA benefits from KSM.
    
    This commit adds a KSM section to the /prod/<pid>/smaps file.  It reports
    how many of the pages are KSM pages.  Note that KSM-placed zeropages are
    not included, only actual KSM pages.
    
    Here is a typical output:
    
    7f420a000000-7f421a000000 rw-p 00000000 00:00 0
    Size:             262144 kB
    KernelPageSize:        4 kB
    MMUPageSize:           4 kB
    Rss:               51212 kB
    Pss:                8276 kB
    Shared_Clean:        172 kB
    Shared_Dirty:      42996 kB
    Private_Clean:       196 kB
    Private_Dirty:      7848 kB
    Referenced:        15388 kB
    Anonymous:         51212 kB
    KSM:               41376 kB
    LazyFree:              0 kB
    AnonHugePages:         0 kB
    ShmemPmdMapped:        0 kB
    FilePmdMapped:         0 kB
    Shared_Hugetlb:        0 kB
    Private_Hugetlb:       0 kB
    Swap:             202016 kB
    SwapPss:            3882 kB
    Locked:                0 kB
    THPeligible:    0
    ProtectionKey:         0
    ksm_state:          0
    ksm_skip_base:      0
    ksm_skip_count:     0
    VmFlags: rd wr mr mw me nr mg anon
    
    This information also helps with the following workflow:
    - First enable KSM for all the VMA's of a process with prctl.
    - Then analyze with the above smaps report which VMA's benefit the most
    - Change the application (if possible) to add the corresponding madvise
    calls for the VMA's that benefit the most
    
    [shr@devkernel.io: v5]
      Link: https://lkml.kernel.org/r/20230823170107.1457915-1-shr@devkernel.io
    Link: https://lkml.kernel.org/r/20230822180539.1424843-1-shr@devkernel.ioSigned-off-by: default avatarStefan Roesch <shr@devkernel.io>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Rik van Riel <riel@surriel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    8b479335
task_mmu.c 48.9 KB