Skip to content
  • Shakeel Butt's avatar
    memcg: reduce memcg tree traversals for stats collection · 8de7ecc6
    Shakeel Butt authored
    Currently cgroup-v1's memcg_stat_show traverses the memcg tree ~17 times
    to collect the stats while cgroup-v2's memory_stat_show traverses the
    memcg tree thrice.  On a large machine, a couple thousand memcgs is very
    normal and if the churn is high and memcgs stick around during to several
    reasons, tens of thousands of nodes in memcg tree can exist.  This patch
    has refactored and shared the stat collection code between cgroup-v1 and
    cgroup-v2 and has reduced the tree traversal to just one.
    
    I ran a simple benchmark which reads the root_mem_cgroup's stat file
    1000 times in the presense of 2500 memcgs on cgroup-v1. The results are:
    
    Without the patch:
    $ time ./read-root-stat-1000-times
    
    real    0m1.663s
    user    0m0.000s
    sys     0m1.660s
    
    With the patch:
    $ time ./read-root-stat-1000-times
    
    real    0m0.468s
    user    0m0.000s
    sys     0m0.467s
    
    Link: http://lkml.kernel.org/r/20180724224635.143944-1-shakeelb@google.com
    
    
    Signed-off-by: default avatarShakeel Butt <shakeelb@google.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: Bruce Merry <bmerry@ska.ac.za>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8de7ecc6