|
11 | 11 | from framework.properties import global_props |
12 | 12 |
|
13 | 13 | # Regex for obtaining boot time from some string. |
14 | | -TIMESTAMP_LOG_REGEX = r"Guest-boot-time\s+\=\s+(\d+)\s+us" |
15 | 14 |
|
16 | 15 | DEFAULT_BOOT_ARGS = ( |
17 | 16 | "reboot=k panic=1 pci=off nomodule 8250.nr_uarts=0" |
|
27 | 26 | } |
28 | 27 |
|
29 | 28 |
|
30 | | -def _get_microvm_boottime(vm): |
| 29 | +def get_boottime_device_info(vm): |
31 | 30 | """Auxiliary function for asserting the expected boot time.""" |
32 | 31 | boot_time_us = None |
| 32 | + boot_time_cpu_us = None |
33 | 33 | timestamps = [] |
34 | 34 |
|
| 35 | + timestamp_log_regex = r"Guest-boot-time =\s+(\d+) us\s+(\d+) ms,\s+(\d+) CPU us\s+(\d+) CPU ms" |
| 36 | + |
35 | 37 | iterations = 50 |
36 | 38 | sleep_time_s = 0.1 |
37 | 39 | for _ in range(iterations): |
38 | | - timestamps = re.findall(TIMESTAMP_LOG_REGEX, vm.log_data) |
| 40 | + timestamps = re.findall(timestamp_log_regex, vm.log_data) |
39 | 41 | if timestamps: |
40 | 42 | break |
41 | 43 | time.sleep(sleep_time_s) |
42 | 44 | if timestamps: |
43 | | - boot_time_us = int(timestamps[0]) |
| 45 | + boot_time_us, _, boot_time_cpu_us, _ = timestamps[0] |
44 | 46 |
|
45 | | - assert boot_time_us, ( |
| 47 | + assert boot_time_us and boot_time_cpu_us, ( |
46 | 48 | f"MicroVM did not boot within {sleep_time_s * iterations}s\n" |
47 | 49 | f"Firecracker logs:\n{vm.log_data}\n" |
48 | 50 | f"Thread backtraces:\n{vm.thread_backtraces}" |
49 | 51 | ) |
50 | | - return boot_time_us |
| 52 | + return int(boot_time_us), int(boot_time_cpu_us) |
51 | 53 |
|
52 | 54 |
|
53 | 55 | def find_events(log_data): |
@@ -113,17 +115,23 @@ def test_boottime( |
113 | 115 | vm.add_net_iface() |
114 | 116 | vm.start() |
115 | 117 | 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) |
121 | 120 | metrics.put_metric( |
122 | 121 | "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, |
124 | 128 | unit="Microseconds", |
125 | 129 | ) |
126 | 130 |
|
| 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 | + |
127 | 135 | kernel, userspace, total = get_systemd_analyze_times(vm) |
128 | 136 | metrics.put_metric("systemd_kernel", kernel, unit="Milliseconds") |
129 | 137 | metrics.put_metric("systemd_userspace",userspace, unit="Milliseconds") |
|
0 commit comments