Add overflow and normal kernel nOS-V tests

This commit is contained in:
Rodrigo Arias 2024-07-31 12:44:39 +02:00 committed by Rodrigo Arias Mallo
parent acf18c1bb4
commit 99dc3904af
4 changed files with 49 additions and 1 deletions

View File

@ -66,7 +66,8 @@ nosv_test(several-tasks.c SORT NAME several-tasks-breakdown-level-4 LEVEL 4 BREA
include(CheckPerfParanoid)
if (PERF_PARANOID_KERNEL)
message(STATUS "Enabling perf paranoid tests for nOS-V")
nosv_test(overflow-kernel-ring.c DRIVER "overflow-kernel-ring.driver.sh")
nosv_test(kernel.c NAME kernel-overflow DRIVER "kernel-overflow.driver.sh")
nosv_test(kernel.c NAME kernel-normal DRIVER "kernel-normal.driver.sh")
elseif(ENABLE_ALL_TESTS)
message(FATAL_ERROR "Cannot enable perf paranoid tests for nOS-V")
else()

View File

@ -0,0 +1,47 @@
target=$OVNI_TEST_BIN
# We will set our own
unset NOSV_CONFIG
unset NOSV_CONFIG_OVERRIDE
export NOSV_APPID=1
# Small kernel ring size to make execution fast
ringsize=$((64*1024))
# Each CS event pair occupies 16 bytes.
cspair=32
# How many CS event pairs fit in the ring buffer?
navail=$(($ringsize / $cspair))
# For the test, write 8 times the ring buffer
ncs=$((8 * $navail))
# Flush the kernel after overflowing the ring buffer, by writing to it twice the
# ring size
nflush=$((2 * $ringsize / $cspair))
cat > nosv.toml << EOF
instrumentation.version = "ovni"
ovni.level = 3
ovni.kernel_ringsize = ${ringsize}
EOF
$target $ncs $nflush 2>&1 | tee err.log
# Ensure no nOS-V warnings at runtime
if grep -c "cannot enable kernel events" err.log; then
echo "cannot enable kernel events in all threads" >&2
exit 1
fi
# We need to sort the trace as it has unsorted regions
ovnisort ovni
# Ensure we have at least the number of context switches we caused, and ensure
# the number of "in" and "out" events match.
ovnitop ovni | awk '{n[$1] = $2} END { if (n["KCO"] != n["KCI"] || n["KCO"] < '$ncs') exit 1 }'
# Run the emulator
ovniemu -l ovni