]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
selftests: cgroup: make test_memcg_sock robust against delayed sock stats
authorGuopeng Zhang <zhangguopeng@kylinos.cn>
Wed, 3 Dec 2025 11:56:30 +0000 (19:56 +0800)
committerTejun Heo <tj@kernel.org>
Mon, 8 Dec 2025 18:44:54 +0000 (08:44 -1000)
commit6360d444ae32871c6a048ac880ef3b871a439bad
tree0cdd6a287fcb806200134cc9b46f67d012bed766
parent311ead1be05d2348e89f873337c8375e856e1abb
selftests: cgroup: make test_memcg_sock robust against delayed sock stats

test_memcg_sock() currently requires that memory.stat's "sock " counter
is exactly zero immediately after the TCP server exits. On a busy system
this assumption is too strict:

  - Socket memory may be freed with a small delay (e.g. RCU callbacks).
  - memcg statistics are updated asynchronously via the rstat flushing
    worker, so the "sock " value in memory.stat can stay non-zero for a
    short period of time even after all socket memory has been uncharged.

As a result, test_memcg_sock() can intermittently fail even though socket
memory accounting is working correctly.

Make the test more robust by polling memory.stat for the "sock "
counter and allowing it some time to drop to zero instead of checking
it only once. The timeout is set to 3 seconds to cover the periodic
rstat flush interval (FLUSH_TIME = 2*HZ by default) plus some
scheduling slack. If the counter does not become zero within the
timeout, the test still fails as before.

On my test system, running test_memcontrol 50 times produced:

  - Before this patch:  6/50 runs passed.
  - After this patch:  50/50 runs passed.

Signed-off-by: Guopeng Zhang <zhangguopeng@kylinos.cn>
Suggested-by: Lance Yang <lance.yang@linux.dev>
Reviewed-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Michal Koutný <mkoutny@suse.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
tools/testing/selftests/cgroup/test_memcontrol.c