]> Git Repo - buildroot-mgba.git/commitdiff
support/testing/infra/emulator.py: add host load info in run log
authorJulien Olivain <[email protected]>
Sun, 28 Jul 2024 15:46:17 +0000 (17:46 +0200)
committerThomas Petazzoni <[email protected]>
Sun, 28 Jul 2024 19:51:01 +0000 (21:51 +0200)
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 <[email protected]>
Signed-off-by: Thomas Petazzoni <[email protected]>
support/testing/infra/emulator.py

index be26d4caa4eeca4fa71daeb1cb035c9eec516d54..5318577cda4e5cef5a0c630b91535338bae294be 100644 (file)
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 # SPDX-License-Identifier: ISC
 
+import os
+
 import pexpect
 import pexpect.replwrap
 
@@ -108,6 +110,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,
This page took 0.037741 seconds and 4 git commands to generate.