scx/meson-scripts/test_sched
patso 120211d731
split build and test jobs
split build and test jobs to reduce ci turnaround time
and make it clear what is failing when something fails.

also add virtiofsd to deps to make test compilation faster
(most test time is compliation) and remove all force 9ps.
2024-09-08 02:54:24 -04:00

82 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
#
# Run a scheduler for TIMEOUT seconds inside virtme-ng and catch potential
# errors, then unload the scheduler and return the exit status.
# Maximum time for each scheduler run.
TEST_TIMEOUT=30
# Maximum timeout for the guest used for each scheduler run (this is used to
# hard-shutdown the guest in case of system hangs).
GUEST_TIMEOUT=60
# List of schedulers to test
#
# TODO:
# - scx_flatcg, scx_pair: excluded until cgroup support lands upstream
# - scx_mitosis: not ready yet
#
declare -A SCHEDS
# enable running tests on individual schedulers
if [ $# -ge 2 ] ; then
SCHEDS[$2]=""
else
SCHEDS["scx_simple"]=""
SCHEDS["scx_central"]=""
SCHEDS["scx_nest"]=""
SCHEDS["scx_rusty"]=""
SCHEDS["scx_rustland"]=""
SCHEDS["scx_bpfland"]=""
SCHEDS["scx_layered"]="--run-example"
fi
if [[ -v SCHEDS["scx_layered"] ]] ; then
SCHEDS["scx_layered"]="--run-example"
fi
printf "testing scheds:\n"
for i in "${!SCHEDS[@]}"; do
printf "%s=%s\n" "$i" "${SCHEDS[$i]}";
done
if [ ! -x `which vng` ]; then
echo "vng not found, please install virtme-ng to enable testing"
exit 1
fi
if [ $# -lt 1 ]; then
echo "Usage: $0 VMLINUZ"
exit 1
fi
kernel=$1
for sched in ${!SCHEDS[@]}; do
args=${SCHEDS[$sched]}
sched_path=$(find -type f -executable -name ${sched})
if [ ! -n "${sched_path}" ]; then
echo "${sched}: binary not found"
echo "FAIL: ${sched}"
exit 1
fi
echo "testing ${sched_path}"
rm -f /tmp/output
timeout --preserve-status ${GUEST_TIMEOUT} \
vng -m 2G -v -r ${kernel} -- \
"timeout --foreground --preserve-status ${TEST_TIMEOUT} ${sched_path} ${args}" \
2> >(tee /tmp/output) </dev/null
grep -v " Speculative Return Stack Overflow" /tmp/output | \
sed -n -e '/\bBUG:/q1' \
-e '/\bWARNING:/q1' \
-e '/\berror\b/Iq1' \
-e '/\bstall/Iq1' \
-e '/\btimeout\b/Iq1'
res=$?
if [ ${res} -ne 0 ]; then
echo "FAIL: ${sched}"
exit 1
else
echo "OK: ${sched}"
fi
done