• Glauber Costa's avatar
    memcg: allocate memory for memcg caches whenever a new memcg appears · 55007d84
    Glauber Costa authored
    Every cache that is considered a root cache (basically the "original"
    caches, tied to the root memcg/no-memcg) will have an array that should be
    large enough to store a cache pointer per each memcg in the system.
    
    Theoreticaly, this is as high as 1 << sizeof(css_id), which is currently
    in the 64k pointers range.  Most of the time, we won't be using that much.
    
    What goes in this patch, is a simple scheme to dynamically allocate such
    an array, in order to minimize memory usage for memcg caches.  Because we
    would also like to avoid allocations all the time, at least for now, the
    array will only grow.  It will tend to be big enough to hold the maximum
    number of kmem-limited memcgs ever achieved.
    
    We'll allocate it to be a minimum of 64 kmem-limited memcgs.  When we have
    more than that, we'll start doubling the size of this array every time the
    limit is reached.
    
    Because we are only considering kmem limited memcgs, a natural point for
    this to happen is when we write to the limit.  At that point, we already
    have set_limit_mutex held, so that will become our natural synchronization
    mechanism.
    Signed-off-by: default avatarGlauber 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: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    55007d84
memcontrol.c 165 KB