mbligh | 9f85792 | 2008-06-05 16:19:07 +0000 | [diff] [blame] | 1 | import time, os, signal, re |
mbligh | 53da18e | 2009-01-05 21:13:26 +0000 | [diff] [blame] | 2 | from autotest_lib.client.bin import test, utils |
mbligh | 9f85792 | 2008-06-05 16:19:07 +0000 | [diff] [blame] | 3 | |
mbligh | 2a3a3ea | 2006-04-22 22:53:23 +0000 | [diff] [blame] | 4 | |
| 5 | class tbench(test.test): |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 6 | version = 2 |
mbligh | 2a3a3ea | 2006-04-22 22:53:23 +0000 | [diff] [blame] | 7 | |
mbligh | c5ddfd1 | 2008-08-04 17:15:00 +0000 | [diff] [blame] | 8 | def initialize(self): |
| 9 | self.job.require_gcc() |
| 10 | |
| 11 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 12 | # http://samba.org/ftp/tridge/dbench/dbench-3.04.tar.gz |
| 13 | def setup(self, tarball = 'dbench-3.04.tar.gz'): |
mbligh | 8b35285 | 2008-06-07 01:07:08 +0000 | [diff] [blame] | 14 | tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) |
mbligh | 53da18e | 2009-01-05 21:13:26 +0000 | [diff] [blame] | 15 | utils.extract_tarball_to_dir(tarball, self.srcdir) |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 16 | os.chdir(self.srcdir) |
mbligh | 2a3a3ea | 2006-04-22 22:53:23 +0000 | [diff] [blame] | 17 | |
Eric Li | 6f27d4f | 2010-09-29 10:55:17 -0700 | [diff] [blame] | 18 | utils.configure() |
| 19 | utils.make() |
mbligh | 0662b15 | 2007-06-20 13:03:19 +0000 | [diff] [blame] | 20 | |
mbligh | c5ddfd1 | 2008-08-04 17:15:00 +0000 | [diff] [blame] | 21 | |
mbligh | 0cec974 | 2008-08-28 18:22:46 +0000 | [diff] [blame] | 22 | def run_once(self, nprocs = None, args = ''): |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 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() |
mbligh | 0cec974 | 2008-08-28 18:22:46 +0000 | [diff] [blame] | 27 | args = args + ' %s' % nprocs |
mbligh | a999198 | 2006-05-25 18:32:43 +0000 | [diff] [blame] | 28 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 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 |
Eric Li | 861b2d5 | 2011-02-04 14:50:35 -0800 | [diff] [blame] | 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 |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 38 | os.kill(pid, signal.SIGTERM) # clean up the server |
| 39 | else: # child |
| 40 | server = self.srcdir + '/tbench_srv' |
| 41 | os.execlp(server, server) |
mbligh | 0662b15 | 2007-06-20 13:03:19 +0000 | [diff] [blame] | 42 | |
| 43 | |
mbligh | 34b297b | 2009-02-03 17:49:48 +0000 | [diff] [blame] | 44 | def postprocess_iteration(self): |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 45 | pattern = re.compile(r"Throughput (.*?) MB/sec (.*?) procs") |
mbligh | 34b297b | 2009-02-03 17:49:48 +0000 | [diff] [blame] | 46 | (throughput, procs) = pattern.findall(self.results)[0] |
| 47 | self.write_perf_keyval({'throughput':throughput, 'procs':procs}) |