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

116 lines
2.6 KiB
Plaintext

build { core init lib/ld test/bomb timer }
set timeout 60
set rounds 10
set generations 3
set children 7
set sleep 600
set demand [expr 1*1024*1024]
set cpus 4
set init_ram 256
if { [have_cmd_switch --autopilot] } {
assert {![have_include power_on/qemu]} \
"Autopilot mode is not supported on this platform."
assert {[have_spec nova]}
# set specifically for our nightly test hardware */
if {[have_spec x86_64]} {
set cpus 8
}
set children 3
}
create_boot_directory
proc per_cpu_start_node { i } {
global init_ram rounds generations children sleep demand
return [join [list {
<start name="init_} $i {" caps="1100" ram="} ${init_ram}M {">
<affinity xpos="} $i {" width="1"/>
<binary name="init"/>
<config verbose="yes">
<parent-provides>
<service name="ROM"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="Timer"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="1000"/>
<resource name="RAM" preserve="2M"/>
<resource name="CAP" preserve="100"/>
<start name="bomb-master" priority="-1" caps="100000" ram="2G">
<binary name="bomb"/>
<resource name="CPU" quantum="90"/>
<config rounds="} $rounds {" generations="} $generations {"
children="} $children {" sleep="} $sleep {" demand="} $demand {"/>
</start>
</config>
</start>}] ""]
}
proc cpu_start_nodes { cpus } {
set result { }
for { set i 0} { $i < $cpus } { incr i } {
append result [per_cpu_start_node $i] }
return $result
}
install_config {
<config verbose="yes">
<affinity-space width="} $cpus {" height="1"/>
<parent-provides>
<service name="ROM"/>
<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"/>
<resource name="RAM" preserve="2M"/>
<resource name="CAP" preserve="100"/>
<start name="timer" ram="1M">
<resource name="CPU" quantum="10"/>
<provides><service name="Timer"/></provides>
</start>
} [cpu_start_nodes $cpus] {
</config>}
build_boot_image [build_artifacts]
append qemu_args " -m [expr 128 + $init_ram*$cpus]M -nographic -smp $cpus"
if { [have_cmd_switch --autopilot] } {
run_genode_until {bomb started} 20
for { set i 0} { $i < ${cpus} } { incr i} {
run_genode_until {\[init -\> init_[0-9] -\> bomb-master] Done\. Going to sleep} $timeout [output_spawn_id]
}
} else {
run_genode_until forever
}