genode/repos/base/run/affinity.run
Martin Stein 984be753ad base & exynos5: platform driver in affinity test
Ensures that the Exynos5 CPU is clocked equally no matter how the kernel
initialized it. This makes the result of this time critical test more
comparable.

fix #1162
2014-06-06 14:54:31 +02:00

98 lines
2.2 KiB
Plaintext

#
# \brief Test to start threads on all available CPUs
# \author Norman Feske
# \author Alexander Boettcher
#
if {
![have_spec hw_arndale] &&
([have_spec platform_pbxa9] || (![have_spec nova] && ![have_spec foc]))
} {
puts "Platform is unsupported."
exit 0
}
set build_components { core init test/affinity }
lappend_if [have_spec exynos5] build_components drivers/platform
build $build_components
create_boot_directory
set config {
<config>
<parent-provides>
<service name="LOG"/>
<service name="CPU"/>
<service name="RM"/>
<service name="CAP"/>
<service name="SIGNAL"/>
<service name="RAM"/>
<service name="ROM"/>
<service name="IO_MEM"/>
</parent-provides>
<default-route>
<any-service> <parent/> </any-service>
</default-route> }
append_if [have_spec exynos5] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start> }
append config {
<start name="test-affinity">
<resource name="RAM" quantum="10M"/>
</start>
</config> }
install_config $config
set boot_modules { core init test-affinity }
lappend_if [have_spec exynos5] boot_modules platform_drv
build_boot_image $boot_modules
if {[is_qemu_available]} {
set want_cpus_x 4
set want_cpus_y 1
set want_cpus_total [expr $want_cpus_x*$want_cpus_y]
set rounds "03"
append qemu_args "-nographic -m 64 -smp $want_cpus_total,cores=$want_cpus_total "
} else {
set rounds "10"
if {[have_spec x86]} { set rounds "40" }
}
run_genode_until "Round $rounds:.*\n" 90
set cpus [regexp -inline {Detected [0-9x]+ CPU[ s]\.} $output]
set cpus [regexp -all -inline {[0-9]+} $cpus]
set cpus [expr [lindex $cpus 0] * [lindex $cpus 1]]
if {[is_qemu_available]} {
if {$want_cpus_total != $cpus} {
puts "CPU count is not as expected: $want_cpus_total != $cpus"
exit 1;
}
}
set good_string {}
for {set r 0} {$r <= $rounds} {incr r} {
append good_string {[init -> test-affinity] Round }
append good_string [format "%02d" $r]
append good_string ":"
for {set i 0} {$i < $cpus} {incr i} {
append good_string " A"
}
append good_string "\n"
}
grep_output {\[init -\> test-affinity\] Round}
compare_output_to $good_string