From d46b2f5feaf3926a47b664188668a812b6662003 Mon Sep 17 00:00:00 2001 From: Julien Olivain Date: Sun, 28 Jul 2024 17:46:17 +0200 Subject: [PATCH] support/testing/infra/emulator.py: add host load info in run log Runtime tests running on test runners are subject to a high variability in term of performance and timing. Most or the runtime test commands are executed with a timeout, in pexpect. Slow or very loaded test runners can use the timeout_multiplier to globally increase those timeouts. Some runtime test commands sometimes needs to poll or query a state, rather than having purely sequential actions. It is sometimes hard to know, from the test writer point of view, the maximum timeout to set, or if a retry logic is needed. In order to help debugging runtime tests failing due very slow execution, this commit adds extra information on the host test runner about its load in the run log. Relevant information are: number of cpus, the load average at the moment the emulator is started and the current timeout_multiplier. Note: this change was discussed in: https://lists.buildroot.org/pipermail/buildroot/2024-July/759119.html Signed-off-by: Julien Olivain Signed-off-by: Thomas Petazzoni (cherry picked from commit 7a6edbc7b9166c799b43cf9a9b78422c8e20ccc0) Signed-off-by: Peter Korsgaard --- support/testing/infra/emulator.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/support/testing/infra/emulator.py b/support/testing/infra/emulator.py index 624740fcb1..2106d0e99b 100644 --- a/support/testing/infra/emulator.py +++ b/support/testing/infra/emulator.py @@ -2,6 +2,8 @@ import pexpect import infra +import os + class Emulator(object): @@ -73,6 +75,11 @@ class Emulator(object): if kernel_cmdline: qemu_cmd += ["-append", " ".join(kernel_cmdline)] + self.logfile.write(f"> host cpu count: {os.cpu_count()}\n") + ldavg = os.getloadavg() + ldavg_str = f"{ldavg[0]:.2f}, {ldavg[1]:.2f}, {ldavg[2]:.2f}" + self.logfile.write(f"> host loadavg: {ldavg_str}\n") + self.logfile.write(f"> timeout multiplier: {self.timeout_multiplier}\n") self.logfile.write("> starting qemu with '%s'\n" % " ".join(qemu_cmd)) self.qemu = pexpect.spawn(qemu_cmd[0], qemu_cmd[1:], timeout=5 * self.timeout_multiplier,