mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-02 05:51:14 -04:00
selftests/damon/sysfs_memcg_path_leak.sh: use kmemleak
Patch series "selftests/damon: improve leak detection and wss estimation reliability". Two DAMON selftets, namely 'sysfs_memcg_leak' and 'sysfs_update_schemes_tried_regions_wss_estimation' frequently show intermittent failures due to their unreliable leak detection and working set size estimation. Make those more reliable. This patch (of 5): sysfs_memcg_path_leak.sh determines if the memory leak has happened by seeing if Slab size on /proc/meminfo increases more than expected after an action. Depending on the system and background workloads, the reasonable expectation varies. For the reason, the test frequently shows intermittent failures. Use kmemleak, which is much more reliable and correct, instead. Link: https://lkml.kernel.org/r/20260117020731.226785-1-sj@kernel.org Link: https://lkml.kernel.org/r/20260117020731.226785-2-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
dd2c6ec24f
commit
94a62284ed
@@ -14,6 +14,13 @@ then
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
kmemleak="/sys/kernel/debug/kmemleak"
|
||||
if [ ! -f "$kmemleak" ]
|
||||
then
|
||||
echo "$kmemleak not found"
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
# ensure filter directory
|
||||
echo 1 > "$damon_sysfs/kdamonds/nr_kdamonds"
|
||||
echo 1 > "$damon_sysfs/kdamonds/0/contexts/nr_contexts"
|
||||
@@ -22,22 +29,17 @@ echo 1 > "$damon_sysfs/kdamonds/0/contexts/0/schemes/0/filters/nr_filters"
|
||||
|
||||
filter_dir="$damon_sysfs/kdamonds/0/contexts/0/schemes/0/filters/0"
|
||||
|
||||
before_kb=$(grep Slab /proc/meminfo | awk '{print $2}')
|
||||
|
||||
# try to leak 3000 KiB
|
||||
for i in {1..102400};
|
||||
# try to leak 128 times
|
||||
for i in {1..128};
|
||||
do
|
||||
echo "012345678901234567890123456789" > "$filter_dir/memcg_path"
|
||||
done
|
||||
|
||||
after_kb=$(grep Slab /proc/meminfo | awk '{print $2}')
|
||||
# expect up to 1500 KiB free from other tasks memory
|
||||
expected_after_kb_max=$((before_kb + 1500))
|
||||
|
||||
if [ "$after_kb" -gt "$expected_after_kb_max" ]
|
||||
echo scan > "$kmemleak"
|
||||
kmemleak_report=$(cat "$kmemleak")
|
||||
if [ "$kmemleak_report" = "" ]
|
||||
then
|
||||
echo "maybe memcg_path are leaking: $before_kb -> $after_kb"
|
||||
exit 1
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
echo "$kmemleak_report"
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user