• Glauber Costa's avatar
    memcg: use static branches when code not in use · a8964b9b
    Glauber Costa authored
    We can use static branches to patch the code in or out when not used.
    
    Because the _ACTIVE bit on kmem_accounted is only set after the increment
    is done, we guarantee that the root memcg will always be selected for kmem
    charges until all call sites are patched (see memcg_kmem_enabled).  This
    guarantees that no mischarges are applied.
    
    Static branch decrement happens when the last reference count from the
    kmem accounting in memcg dies.  This will only happen when the charges
    drop down to 0.
    
    When that happens, we need to disable the static branch only on those
    memcgs that enabled it.  To achieve this, we would be forced to complicate
    the code by keeping track of which memcgs were the ones that actually
    enabled limits, and which ones got it from its parents.
    
    It is a lot simpler just to do static_key_slow_inc() on every child
    that is accounted.
    Signed-off-by: default avatarGlauber Costa <glommer@parallels.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.cz>
    Acked-by: default avatarKamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@cs.helsinki.fi>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Suleiman Souhlal <suleiman@google.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Frederic Weisbecker <fweisbec@redhat.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: JoonSoo Kim <js1304@gmail.com>
    Cc: Mel Gorman <mel@csn.ul.ie>
    Cc: Rik van Riel <riel@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a8964b9b
memcontrol.c 158 KB