Skip to content
  • Glauber Costa's avatar
    vmscan: per-node deferred work · 1d3d4437
    Glauber Costa authored
    
    
    The list_lru infrastructure already keeps per-node LRU lists in its
    node-specific list_lru_node arrays and provide us with a per-node API, and
    the shrinkers are properly equiped with node information.  This means that
    we can now focus our shrinking effort in a single node, but the work that
    is deferred from one run to another is kept global at nr_in_batch.  Work
    can be deferred, for instance, during direct reclaim under a GFP_NOFS
    allocation, where situation, all the filesystem shrinkers will be
    prevented from running and accumulate in nr_in_batch the amount of work
    they should have done, but could not.
    
    This creates an impedance problem, where upon node pressure, work deferred
    will accumulate and end up being flushed in other nodes.  The problem we
    describe is particularly harmful in big machines, where many nodes can
    accumulate at the same time, all adding to the global counter nr_in_batch.
     As we accumulate more and more, we start to ask for the caches to flush
    even bigger numbers.  The result is that the caches are depleted and do
    not stabilize.  To achieve stable steady state behavior, we need to tackle
    it differently.
    
    In this patch we keep the deferred count per-node, in the new array
    nr_deferred[] (the name is also a bit more descriptive) and will never
    accumulate that to other nodes.
    
    Signed-off-by: default avatarGlauber Costa <glommer@openvz.org>
    Cc: Dave Chinner <dchinner@redhat.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: "Theodore Ts'o" <tytso@mit.edu>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
    Cc: Arve Hjønnevåg <arve@android.com>
    Cc: Carlos Maiolino <cmaiolino@redhat.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Chuck Lever <chuck.lever@oracle.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Gleb Natapov <gleb@redhat.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: J. Bruce Fields <bfields@redhat.com>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Jerome Glisse <jglisse@redhat.com>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Kent Overstreet <koverstreet@google.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Marcelo Tosatti <mtosatti@redhat.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Steven Whitehouse <swhiteho@redhat.com>
    Cc: Thomas Hellstrom <thellstrom@vmware.com>
    Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    1d3d4437