1import os, re
2
3from autotest_lib.client.bin import utils, test
4
5class dbench(test.test):
6    version = 3
7
8    # http://samba.org/ftp/tridge/dbench/dbench-3.04.tar.gz
9    def setup(self, tarball='dbench-3.04.tar.gz'):
10        tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
11        utils.extract_tarball_to_dir(tarball, self.srcdir)
12        os.chdir(self.srcdir)
13
14        utils.system('patch -p1 < ../dbench_startup.patch')
15        utils.system('patch -p1 < ../dbench_ldflags.patch')
16        utils.configure()
17        utils.make()
18
19
20    def initialize(self):
21        self.job.require_gcc()
22        self.results = []
23        self.dbench = os.path.join(self.srcdir, 'dbench')
24
25
26    def run_once(self, dir='.', nprocs=None, seconds=600, args=''):
27        if not nprocs:
28            nprocs = self.job.cpu_count()
29        loadfile = os.path.join(self.srcdir, 'client.txt')
30        cmd = '%s %s %s -D %s -c %s -t %d' % (self.dbench, nprocs, args,
31                                              dir, loadfile, seconds)
32        self.results = utils.system_output(cmd, retain_output=True)
33
34
35    def postprocess_iteration(self):
36        pattern = re.compile(r"Throughput (.*?) MB/sec (.*?) procs")
37        (throughput, procs) = pattern.findall(self.results)[0]
38        self.write_perf_keyval({'throughput':throughput, 'procs':procs})
39