mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-28 17:48:53 +00:00
5fe29e8e4a
This patch introduces new types for expressing CPU affinities. Instead of dealing with physical CPU numbers, affinities are expressed as rectangles in a grid of virtual CPU nodes. This clears the way to conveniently assign sets of adjacent CPUs to subsystems, each of them managing their respective viewport of the coordinate space. By using 2D Cartesian coordinates, the locality of CPU nodes can be modeled for different topologies such as SMP (simple Nx1 grid), grids of NUMA nodes, or ring topologies.
80 lines
2.5 KiB
Plaintext
80 lines
2.5 KiB
Plaintext
#
|
|
# \brief Test to start and call RPC entrypoint on all available CPUs
|
|
# \author Norman Feske
|
|
# \author Alexander Boettcher
|
|
#
|
|
|
|
if {[have_spec platform_pbxa9] || (![have_spec nova] && ![have_spec foc])} {
|
|
puts "Platform is unsupported."
|
|
exit 0
|
|
}
|
|
|
|
build "core init test/mp_server"
|
|
|
|
create_boot_directory
|
|
|
|
install_config {
|
|
<config>
|
|
<parent-provides>
|
|
<service name="LOG"/>
|
|
<service name="CPU"/>
|
|
<service name="RM"/>
|
|
<service name="CAP"/>
|
|
</parent-provides>
|
|
<default-route>
|
|
<any-service> <parent/> </any-service>
|
|
</default-route>
|
|
<start name="test-server-mp">
|
|
<resource name="RAM" quantum="10M"/>
|
|
</start>
|
|
</config>
|
|
}
|
|
|
|
build_boot_image "core init test-server-mp"
|
|
|
|
if {[is_qemu_available]} {
|
|
set want_cpus 2
|
|
append qemu_args " -nographic -m 64 -smp $want_cpus,cores=$want_cpus "
|
|
}
|
|
|
|
# run the test
|
|
run_genode_until {\[init -\> test-server-mp\] done.*\n} 60
|
|
|
|
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 != $cpus} {
|
|
puts "CPU count is not as expected: $want_cpus != $cpus"
|
|
exit 1;
|
|
}
|
|
}
|
|
|
|
# pay only attention to the output of init and its children
|
|
grep_output {^\[init }
|
|
|
|
unify_output {transfer cap [a-f0-9]+} "transfer cap UNIFIED"
|
|
unify_output {yes - idx [a-f0-9]+} "yes - idx UNIFIED"
|
|
unify_output {\- received cap [a-f0-9]+} "- received cap UNIFIED"
|
|
|
|
compare_output_to {
|
|
[init -> test-server-mp] --- test-mp_server started ---
|
|
[init -> test-server-mp] Detected 2x1 CPUs.
|
|
[init -> test-server-mp] call server on CPU 0
|
|
[init -> test-server-mp] function test_untyped: got value 0
|
|
[init -> test-server-mp] call server on CPU 1
|
|
[init -> test-server-mp] function test_untyped: got value 1
|
|
[init -> test-server-mp] call server on CPU 0 - transfer cap UNIFIED
|
|
[init -> test-server-mp] function test_cap: capability is valid ? yes - idx UNIFIED
|
|
[init -> test-server-mp] call server on CPU 1 - transfer cap UNIFIED
|
|
[init -> test-server-mp] function test_cap: capability is valid ? yes - idx UNIFIED
|
|
[init -> test-server-mp] call server on CPU 0 - transfer cap UNIFIED
|
|
[init -> test-server-mp] function test_cap_reply: capability is valid ? yes - idx UNIFIED
|
|
[init -> test-server-mp] got from server on CPU 0 - received cap UNIFIED
|
|
[init -> test-server-mp] call server on CPU 1 - transfer cap UNIFIED
|
|
[init -> test-server-mp] function test_cap_reply: capability is valid ? yes - idx UNIFIED
|
|
[init -> test-server-mp] got from server on CPU 1 - received cap UNIFIED
|
|
[init -> test-server-mp] done
|
|
}
|