Home | History | Annotate | Download | only in tbench
      1 import time, os, signal, re
      2 from autotest_lib.client.bin import test, utils
      3 
      4 
      5 class tbench(test.test):
      6     version = 2
      7 
      8     def initialize(self):
      9         self.job.require_gcc()
     10 
     11 
     12     # http://samba.org/ftp/tridge/dbench/dbench-3.04.tar.gz
     13     def setup(self, tarball = 'dbench-3.04.tar.gz'):
     14         tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
     15         utils.extract_tarball_to_dir(tarball, self.srcdir)
     16         os.chdir(self.srcdir)
     17 
     18         utils.configure()
     19         utils.make()
     20 
     21 
     22     def run_once(self, nprocs = None, args = ''):
     23         # only supports combined server+client model at the moment
     24         # should support separate I suppose, but nobody uses it
     25         if not nprocs:
     26             nprocs = self.job.cpu_count()
     27         args = args + ' %s' % nprocs
     28 
     29         pid = os.fork()
     30         if pid:                         # parent
     31             time.sleep(1)
     32             client = self.srcdir + '/client.txt'
     33             args = '-c ' + client + ' ' + '%s' % args
     34             cmd = os.path.join(self.srcdir, "tbench") + " " + args
     35             # Standard output is verbose and merely makes our debug logs huge
     36             # so we don't retain it.  It gets parsed for the results.
     37             self.results = utils.run(cmd, stderr_tee=utils.TEE_TO_LOGS).stdout
     38             os.kill(pid, signal.SIGTERM)    # clean up the server
     39         else:                           # child
     40             server = self.srcdir + '/tbench_srv'
     41             os.execlp(server, server)
     42 
     43 
     44     def postprocess_iteration(self):
     45         pattern = re.compile(r"Throughput (.*?) MB/sec (.*?) procs")
     46         (throughput, procs) = pattern.findall(self.results)[0]
     47         self.write_perf_keyval({'throughput':throughput, 'procs':procs})
     48