• Tim Chen's avatar
    fs/superblock: avoid locking counting inodes and dentries before reclaiming them · d23da150
    Tim Chen authored
    We remove the call to grab_super_passive in call to super_cache_count.
    This becomes a scalability bottleneck as multiple threads are trying to do
    memory reclamation, e.g.  when we are doing large amount of file read and
    page cache is under pressure.  The cached objects quickly got reclaimed
    down to 0 and we are aborting the cache_scan() reclaim.  But counting
    creates a log jam acquiring the sb_lock.
    
    We are holding the shrinker_rwsem which ensures the safety of call to
    list_lru_count_node() and s_op->nr_cached_objects.  The shrinker is
    unregistered now before ->kill_sb() so the operation is safe when we are
    doing unmount.
    
    The impact will depend heavily on the machine and the workload but for a
    small machine using postmark tuned to use 4xRAM size the results were
    
                                      3.15.0-rc5            3.15.0-rc5
                                         vanilla         shrinker-v1r1
    Ops/sec Transactions         21.00 (  0.00%)       24.00 ( 14.29%)
    Ops/sec FilesCreate          39.00 (  0.00%)       44.00 ( 12.82%)
    Ops/sec CreateTransact       10.00 (  0.00%)       12.00 ( 20.00%)
    Ops/sec FilesDeleted       6202.00 (  0.00%)     6202.00 (  0.00%)
    Ops/sec DeleteTransact       11.00 (  0.00%)       12.00 (  9.09%)
    Ops/sec DataRead/MB          25.97 (  0.00%)       29.10 ( 12.05%)
    Ops/sec DataWrite/MB         49.99 (  0.00%)       56.02 ( 12.06%)
    
    ffsb running in a configuration that is meant to simulate a mail server showed
    
                                     3.15.0-rc5             3.15.0-rc5
                                        vanilla          shrinker-v1r1
    Ops/sec readall           9402.63 (  0.00%)      9567.97 (  1.76%)
    Ops/sec create            4695.45 (  0.00%)      4735.00 (  0.84%)
    Ops/sec delete             173.72 (  0.00%)       179.83 (  3.52%)
    Ops/sec Transactions     14271.80 (  0.00%)     14482.81 (  1.48%)
    Ops/sec Read                37.00 (  0.00%)        37.60 (  1.62%)
    Ops/sec Write               18.20 (  0.00%)        18.30 (  0.55%)
    Signed-off-by: default avatarTim Chen <tim.c.chen@linux.intel.com>
    Signed-off-by: default avatarMel Gorman <mgorman@suse.de>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Dave Chinner <david@fromorbit.com>
    Tested-by: default avatarYuanhan Liu <yuanhan.liu@linux.intel.com>
    Cc: Bob Liu <bob.liu@oracle.com>
    Cc: Jan Kara <jack@suse.cz>
    Acked-by: default avatarRik van Riel <riel@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d23da150
super.c 34.6 KB