genode/repos/base/run/timer_accuracy.run
2025-02-27 12:53:40 +01:00

76 lines
2.1 KiB
Plaintext

build { core init timer lib/ld test/timer_accuracy }
create_boot_directory
install_config {
<config prio_levels="2">
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
</parent-provides>
<default-route>
<any-service><parent/><any-child/></any-service>
</default-route>
<default caps="100"/>
<start name="timer" priority="0" ram="1M">
<resource name="CPU" quantum="5"/>
<provides><service name="Timer"/></provides>
</start>
<start name="test-timer_accuracy" priority="-1" ram="10M"/>
</config>
}
build_boot_image [build_artifacts]
append qemu_args " -nographic"
if {[have_cmd_switch --autopilot]} {
assert {![have_spec nova] && ![have_include power_on/qemu]} {
NOVA requires a CPU with invariant TSC support, which is by default not
supported. KVM has support by explicitly enabling this feature, but by
now the nightly test machines is not permitted to use KVM
append qemu_args " -accel kvm -cpu host,migratable=no,+invtsc"
Autopilot mode is not supported on this platform.
}
}
set err_cnt 0
set test_timeout 20
set rounds 9
# wait for initial tic
run_genode_until {\[init -> test-timer_accuracy\].*\n} $test_timeout
set serial_id [output_spawn_id]
# measure the delays between the following tics
for {set i 1} {$i <= $rounds} {incr i} {
set start_time($i) [clock milliseconds]
run_genode_until {\[init -> test-timer_accuracy\].*\n} $test_timeout $serial_id
set end_time($i) [clock milliseconds]
}
# print results and count errors
foreach i [lsort [array names start_time]] {
set class "Good:"
set test_result [expr $end_time($i) - $start_time($i)]
set host_result [expr $i * 1000]
set result_diff [expr abs($test_result - $host_result)]
if {[expr $result_diff > 500]} {
set class "Bad: "
set err_cnt [expr $err_cnt + 1]
}
puts "$class round $i, host measured $host_result ms, test measured $test_result ms"
}
# check the error count
if {[expr $err_cnt > 0]} {
puts "Test failed because of $err_cnt errors"
exit -1
}