import os from autotest_lib.client.bin import test, utils class hackbench(test.test): """ This module will run the hackbench benchmark. Hackbench is a benchmark for measuring the performance, overhead and scalability of the Linux scheduler. The C program was pick from Ingo Molnar's page. @author: Nikhil Rao (ncrao@google.com) @see: http://people.redhat.com/~mingo/cfs-scheduler/tools/hackbench.c """ version = 1 preserve_srcdir = True def setup(self): os.chdir(self.srcdir) if 'CC' in os.environ: cc = '$CC' else: cc = 'cc' utils.system('%s -lpthread hackbench.c -o hackbench' % cc) def initialize(self): self.job.require_gcc() self.results = None def run_once(self, num_groups=90): """ Run hackbench, store the output in raw output files per iteration and also in the results list attribute. @param num_groups: Number of children processes hackbench will spawn. """ hackbench_bin = os.path.join(self.srcdir, 'hackbench') cmd = '%s %s' % (hackbench_bin, num_groups) raw_output = utils.system_output(cmd, retain_output=True) self.results = raw_output path = os.path.join(self.resultsdir, 'raw_output_%s' % self.iteration) utils.open_write_close(path, raw_output) def postprocess_iteration(self): """ Pick up the results attribute and write it in the performance keyval. """ lines = self.results.split('\n') for line in lines: if line.startswith('Time:'): time_val = line.split()[1] self.write_perf_keyval({'time': time_val})