scx/meson-scripts/test_sched
likewhatevs bf68679d35
Setup "debugging" and misc cleanup (#695)
* Fix a couple of misc errors in build scripts.
* Tweak scripts/kconfigs to make bpftrace work.
* Update how CI caching works to make builds faster (6 minute turnaround
  time)
* Update CI config to generate per-scheduler debug archives w/ guest
  dmesg/scheduler stdout, guest stdout, bpftrace script output,
  veristat output.

* Update build scripts to accept the following:
** VNG RW -- write to host filesystem (better caching, logging).
* For stress tests in particular (via ini config):
** QEMU Opts -- to facilitate reproducing bugs (i.e. high core count).
** bpftrace scripts -- specify bpftrace scripts to run during stress
tests.
2024-09-26 11:11:10 -04:00

94 lines
2.3 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_mitosis: not ready yet
#
declare -A SCHEDS
VNG_RW=''
# Enable vng rw for when on ci.
if [ $# -ge 3 ] ; then
if [ "$3" == "VNG_RW=true" ]; then
echo 'setting vng to mount rw'
VNG_RW=' --rw '
fi
fi
# enable running tests on individual schedulers
if [ $# -ge 2 ] ; then
SCHEDS[$2]=""
else
SCHEDS["scx_simple"]=""
SCHEDS["scx_central"]=""
SCHEDS["scx_nest"]=""
SCHEDS["scx_flatcg"]=""
SCHEDS["scx_pair"]=""
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 --user root -m 10G --cpu 8 $VNG_RW -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
cp /tmp/output test_log.ci.log
done