• G
    slub: slub-specific propagation changes · 107dab5c
    Glauber Costa 提交于
    SLUB allows us to tune a particular cache behavior with sysfs-based
    tunables.  When creating a new memcg cache copy, we'd like to preserve any
    tunables the parent cache already had.
    
    This can be done by tapping into the store attribute function provided by
    the allocator.  We of course don't need to mess with read-only fields.
    Since the attributes can have multiple types and are stored internally by
    sysfs, the best strategy is to issue a ->show() in the root cache, and
    then ->store() in the memcg cache.
    
    The drawback of that, is that sysfs can allocate up to a page in buffering
    for show(), that we are likely not to need, but also can't guarantee.  To
    avoid always allocating a page for that, we can update the caches at store
    time with the maximum attribute size ever stored to the root cache.  We
    will then get a buffer big enough to hold it.  The corolary to this, is
    that if no stores happened, nothing will be propagated.
    
    It can also happen that a root cache has its tunables updated during
    normal system operation.  In this case, we will propagate the change to
    all caches that are already active.
    
    [akpm@linux-foundation.org: tweak code to avoid __maybe_unused]
    Signed-off-by: NGlauber Costa <glommer@parallels.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Frederic Weisbecker <fweisbec@redhat.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: JoonSoo Kim <js1304@gmail.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Mel Gorman <mel@csn.ul.ie>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: Pekka Enberg <penberg@cs.helsinki.fi>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Suleiman Souhlal <suleiman@google.com>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    107dab5c
slub.c 127.9 KB