blob: 34b9e12d4c48a5c4c58bf486e680ae8b705a3afc [file] [log] [blame]
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
bindir=$(dirname "$0")
cd "$bindir"
damo="../../damo"
testname=$(basename $(pwd))
damon_interfaces=""
if [ -d "/sys/kernel/mm/damon" ]
then
damon_interfaces+="sysfs "
fi
if [ "$damon_interfaces" = "" ]
then
echo "SKIP $(basename $(pwd)) (DAMON interface not found)"
exit 0
fi
for damon_interface in $damon_interfaces
do
testname2="$testname $damon_interface"
if sudo "$damo" features supported | grep schemes_tried_regions --quiet
then
do_report_access_test="true"
else
do_report_access_test="false"
fi
sudo "$damo" start --ops paddr \
--damon_interface_DEPRECATED "$damon_interface" \
-c monitoring_damos.json 2> /dev/null
if ! pgrep kdamond.0 > /dev/null
then
echo "FAIL $testname2 (kdamond.0 pid not found after start)"
exit 1
fi
echo "PASS $testname2 start"
sudo "$damo" record ongoing --timeout 3 \
--damon_interface_DEPRECATED "$damon_interface" &> /dev/null
if ! "$damo" validate 2> /dev/null
then
echo "FAIL $testname2 (invalid record file)"
if ! sudo "$damo" stop
then
echo "failed stopping DAMON"
fi
exit 1
fi
echo "PASS $testname2 record-ongoing-validate"
for i in {1..10}
do
if ! sudo "$damo" report damon &> /dev/null
then
echo "FAIL $testname2 report damon $i failed"
if ! sudo "$damo" stop
then
echo "failed stopping DAMON"
fi
exit 1
fi
done
echo "PASS $testname2 report damon $i"
if [ "$do_report_access_test" = "true" ]
then
for i in {1..10}
do
if ! sudo "$damo" report access &> /dev/null
then
echo "FAIL $testname2 report-access $i failed"
if ! sudo "$damo" stop
then
echo "failed stopping DAMON"
fi
exit 1
fi
done
echo "PASS $testname2 report-access $i"
fi
if ! sudo "$damo" tune --aggr 200000 --ops paddr \
--damon_interface_DEPRECATED "$damon_interface" &> /dev/null
then
echo "FAIL $testname2 tune"
if ! sudo "$damo" stop
then
echo "failed stopping DAMON"
fi
exit 1
fi
sudo "$damo" record ongoing --timeout 3 \
--damon_interface_DEPRECATED "$damon_interface" &> /dev/null
if ! "$damo" validate --aggr 180000 225000 --nr_accesses 0 44 2> /dev/null
then
echo "FAIL $testname2 (invalid record file after tune)"
if ! sudo "$damo" stop
then
echo "failed stopping DAMON"
fi
exit 1
fi
echo "PASS $testname2 tune-record-ongoing-validate"
for i in {1..10}
do
if ! sudo "$damo" report damon &> /dev/null
then
echo "FAIL $testname2 tune-report-damon $i failed"
if ! sudo "$damo" stop
then
echo "failed stopping DAMON"
fi
exit 1
fi
done
echo "PASS $testname2 tune-report-damon $i"
if [ "$do_report_access_test" = "true" ]
then
for i in {1..10}
do
if ! sudo "$damo" report access &> /dev/null
then
echo "FAIL $testname2 tune-report-access $i failed"
if ! sudo "$damo" stop
then
echo "failed stopping DAMON"
fi
exit 1
fi
done
echo "PASS $testname2 tune-report-access $i"
fi
sudo "$damo" stop --damon_interface_DEPRECATED "$damon_interface" \
2> /dev/null
if pgrep kdamond.0 > /dev/null
then
echo "FAIL $testname2 (kdamond.0 pid found after stop)"
exit 1
fi
echo "PASS $testname2 stop"
done
rm -f damon.data damon.data.old
echo "PASS $(basename $(pwd))"