Skip to content

Commit f2ee578

Browse files
committed
refactor(tests): update boot time device metrics
Emit both boot time metrics for boot device: clock time and cpu time. Additionally, stop subtracting VM build time from a guest boot time at the metric emit time. This can be done later at the visualization stage. Signed-off-by: Egor Lazarchuk <[email protected]>
1 parent c17aef2 commit f2ee578

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

tests/integration_tests/performance/test_boottime.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from framework.properties import global_props
1212

1313
# Regex for obtaining boot time from some string.
14-
TIMESTAMP_LOG_REGEX = r"Guest-boot-time\s+\=\s+(\d+)\s+us"
1514

1615
DEFAULT_BOOT_ARGS = (
1716
"reboot=k panic=1 pci=off nomodule 8250.nr_uarts=0"
@@ -27,27 +26,30 @@
2726
}
2827

2928

30-
def _get_microvm_boottime(vm):
29+
def get_boottime_device_info(vm):
3130
"""Auxiliary function for asserting the expected boot time."""
3231
boot_time_us = None
32+
boot_time_cpu_us = None
3333
timestamps = []
3434

35+
timestamp_log_regex = r"Guest-boot-time =\s+(\d+) us\s+(\d+) ms,\s+(\d+) CPU us\s+(\d+) CPU ms"
36+
3537
iterations = 50
3638
sleep_time_s = 0.1
3739
for _ in range(iterations):
38-
timestamps = re.findall(TIMESTAMP_LOG_REGEX, vm.log_data)
40+
timestamps = re.findall(timestamp_log_regex, vm.log_data)
3941
if timestamps:
4042
break
4143
time.sleep(sleep_time_s)
4244
if timestamps:
43-
boot_time_us = int(timestamps[0])
45+
boot_time_us, _, boot_time_cpu_us, _ = timestamps[0]
4446

45-
assert boot_time_us, (
47+
assert boot_time_us and boot_time_cpu_us, (
4648
f"MicroVM did not boot within {sleep_time_s * iterations}s\n"
4749
f"Firecracker logs:\n{vm.log_data}\n"
4850
f"Thread backtraces:\n{vm.thread_backtraces}"
4951
)
50-
return boot_time_us
52+
return int(boot_time_us), int(boot_time_cpu_us)
5153

5254

5355
def find_events(log_data):
@@ -113,17 +115,23 @@ def test_boottime(
113115
vm.add_net_iface()
114116
vm.start()
115117
vm.pin_threads(0)
116-
boottime_us = _get_microvm_boottime(vm)
117-
metrics.put_metric("boot_time", boottime_us, unit="Microseconds")
118-
timestamps = find_events(vm.log_data)
119-
build_time = timestamps["build microvm for boot"]["duration"]
120-
metrics.put_metric("build_time", build_time.microseconds, unit="Microseconds")
118+
119+
boot_time_us, cpu_boot_time_us = get_boottime_device_info(vm)
121120
metrics.put_metric(
122121
"guest_boot_time",
123-
boottime_us - build_time.microseconds,
122+
boot_time_us,
123+
unit="Microseconds",
124+
)
125+
metrics.put_metric(
126+
"guest_cpu_boot_time",
127+
cpu_boot_time_us,
124128
unit="Microseconds",
125129
)
126130

131+
timestamps = find_events(vm.log_data)
132+
build_time = timestamps["build microvm for boot"]["duration"]
133+
metrics.put_metric("build_time", build_time.microseconds, unit="Microseconds")
134+
127135
kernel, userspace, total = get_systemd_analyze_times(vm)
128136
metrics.put_metric("systemd_kernel", kernel, unit="Milliseconds")
129137
metrics.put_metric("systemd_userspace",userspace, unit="Milliseconds")

0 commit comments

Comments
 (0)