Commit 1974c45d authored by Vasily Averin's avatar Vasily Averin Committed by Linus Torvalds

tools/cgroup/slabinfo.py: updated to work on current kernel

slabinfo.py script does not work with actual kernel version.

First, it was unable to recognise SLUB susbsytem, and when I specified
it manually it failed again with

  AttributeError: 'struct page' has no member 'obj_cgroups'

.. and then again with

  File "tools/cgroup/memcg_slabinfo.py", line 221, in main
    memcg.kmem_caches.address_of_(),
  AttributeError: 'struct mem_cgroup' has no member 'kmem_caches'

Link: https://lkml.kernel.org/r/cec1a75e-43b4-3d64-2084-d9f98fda037f@virtuozzo.comSigned-off-by: default avatarVasily Averin <vvs@virtuozzo.com>
Tested-by: default avatarRoman Gushchin <guro@fb.com>
Acked-by: default avatarRoman Gushchin <guro@fb.com>
Cc: Michal Hocko <mhocko@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ed98b015
...@@ -128,9 +128,9 @@ def detect_kernel_config(): ...@@ -128,9 +128,9 @@ def detect_kernel_config():
cfg['nr_nodes'] = prog['nr_online_nodes'].value_() cfg['nr_nodes'] = prog['nr_online_nodes'].value_()
if prog.type('struct kmem_cache').members[1][1] == 'flags': if prog.type('struct kmem_cache').members[1].name == 'flags':
cfg['allocator'] = 'SLUB' cfg['allocator'] = 'SLUB'
elif prog.type('struct kmem_cache').members[1][1] == 'batchcount': elif prog.type('struct kmem_cache').members[1].name == 'batchcount':
cfg['allocator'] = 'SLAB' cfg['allocator'] = 'SLAB'
else: else:
err('Can\'t determine the slab allocator') err('Can\'t determine the slab allocator')
...@@ -193,7 +193,7 @@ def main(): ...@@ -193,7 +193,7 @@ def main():
# look over all slab pages, belonging to non-root memcgs # look over all slab pages, belonging to non-root memcgs
# and look for objects belonging to the given memory cgroup # and look for objects belonging to the given memory cgroup
for page in for_each_slab_page(prog): for page in for_each_slab_page(prog):
objcg_vec_raw = page.obj_cgroups.value_() objcg_vec_raw = page.memcg_data.value_()
if objcg_vec_raw == 0: if objcg_vec_raw == 0:
continue continue
cache = page.slab_cache cache = page.slab_cache
...@@ -202,7 +202,7 @@ def main(): ...@@ -202,7 +202,7 @@ def main():
addr = cache.value_() addr = cache.value_()
caches[addr] = cache caches[addr] = cache
# clear the lowest bit to get the true obj_cgroups # clear the lowest bit to get the true obj_cgroups
objcg_vec = Object(prog, page.obj_cgroups.type_, objcg_vec = Object(prog, 'struct obj_cgroup **',
value=objcg_vec_raw & ~1) value=objcg_vec_raw & ~1)
if addr not in stats: if addr not in stats:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment