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
 |