testimage: performance improvements

Refactored processing of QEMU logs.
The original code read QEMU logs every 30 seconds, which
resulted in each test taking at least 30 seconds to finish.
In reality, most tests take only a few seconds.
Although the tests run in parallel, on systems with only a few
CPUs this can make a very noticable difference.

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
This commit is contained in:
Juro Bystricky
2017-02-05 20:14:29 -08:00
parent c42423e291
commit 32e3cf773e
4 changed files with 123 additions and 101 deletions

View File

@@ -0,0 +1,59 @@
# Copyright (C) 2016-2017 Intel Corporation
# Released under the MIT license (see COPYING.MIT)
import os
import sys
import signal
import logging
from oeqa.core.target.__init__ import OETarget
from oeqa.utils.qemuzephyrrunner import QemuZephyrRunner
supported_fstypes = ['elf']
class QemuTargetZephyr(OETarget):
def __init__(self, logger, ip, server_ip, timeout=300, user='root',
port=None, machine='', rootfs='', kernel='', kvm=False,
dump_dir='', dump_host_cmds='', display='', bootlog='',
tmpdir='', dir_image='', boottime=60):
super(QemuTargetZephyr, self).__init__(logger, ip, server_ip, timeout,
user, port)
self.ip = ip
self.server_ip = server_ip
self.machine = machine
self.rootfs = rootfs
self.qemulog = bootlog
self.kernel = kernel
self.kvm = kvm
# Log QemuRunner log output to a file
import oe.path
from oeqa.utils.qemuzephyrrunner import QemuZephyrRunner
self.qemurunnerlog = bootlog
logger = logging.getLogger('BitBake.QemuRunner')
loggerhandler = logging.FileHandler(self.qemurunnerlog)
loggerhandler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
logger.addHandler(loggerhandler)
self.runner = QemuZephyrRunner(machine=machine, rootfs=rootfs, tmpdir=tmpdir,
deploy_dir_image=dir_image, display=display,
logfile=self.qemulog, boottime=boottime,
use_kvm=kvm, dump_dir=dump_dir,
dump_host_cmds=dump_host_cmds)
def start(self, params=None, extra_bootparams=None):
if self.runner.start(params, extra_bootparams=extra_bootparams):
self.ip = self.runner.ip
self.server_ip = self.runner.server_ip
else:
self.stop()
raise RuntimeError("FAILED to start qemu - check the task log and the boot log")
def stop(self):
self.runner.stop()
def serial_readline(self):
return self.runner.serial_readline()