1*dfa3cf0bSSeongJae Park#!/bin/bash 2*dfa3cf0bSSeongJae Park# SPDX-License-Identifier: GPL-2.0 3*dfa3cf0bSSeongJae Park 4*dfa3cf0bSSeongJae Parkif [ $EUID -ne 0 ] 5*dfa3cf0bSSeongJae Parkthen 6*dfa3cf0bSSeongJae Park echo "Run as root" 7*dfa3cf0bSSeongJae Park exit $ksft_skip 8*dfa3cf0bSSeongJae Parkfi 9*dfa3cf0bSSeongJae Park 10*dfa3cf0bSSeongJae Parkdamon_sysfs="/sys/kernel/mm/damon/admin" 11*dfa3cf0bSSeongJae Parkif [ ! -d "$damon_sysfs" ] 12*dfa3cf0bSSeongJae Parkthen 13*dfa3cf0bSSeongJae Park echo "damon sysfs not found" 14*dfa3cf0bSSeongJae Park exit $ksft_skip 15*dfa3cf0bSSeongJae Parkfi 16*dfa3cf0bSSeongJae Park 17*dfa3cf0bSSeongJae Park# ensure filter directory 18*dfa3cf0bSSeongJae Parkecho 1 > "$damon_sysfs/kdamonds/nr_kdamonds" 19*dfa3cf0bSSeongJae Parkecho 1 > "$damon_sysfs/kdamonds/0/contexts/nr_contexts" 20*dfa3cf0bSSeongJae Parkecho 1 > "$damon_sysfs/kdamonds/0/contexts/0/schemes/nr_schemes" 21*dfa3cf0bSSeongJae Parkecho 1 > "$damon_sysfs/kdamonds/0/contexts/0/schemes/0/filters/nr_filters" 22*dfa3cf0bSSeongJae Park 23*dfa3cf0bSSeongJae Parkfilter_dir="$damon_sysfs/kdamonds/0/contexts/0/schemes/0/filters/0" 24*dfa3cf0bSSeongJae Park 25*dfa3cf0bSSeongJae Parkbefore_kb=$(grep Slab /proc/meminfo | awk '{print $2}') 26*dfa3cf0bSSeongJae Park 27*dfa3cf0bSSeongJae Park# try to leak 3000 KiB 28*dfa3cf0bSSeongJae Parkfor i in {1..102400}; 29*dfa3cf0bSSeongJae Parkdo 30*dfa3cf0bSSeongJae Park echo "012345678901234567890123456789" > "$filter_dir/memcg_path" 31*dfa3cf0bSSeongJae Parkdone 32*dfa3cf0bSSeongJae Park 33*dfa3cf0bSSeongJae Parkafter_kb=$(grep Slab /proc/meminfo | awk '{print $2}') 34*dfa3cf0bSSeongJae Park# expect up to 1500 KiB free from other tasks memory 35*dfa3cf0bSSeongJae Parkexpected_after_kb_max=$((before_kb + 1500)) 36*dfa3cf0bSSeongJae Park 37*dfa3cf0bSSeongJae Parkif [ "$after_kb" -gt "$expected_after_kb_max" ] 38*dfa3cf0bSSeongJae Parkthen 39*dfa3cf0bSSeongJae Park echo "maybe memcg_path are leaking: $before_kb -> $after_kb" 40*dfa3cf0bSSeongJae Park exit 1 41*dfa3cf0bSSeongJae Parkelse 42*dfa3cf0bSSeongJae Park exit 0 43*dfa3cf0bSSeongJae Parkfi 44