diff --git a/repos/ports/run/vbox5_ubuntu_14_04_32.run b/repos/ports/run/vbox5_ubuntu_14_04_32.run
index 1ec0cadda..e0c2d5075 100644
--- a/repos/ports/run/vbox5_ubuntu_14_04_32.run
+++ b/repos/ports/run/vbox5_ubuntu_14_04_32.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_ubuntu_14_04_64.run b/repos/ports/run/vbox5_ubuntu_14_04_64.run
index 5e2107eb4..49ad38a83 100644
--- a/repos/ports/run/vbox5_ubuntu_14_04_64.run
+++ b/repos/ports/run/vbox5_ubuntu_14_04_64.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_ubuntu_16_04_32.run b/repos/ports/run/vbox5_ubuntu_16_04_32.run
index 9791e4576..1dc8b06ca 100644
--- a/repos/ports/run/vbox5_ubuntu_16_04_32.run
+++ b/repos/ports/run/vbox5_ubuntu_16_04_32.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_ubuntu_16_04_64.run b/repos/ports/run/vbox5_ubuntu_16_04_64.run
index 377d61d98..8d9a0f2f0 100644
--- a/repos/ports/run/vbox5_ubuntu_16_04_64.run
+++ b/repos/ports/run/vbox5_ubuntu_16_04_64.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_vm_ubuntu_16_04_32.run b/repos/ports/run/vbox5_vm_ubuntu_16_04_32.run
index ca8f11638..19c9109b0 100644
--- a/repos/ports/run/vbox5_vm_ubuntu_16_04_32.run
+++ b/repos/ports/run/vbox5_vm_ubuntu_16_04_32.run
@@ -24,6 +24,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_vm_ubuntu_16_04_64.run b/repos/ports/run/vbox5_vm_ubuntu_16_04_64.run
index 59257429b..f75b260da 100644
--- a/repos/ports/run/vbox5_vm_ubuntu_16_04_64.run
+++ b/repos/ports/run/vbox5_vm_ubuntu_16_04_64.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_vm_win10_64.run b/repos/ports/run/vbox5_vm_win10_64.run
index 9bdae2c9e..37991ed74 100644
--- a/repos/ports/run/vbox5_vm_win10_64.run
+++ b/repos/ports/run/vbox5_vm_win10_64.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_vm_win7_32.run b/repos/ports/run/vbox5_vm_win7_32.run
index 1c6ce0f34..021560c48 100644
--- a/repos/ports/run/vbox5_vm_win7_32.run
+++ b/repos/ports/run/vbox5_vm_win7_32.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_vm_win7_64.run b/repos/ports/run/vbox5_vm_win7_64.run
index 21773b5ef..c456225f6 100644
--- a/repos/ports/run/vbox5_vm_win7_64.run
+++ b/repos/ports/run/vbox5_vm_win7_64.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_win10_64.run b/repos/ports/run/vbox5_win10_64.run
index ba723c63c..9ccadbf2d 100644
--- a/repos/ports/run/vbox5_win10_64.run
+++ b/repos/ports/run/vbox5_win10_64.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_win7_32.run b/repos/ports/run/vbox5_win7_32.run
index a0aab8973..2af915da1 100644
--- a/repos/ports/run/vbox5_win7_32.run
+++ b/repos/ports/run/vbox5_win7_32.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_win7_64.run b/repos/ports/run/vbox5_win7_64.run
index ebf0a506d..15c9b30d7 100644
--- a/repos/ports/run/vbox5_win7_64.run
+++ b/repos/ports/run/vbox5_win7_64.run
@@ -16,6 +16,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_win7_64_multiple.run b/repos/ports/run/vbox5_win7_64_multiple.run
index 7820bdab2..4b27908e8 100644
--- a/repos/ports/run/vbox5_win7_64_multiple.run
+++ b/repos/ports/run/vbox5_win7_64_multiple.run
@@ -27,6 +27,8 @@ set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_win7_64_raw.run b/repos/ports/run/vbox5_win7_64_raw.run
index d1128b155..b4ec180b3 100644
--- a/repos/ports/run/vbox5_win7_64_raw.run
+++ b/repos/ports/run/vbox5_win7_64_raw.run
@@ -15,6 +15,8 @@ set use_rumpfs 0
set use_ram_fs 0
set use_overlay_from_disk 0
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox5_win7_64_share.run b/repos/ports/run/vbox5_win7_64_share.run
index 3ad3a6a34..eca5d8bcd 100644
--- a/repos/ports/run/vbox5_win7_64_share.run
+++ b/repos/ports/run/vbox5_win7_64_share.run
@@ -13,6 +13,8 @@ set use_overlay_from_disk 1
set overlay_image "overlay_${flavor}.vdi"
set use_rumpfs 1
+set use_serial 0
+
set use_usb 1
set use_ps2 [have_spec ps2]
diff --git a/repos/ports/run/vbox_win.inc b/repos/ports/run/vbox_win.inc
index 2c4cd088a..2ac14230c 100644
--- a/repos/ports/run/vbox_win.inc
+++ b/repos/ports/run/vbox_win.inc
@@ -234,6 +234,8 @@ for { set i 1} { $i <= $use_vms } { incr i} {
}
+ append_if [expr $use_serial] config_of_app { }
+
append_if [expr !$use_rumpfs] config_of_app {
}
append config_of_app {
@@ -280,6 +282,10 @@ source ${genode_dir}/repos/ports/run/virtualbox_auto.inc
# copy vbox configuration to bin directory
exec cp ${genode_dir}/repos/ports/run/${vbox_file} bin/.
+if {[info exists use_vcpus]} {
+ exec sed -i "s/CPU count=\".*\"/CPU count=\"${use_vcpus}\"/g" bin/${vbox_file}
+}
+
if {!$use_rumpfs} {
exec cp ${genode_dir}/repos/ports/run/${raw_image} bin/.
}
@@ -292,27 +298,29 @@ build_boot_image $boot_modules
set wait_timeout 70
if {[have_spec foc]} { set wait_timeout 120 }
-run_genode_until {\[init -\> vbox.*].*Guest Additions capability report:.*seamless: no, hostWindowMapping: no, graphics: no} $wait_timeout
+if {!$use_serial} {
+ run_genode_until {\[init -\> vbox.*].*Guest Additions capability report:.*seamless: no, hostWindowMapping: no, graphics: no} $wait_timeout
-# run_genode_until forever 0 [output_spawn_id]
+ # run_genode_until forever 0 [output_spawn_id]
-if {$use_rumpfs} {
- set wait_timeout 170
- for { set i 1 } { $i <= $use_vms } { incr i } {
- if { [string match "ubuntu*" $flavor] || [string match "win10*" $flavor] } {
- run_genode_until {\[init -\> vbox.*].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: no} $wait_timeout [output_spawn_id]
- } else {
- run_genode_until {\[init -\> vbox.*].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: yes} $wait_timeout [output_spawn_id]
+ if {$use_rumpfs} {
+ set wait_timeout 170
+ for { set i 1 } { $i <= $use_vms } { incr i } {
+ if { [string match "ubuntu*" $flavor] || [string match "win10*" $flavor] } {
+ run_genode_until {\[init -\> vbox.*].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: no} $wait_timeout [output_spawn_id]
+ } else {
+ run_genode_until {\[init -\> vbox.*].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: yes} $wait_timeout [output_spawn_id]
+ }
}
+ } else {
+ run_genode_until {\[init\] child "vbox1" exited with exit value 0} 60 [output_spawn_id]
+ # give block driver bit time to write data to disk
+ sleep 5
}
-} else {
- run_genode_until {\[init\] child "vbox1" exited with exit value 0} 60 [output_spawn_id]
- # give block driver bit time to write data to disk
- sleep 5
-}
-# cleanup bin directory - remove vbox file
-exec rm bin/${vbox_file}
-if {!$use_rumpfs} {
- exec rm bin/${raw_image}
+ # cleanup bin directory - remove vbox file
+ exec rm bin/${vbox_file}
+ if {!$use_rumpfs} {
+ exec rm bin/${raw_image}
+ }
}
diff --git a/repos/ports/run/virtualbox_auto.inc b/repos/ports/run/virtualbox_auto.inc
index d1ce42dd7..c5bd99671 100644
--- a/repos/ports/run/virtualbox_auto.inc
+++ b/repos/ports/run/virtualbox_auto.inc
@@ -36,6 +36,7 @@ append build_components {
drivers/framebuffer
}
+lappend_if [expr $use_serial] build_components server/log_terminal
lappend_if [expr $use_rumpfs] build_components lib/vfs/rump
lappend_if [expr $use_rumpfs] build_components server/vfs
lappend_if [expr $use_vbox5] build_components virtualbox5
@@ -57,6 +58,12 @@ append_platform_drv_build_components
build $build_components
+if {$use_rumpfs && !$use_ram_fs} {
+ set rump_writable true
+} else {
+ set rump_writable false
+}
+
set config {
}
@@ -142,7 +149,7 @@ append_if [expr $use_rumpfs] config {
append_if [expr $use_rumpfs && $use_ram_fs && $use_overlay_from_disk] config {
}
append_if [expr $use_rumpfs] config {
-
+
@@ -350,6 +357,14 @@ append_if [have_spec x86] config {
}
+append_if [expr $use_serial] config {
+
+
+
+
+
+ }
+
append config $config_of_app
append config {
@@ -370,6 +385,7 @@ lappend_if [expr $use_rumpfs] boot_modules rump.lib.so
lappend_if [expr $use_rumpfs] boot_modules rump_fs.lib.so
lappend_if [expr $use_rumpfs] boot_modules vfs_rump.lib.so
lappend_if [expr $use_rumpfs] boot_modules vfs
+lappend_if [expr $use_serial] boot_modules log_terminal
lappend_if [expr $use_vbox5] boot_modules $virtualbox5_binary
lappend_if [expr $use_ram_fs || $use_usb] boot_modules ram_fs
lappend_if [expr $use_ram_fs && !$use_overlay_from_disk] boot_modules $overlay_image
diff --git a/repos/ports/run/vm_stress_32.vbox b/repos/ports/run/vm_stress_32.vbox
new file mode 100644
index 000000000..347760b54
--- /dev/null
+++ b/repos/ports/run/vm_stress_32.vbox
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/ports/run/vm_stress_64.vbox b/repos/ports/run/vm_stress_64.vbox
new file mode 100644
index 000000000..e9de3ccd9
--- /dev/null
+++ b/repos/ports/run/vm_stress_64.vbox
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/ports/run/vm_stress_vbox5-debian32.run b/repos/ports/run/vm_stress_vbox5-debian32.run
new file mode 100644
index 000000000..6b4c5715a
--- /dev/null
+++ b/repos/ports/run/vm_stress_vbox5-debian32.run
@@ -0,0 +1,99 @@
+#
+# Debian 32bit VM cloning Genode git sources, preparing and building pieces
+#
+
+assert_spec x86
+assert_spec nova
+
+set flavor "stress_32"
+set vm_ram "1280M"
+
+set use_vbox5 1
+
+set use_rumpfs 1
+set use_ram_fs 1
+set use_overlay_from_disk 1
+
+set use_serial 1
+
+set use_usb 0
+set use_ps2 [have_spec ps2]
+
+set use_vms 1
+set use_cpu_load 0
+
+set output_host ""
+set output_host_extra ""
+set results_expected { }
+set boottime_expected { }
+
+set match_guest_log "\[init -\> log_terminal\]"
+set match_boot_string "\[init -\> vbox.*\].*Using VMX virtualization extension"
+#set match_guest_down
+
+# use generic vbox5 VMM version
+set use_vbox5_nova 0
+set vmm_name "vbox5_gen"
+
+set use_vcpus 1
+lappend results_expected 1 13 41 80
+lappend boottime_expected 21
+source ${genode_dir}/repos/ports/run/vbox_win.inc
+source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+kill_spawned [output_spawn_id]
+
+# set use_vcpus 2
+# lappend results_expected 2 10 42 50
+# lappend boottime_expected 21
+# source ${genode_dir}/repos/ports/run/vbox_win.inc
+# source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+# kill_spawned [output_spawn_id]
+
+if {[have_spec nova]} {
+ # use non-generic vbox5 VMM version
+ set use_vbox5_nova 1
+ set vmm_name "vbox5_nova"
+
+ set use_vcpus 1
+ lappend results_expected 1 13 36 78
+ lappend boottime_expected 26
+ source ${genode_dir}/repos/ports/run/vbox_win.inc
+ source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+ kill_spawned [output_spawn_id]
+
+ set use_vcpus 2
+ lappend results_expected 2 11 35 48
+ lappend boottime_expected 25
+ source ${genode_dir}/repos/ports/run/vbox_win.inc
+ source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+ kill_spawned [output_spawn_id]
+
+ set use_vcpus 3
+ lappend results_expected 3 9 39 39
+ lappend boottime_expected 26
+ source ${genode_dir}/repos/ports/run/vbox_win.inc
+ source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+ kill_spawned [output_spawn_id]
+
+ set use_vcpus 4
+ lappend results_expected 4 10 41 34
+ lappend boottime_expected 27
+ source ${genode_dir}/repos/ports/run/vbox_win.inc
+ source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+ kill_spawned [output_spawn_id]
+}
+
+#
+# Dump aggregated output of the several runs above
+#
+grep_output "$match_guest_log.*cpus="
+
+puts $output
+
+set merge_host_output [split $output_host "\n"]
+set merge_host_extra [split $output_host_extra "\n"]
+for { set i 0 } { $i < [llength $merge_host_output] } { incr i} {
+ puts "[lindex $merge_host_output $i] [lindex $merge_host_extra $i]"
+}
+
+evaluate_stress
diff --git a/repos/ports/run/vm_stress_vbox5-debian64.run b/repos/ports/run/vm_stress_vbox5-debian64.run
new file mode 100644
index 000000000..6155c875a
--- /dev/null
+++ b/repos/ports/run/vm_stress_vbox5-debian64.run
@@ -0,0 +1,99 @@
+#
+# Debian 64bit VM cloning Genode git sources, preparing and building pieces
+#
+
+assert_spec x86
+assert_spec nova
+
+set flavor "stress_64"
+set vm_ram "1280M"
+
+set use_vbox5 1
+
+set use_rumpfs 1
+set use_ram_fs 1
+set use_overlay_from_disk 1
+
+set use_serial 1
+
+set use_usb 0
+set use_ps2 [have_spec ps2]
+
+set use_vms 1
+set use_cpu_load 0
+
+set output_host ""
+set output_host_extra ""
+set results_expected { }
+set boottime_expected { }
+
+set match_guest_log "\[init -\> log_terminal\]"
+set match_boot_string "\[init -\> vbox.*\].*Using VMX virtualization extension"
+#set match_guest_down
+
+# use generic vbox5 VMM version
+set use_vbox5_nova 0
+set vmm_name "vbox5_gen"
+
+set use_vcpus 1
+lappend results_expected 1 12 50 79
+lappend boottime_expected 21
+source ${genode_dir}/repos/ports/run/vbox_win.inc
+source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+kill_spawned [output_spawn_id]
+
+# set use_vcpus 2
+# lappend results_expected 0 0 0 0
+# lappend boottime_expected 35
+# source ${genode_dir}/repos/ports/run/vbox_win.inc
+# source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+# kill_spawned [output_spawn_id]
+
+if {[have_spec nova]} {
+ # use non-generic vbox5 VMM version
+ set use_vbox5_nova 1
+ set vmm_name "vbox5_nova"
+
+ set use_vcpus 1
+ lappend results_expected 1 13 42 76
+ lappend boottime_expected 25
+ source ${genode_dir}/repos/ports/run/vbox_win.inc
+ source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+ kill_spawned [output_spawn_id]
+
+ set use_vcpus 2
+ lappend results_expected 2 10 37 47
+ lappend boottime_expected 25
+ source ${genode_dir}/repos/ports/run/vbox_win.inc
+ source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+ kill_spawned [output_spawn_id]
+
+ set use_vcpus 3
+ lappend results_expected 3 10 36 40
+ lappend boottime_expected 25
+ source ${genode_dir}/repos/ports/run/vbox_win.inc
+ source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+ kill_spawned [output_spawn_id]
+
+ set use_vcpus 4
+ lappend results_expected 4 10 38 35
+ lappend boottime_expected 26
+ source ${genode_dir}/repos/ports/run/vbox_win.inc
+ source ${genode_dir}/repos/ports/run/vmm_vm_stress.inc
+ kill_spawned [output_spawn_id]
+}
+
+#
+# Dump aggregated output of the several runs above
+#
+grep_output "$match_guest_log.*cpus="
+
+puts $output
+
+set merge_host_output [split $output_host "\n"]
+set merge_host_extra [split $output_host_extra "\n"]
+for { set i 0 } { $i < [llength $merge_host_output] } { incr i} {
+ puts "[lindex $merge_host_output $i] [lindex $merge_host_extra $i]"
+}
+
+evaluate_stress
diff --git a/repos/ports/run/vmm_vm_stress.inc b/repos/ports/run/vmm_vm_stress.inc
new file mode 100644
index 000000000..0f5b316dc
--- /dev/null
+++ b/repos/ports/run/vmm_vm_stress.inc
@@ -0,0 +1,119 @@
+#!/usr/bin/expect
+
+set current_date [clock format [clock seconds] -format %a]
+if {[get_cmd_switch --autopilot] && $current_date != "Sat" && $current_date != "Sun" } {
+ puts "\n Run script is not supported today on this platform. \n";
+ exit 0
+}
+
+run_genode_until $match_boot_string 40
+
+set t_vm_boot_start [clock seconds]
+run_genode_until "$match_guest_log.*git clone" 70 [output_spawn_id]
+set t_vm_git_clone [clock seconds]
+run_genode_until "$match_guest_log.*prepare ports" 70 [output_spawn_id]
+set t_vm_prepare_ports [clock seconds]
+run_genode_until "$match_guest_log.*make -j" 200 [output_spawn_id]
+set t_vm_make_j [clock seconds]
+run_genode_until "$match_guest_log.*make done" 500 [output_spawn_id]
+set t_vm_make_done [clock seconds]
+
+run_genode_until "$match_guest_log.*cpus=" 20 [output_spawn_id]
+run_genode_until "$match_guest_log.*Done stress.sh" 10 [output_spawn_id]
+
+set t_clone [expr $t_vm_prepare_ports - $t_vm_git_clone]
+set t_prepare_ports [expr $t_vm_make_j - $t_vm_prepare_ports]
+set t_make [expr $t_vm_make_done - $t_vm_make_j]
+
+set results_end [llength $results_expected]
+set result_make [lindex $results_expected [expr $results_end - 1]]
+set result_prepare [lindex $results_expected [expr $results_end - 2]]
+set result_clone [lindex $results_expected [expr $results_end - 3]]
+
+set output_result "(host-tcl) cpus=$use_vcpus - clone=$t_clone - prepare_port=$t_prepare_ports - make=$t_make"
+set output_result_ci "(host) cpus=$use_vcpus - clone=$t_clone,$result_clone - prepare_port=$t_prepare_ports,$result_prepare - make=$t_make,$result_make"
+
+set output_extra "boottimeVM=[expr $t_vm_git_clone - $t_vm_boot_start]"
+
+puts "\n$output_result_ci - $output_extra - $vmm_name\n"
+append output_host "$output_result\n"
+append output_host_extra "$output_extra\n"
+
+
+##
+# Evaluate results of stress test
+#
+proc evaluate_stress { } {
+
+ global output_host_extra
+ global output_host
+ global output
+ global results_expected
+ global boottime_expected
+
+ set results_boottime [regexp -all -inline {[0-9]+} $output_host_extra]
+ set results_host [regexp -all -inline {[0-9]+} $output_host]
+ set results_guest [regexp -all -inline {[0-9]+} $output]
+ set results_len [llength $results_host]
+
+ puts "host results $results_host"
+ puts "guest results $results_guest"
+ puts "expected results $results_expected"
+ puts "boottime host $results_boottime"
+ puts "boottime expect $boottime_expected"
+
+ #
+ # Sanity check
+ #
+ if {$results_len != [llength $results_expected] ||
+ $results_len != [llength $results_guest] ||
+ [llength $boottime_expected] != [llength $results_boottime]} {
+ puts "Result length not as expected"
+ exit -1
+ }
+
+ set result_miss 0
+
+ for { set i 0 } { $i < $results_len } { incr i} {
+ set res_h [lindex $results_host $i]
+ set res_g [lindex $results_guest $i]
+ set res_e [lindex $results_expected $i]
+ if {$res_h != $res_e || $res_g != $res_e} {
+ set diff_abs_h [expr abs($res_h - $res_e)]
+ set diff_abs_g [expr abs($res_g - $res_e)]
+
+ switch [expr $i % 4] {
+ 0 {
+ # the cpu number count must be identical
+ incr result_miss
+ }
+ 1 {
+ # give clone numbers 5s diff
+ if { $diff_abs_h > 5 || $diff_abs_g > 5 } { incr result_miss }
+ }
+ 2 {
+ # give prepare ports 10s diff
+ if { $diff_abs_h > 10 || $diff_abs_g > 10 } { incr result_miss }
+ }
+ 3 {
+ if { $diff_abs_h > 1 || $diff_abs_g > 1 } { incr result_miss }
+ }
+ }
+ }
+ }
+
+ for { set i 0} { $i < $results_len } { incr i} {
+ set res_h [lindex $results_boottime $i]
+ set res_e [lindex $boottime_expected $i]
+
+ if {$res_h != $res_e} {
+ set diff_abs [expr abs($res_h - $res_e)]
+
+ if { $diff_abs > 1 } { incr result_miss }
+ }
+ }
+
+ if {$result_miss} {
+ puts "$result_miss results deviate too much"
+ }
+}
diff --git a/tool/autopilot.list b/tool/autopilot.list
index 15480cf42..cf25885ff 100644
--- a/tool/autopilot.list
+++ b/tool/autopilot.list
@@ -78,6 +78,8 @@ vbox5_win7_64
vbox5_win7_64_multiple
vbox5_win7_64_raw
vbox5_win7_64_share
+vm_stress_vbox5-debian32
+vm_stress_vbox5-debian64
verify
vfs_import
vmm_arm