• Huang Ying's avatar
    mm: don't use radix tree writeback tags for pages in swap cache · 371a096e
    Huang Ying authored
    File pages use a set of radix tree tags (DIRTY, TOWRITE, WRITEBACK,
    etc.) to accelerate finding the pages with a specific tag in the radix
    tree during inode writeback.  But for anonymous pages in the swap cache,
    there is no inode writeback.  So there is no need to find the pages with
    some writeback tags in the radix tree.  It is not necessary to touch
    radix tree writeback tags for pages in the swap cache.
    
    Per Rik van Riel's suggestion, a new flag AS_NO_WRITEBACK_TAGS is
    introduced for address spaces which don't need to update the writeback
    tags.  The flag is set for swap caches.  It may be used for DAX file
    systems, etc.
    
    With this patch, the swap out bandwidth improved 22.3% (from ~1.2GB/s to
    ~1.48GBps) in the vm-scalability swap-w-seq test case with 8 processes.
    The test is done on a Xeon E5 v3 system.  The swap device used is a RAM
    simulated PMEM (persistent memory) device.  The improvement comes from
    the reduced contention on the swap cache radix tree lock.  To test
    sequential swapping out, the test case uses 8 processes, which
    sequentially allocate and write to the anonymous pages until RAM and
    part of the swap device is used up.
    
    Details of comparison is as follow,
    
    base             base+patch
    ---------------- --------------------------
             %stddev     %change         %stddev
                 \          |                \
       2506952 ±  2%     +28.1%    3212076 ±  7%  vm-scalability.throughput
       1207402 ±  7%     +22.3%    1476578 ±  6%  vmstat.swap.so
         10.86 ± 12%     -23.4%       8.31 ± 16%  perf-profile.cycles-pp._raw_spin_lock_irq.__add_to_swap_cache.add_to_swap_cache.add_to_swap.shrink_page_list
         10.82 ± 13%     -33.1%       7.24 ± 14%  perf-profile.cycles-pp._raw_spin_lock_irqsave.__remove_mapping.shrink_page_list.shrink_inactive_list.shrink_zone_memcg
         10.36 ± 11%    -100.0%       0.00 ± -1%  perf-profile.cycles-pp._raw_spin_lock_irqsave.__test_set_page_writeback.bdev_write_page.__swap_writepage.swap_writepage
         10.52 ± 12%    -100.0%       0.00 ± -1%  perf-profile.cycles-pp._raw_spin_lock_irqsave.test_clear_page_writeback.end_page_writeback.page_endio.pmem_rw_page
    
    Link: http://lkml.kernel.org/r/1472578089-5560-1-git-send-email-ying.huang@intel.comSigned-off-by: default avatar"Huang, Ying" <ying.huang@intel.com>
    Acked-by: default avatarRik van Riel <riel@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Shaohua Li <shli@kernel.org>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Wu Fengguang <fengguang.wu@intel.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    371a096e
swap_state.c 13.2 KB