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 { [get_cmd_switch --autopilot] } { if {[have_include "power_on/qemu"]} { puts "\nRun script does not support Qemu.\n" exit 0 } assert_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"> <affinity xpos="} $i {" width="1"/> <resource name="RAM" quantum="} ${init_ram}M {"/> <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"> <binary name="bomb"/> <resource name="CPU" quantum="90"/> <resource name="RAM" quantum="2G"/> <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"> <resource name="CPU" quantum="10"/> <resource name="RAM" quantum="1M"/> <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 { [get_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 }