47 lines
1.1 KiB
Bash
47 lines
1.1 KiB
Bash
|
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 writing 1/4 of the ring buffer.
|
||
|
nflush=$(($ringsize / $cspair / 4))
|
||
|
|
||
|
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
|