Skip to content

Commit

Permalink
selftests: cgroup: fix test_kmem_memcg_deletion kernel mem check
Browse files Browse the repository at this point in the history
Currently, not all kernel memory usage is being accounted for. This
commit switches to using the kernel entry within memory.stat which
already includes kernel_stack, pagetables, and slab. The kernel entry
also includes vmalloc and other additional kernel memory use cases which
were missing.

Link: https://lkml.kernel.org/r/bvrhe2tpsts2azaroq4ubp2slawmop6orndsswrewuscw3ugvk@kmemmrttsnc7
Signed-off-by: Lucas Karpinski <lkarpins@redhat.com>
Acked-by: Shakeel Butt <shakeelb@google.com>
Acked-by: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: Zefan Li <lizefan.x@bytedance.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
  • Loading branch information
Lucas Karpinski authored and Andrew Morton committed Aug 24, 2023
1 parent 004a9a3 commit 7131fd7
Showing 1 changed file with 7 additions and 14 deletions.
21 changes: 7 additions & 14 deletions tools/testing/selftests/cgroup/test_kmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,11 +162,11 @@ static int cg_run_in_subcgroups(const char *parent,
* allocates some slab memory (mostly negative dentries) using 2 * NR_CPUS
* threads. Then it checks the sanity of numbers on the parent level:
* the total size of the cgroups should be roughly equal to
* anon + file + slab + kernel_stack.
* anon + file + kernel + sock.
*/
static int test_kmem_memcg_deletion(const char *root)
{
long current, slab, anon, file, kernel_stack, pagetables, percpu, sock, sum;
long current, anon, file, kernel, sock, sum;
int ret = KSFT_FAIL;
char *parent;

Expand All @@ -184,29 +184,22 @@ static int test_kmem_memcg_deletion(const char *root)
goto cleanup;

current = cg_read_long(parent, "memory.current");
slab = cg_read_key_long(parent, "memory.stat", "slab ");
anon = cg_read_key_long(parent, "memory.stat", "anon ");
file = cg_read_key_long(parent, "memory.stat", "file ");
kernel_stack = cg_read_key_long(parent, "memory.stat", "kernel_stack ");
pagetables = cg_read_key_long(parent, "memory.stat", "pagetables ");
percpu = cg_read_key_long(parent, "memory.stat", "percpu ");
kernel = cg_read_key_long(parent, "memory.stat", "kernel ");
sock = cg_read_key_long(parent, "memory.stat", "sock ");
if (current < 0 || slab < 0 || anon < 0 || file < 0 ||
kernel_stack < 0 || pagetables < 0 || percpu < 0 || sock < 0)
if (current < 0 || anon < 0 || file < 0 || kernel < 0 || sock < 0)
goto cleanup;

sum = slab + anon + file + kernel_stack + pagetables + percpu + sock;
sum = anon + file + kernel + sock;
if (abs(sum - current) < MAX_VMSTAT_ERROR) {
ret = KSFT_PASS;
} else {
printf("memory.current = %ld\n", current);
printf("slab + anon + file + kernel_stack = %ld\n", sum);
printf("slab = %ld\n", slab);
printf("anon + file + kernel + sock = %ld\n", sum);
printf("anon = %ld\n", anon);
printf("file = %ld\n", file);
printf("kernel_stack = %ld\n", kernel_stack);
printf("pagetables = %ld\n", pagetables);
printf("percpu = %ld\n", percpu);
printf("kernel = %ld\n", kernel);
printf("sock = %ld\n", sock);
}

Expand Down

0 comments on commit 7131fd7

Please sign in to comment.