genode/repos/base/run/timer_accuracy.run
2024-08-27 15:29:38 +02:00

78 lines
2.2 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">
<resource name="RAM" quantum="1M"/>
<resource name="CPU" quantum="5"/>
<provides><service name="Timer"/></provides>
</start>
<start name="test-timer_accuracy" priority="-1">
<resource name="RAM" quantum="10M"/>
</start>
</config>
}
build_boot_image [build_artifacts]
append qemu_args " -nographic"
if {[get_cmd_switch --autopilot] && [have_include "power_on/qemu"] && [have_spec nova]} {
# 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"
puts "Run script does not support autopilot mode on Qemu"
exit 0
}
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
}