• Chengming Zhou's avatar
    mm/ksm: refactor out try_to_merge_with_zero_page() · ac90c56b
    Chengming Zhou authored
    Patch series "mm/ksm: cmp_and_merge_page() optimizations and cleanup", v2.
    
    This series mainly optimizes cmp_and_merge_page() to have more efficient
    separate code flow for ksm page and non-ksm anon page.
    
    - ksm page: don't need to calculate the checksum obviously.
    - anon page: don't need to search stable tree if changing fast and try
      to merge with zero page before searching ksm page on stable tree.
    
    Please see the patch-2 for details.
    
    Patch-3 is cleanup also a little optimization for the chain()/chain_prune
    interfaces, which made the stable_tree_search()/stable_tree_insert() over
    complex.
    
    I have done simple testing using "hackbench -g 1 -l 300000" (maybe I need
    to use a better workload) on my machine, have seen a little CPU usage
    decrease of ksmd and some improvements of cmp_and_merge_page() latency:
    
    We can see the latency of cmp_and_merge_page() when handling non-ksm anon
    pages has been improved.
    
    
    This patch (of 3):
    
    In preparation for later changes, refactor out a new function called
    try_to_merge_with_zero_page(), which tries to merge with zero page.
    
    Link: https://lkml.kernel.org/r/20240621-b4-ksm-scan-optimize-v2-0-1c328aa9e30b@linux.dev
    Link: https://lkml.kernel.org/r/20240621-b4-ksm-scan-optimize-v2-1-1c328aa9e30b@linux.devSigned-off-by: default avatarChengming Zhou <chengming.zhou@linux.dev>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Stefan Roesch <shr@devkernel.io>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    ac90c56b
ksm.c 108 KB