blob: 35e85ea8aae010f1044dbff0cc4878b9b67bf54f [file] [log] [blame]
mblighf074a932009-02-06 22:52:53 +00001import os, re
mbligh53da18e2009-01-05 21:13:26 +00002from autotest_lib.client.bin import test, utils
3from autotest_lib.client.common_lib import error
mbligh9f857922008-06-05 16:19:07 +00004
mblighb71116b2006-05-17 21:32:55 +00005
6class unixbench(test.test):
jadmanski0afbb632008-06-06 21:10:57 +00007 version = 2
mblighb71116b2006-05-17 21:32:55 +00008
mblighc5ddfd12008-08-04 17:15:00 +00009 def initialize(self):
10 self.job.require_gcc()
mbligh22b3a332008-08-28 21:00:31 +000011 self.err = None
mblighc5ddfd12008-08-04 17:15:00 +000012
13
jadmanski0afbb632008-06-06 21:10:57 +000014 # http://www.tux.org/pub/tux/niemi/unixbench/unixbench-4.1.0.tgz
15 def setup(self, tarball = 'unixbench-4.1.0.tar.bz2'):
mbligh8b352852008-06-07 01:07:08 +000016 tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
mbligh53da18e2009-01-05 21:13:26 +000017 utils.extract_tarball_to_dir(tarball, self.srcdir)
jadmanski0afbb632008-06-06 21:10:57 +000018 os.chdir(self.srcdir)
mblighb71116b2006-05-17 21:32:55 +000019
jadmanski0afbb632008-06-06 21:10:57 +000020 utils.system('patch -p1 < ../unixbench.patch')
21 utils.system('make')
mbligh8de9a4d2008-03-04 16:12:02 +000022
23
mbligh64ed9742008-09-11 21:59:56 +000024 def run_once(self, args='', stepsecs=0):
jadmanski0afbb632008-06-06 21:10:57 +000025 vars = ('TMPDIR=\"%s\" RESULTDIR=\"%s\"' %
26 (self.tmpdir, self.resultsdir))
jadmanski0afbb632008-06-06 21:10:57 +000027 if stepsecs:
28 # change time per subtest from unixbench's defaults of
29 # 10 secs for small tests, 30 secs for bigger tests
30 vars += ' systime=%i looper=%i seconds=%i'\
31 ' dhrytime=%i arithtime=%i' \
32 % ((stepsecs,)*5)
mbligh8de9a4d2008-03-04 16:12:02 +000033
mbligh22b3a332008-08-28 21:00:31 +000034 os.chdir(self.srcdir)
35 utils.system(vars + ' ./Run ' + args)
jadmanski0afbb632008-06-06 21:10:57 +000036
mbligh64ed9742008-09-11 21:59:56 +000037 report_path = os.path.join(self.resultsdir, 'report')
mbligh690cdcb2009-02-06 22:50:40 +000038 self.report_data = open(report_path).readlines()[9:]
mbligh22b3a332008-08-28 21:00:31 +000039
40
41 def cleanup(self):
jadmanski0afbb632008-06-06 21:10:57 +000042 # check err string and possible throw
mblighd876f452008-12-03 15:09:17 +000043 if self.err is not None:
jadmanski0afbb632008-06-06 21:10:57 +000044 raise error.TestError(self.err)
mbligh5e3ad612007-10-12 23:34:37 +000045
46
jadmanski0afbb632008-06-06 21:10:57 +000047 def check_for_error(self, words):
48 l = len(words)
49 if l >= 3 and words[-3:l] == ['no', 'measured', 'results']:
50 # found a problem so record it in err string
51 key = '_'.join(words[:-3])
mblighd876f452008-12-03 15:09:17 +000052 if self.err is None:
jadmanski0afbb632008-06-06 21:10:57 +000053 self.err = key
54 else:
55 self.err = self.err + " " + key
56 return True
57 else:
58 return False
mbligh5e3ad612007-10-12 23:34:37 +000059
jadmanski0afbb632008-06-06 21:10:57 +000060
mbligh34b297b2009-02-03 17:49:48 +000061 def postprocess_iteration(self):
62 keyval = {}
63 for line in self.report_data:
jadmanski0afbb632008-06-06 21:10:57 +000064 if not line.strip():
65 break
66
67 words = line.split()
68 # look for problems first
69 if self.check_for_error(words):
70 continue
71
72 # we should make sure that there are at least
73 # 6 guys before we start accessing the array
74 if len(words) >= 6:
75 key = '_'.join(words[:-6])
mblighf074a932009-02-06 22:52:53 +000076 key = re.sub('\W', '', key)
jadmanski0afbb632008-06-06 21:10:57 +000077 value = words[-6]
mbligh34b297b2009-02-03 17:49:48 +000078 keyval[key] = value
79 for line in self.report_data:
jadmanski0afbb632008-06-06 21:10:57 +000080 if 'FINAL SCORE' in line:
mbligh34b297b2009-02-03 17:49:48 +000081 keyval['score'] = line.split()[-1]
jadmanski0afbb632008-06-06 21:10:57 +000082 break
mbligh34b297b2009-02-03 17:49:48 +000083 self.write_perf_keyval(keyval)
mbligh5e3ad612007-10-12 23:34:37 +000084
85
mbligh5e3ad612007-10-12 23:34:37 +000086""" Here is a sample report file:
87
88 BYTE UNIX Benchmarks (Version 4.1.0)
89 System -- Linux adrianbg 2.6.18.5 #1 SMP Thu J Start Benchmark Run: Tue Sep 1
90 9 interactive users.
91 21:03:50 up 5 days, 7:38, 9 users, load average: 0.71, 0.40, 0.25
92 lrwxrwxrwx 1 root root 4 Aug 15 09:53 /bin/sh -> bash
93 /bin/sh: symbolic link to `bash'
94 /dev/sda6 192149596 91964372 90424536 51% /home
95Dhrystone 2 using register variables 7918001.7 lps (10.0 secs, 10 samples)
96System Call Overhead 1427272.7 lps (10.0 secs, 10 samples)
97Process Creation 11508.6 lps (30.0 secs, 3 samples)
98Execl Throughput 4159.7 lps (29.7 secs, 3 samples)
99File Read 1024 bufsize 2000 maxblocks 1708109.0 KBps (30.0 secs, 3 samples)
100File Write 1024 bufsize 2000 maxblocks 788024.0 KBps (30.0 secs, 3 samples)
101File Copy 1024 bufsize 2000 maxblocks 452986.0 KBps (30.0 secs, 3 samples)
102File Read 256 bufsize 500 maxblocks 508752.0 KBps (30.0 secs, 3 samples)
103File Write 256 bufsize 500 maxblocks 214772.0 KBps (30.0 secs, 3 samples)
104File Copy 256 bufsize 500 maxblocks 143989.0 KBps (30.0 secs, 3 samples)
105File Read 4096 bufsize 8000 maxblocks 2626923.0 KBps (30.0 secs, 3 samples)
106File Write 4096 bufsize 8000 maxblocks 1175070.0 KBps (30.0 secs, 3 samples)
107File Copy 4096 bufsize 8000 maxblocks 793041.0 KBps (30.0 secs, 3 samples)
108Shell Scripts (1 concurrent) 4417.4 lpm (60.0 secs, 3 samples)
109Shell Scripts (8 concurrent) 1109.0 lpm (60.0 secs, 3 samples)
110Shell Scripts (16 concurrent) 578.3 lpm (60.0 secs, 3 samples)
111Arithmetic Test (type = short) 1843690.0 lps (10.0 secs, 3 samples)
112Arithmetic Test (type = int) 1873615.8 lps (10.0 secs, 3 samples)
113Arithmetic Test (type = long) 1888345.9 lps (10.0 secs, 3 samples)
114Arithmetic Test (type = float) 616260.3 lps (10.0 secs, 3 samples)
115Arithmetic Test (type = double) 615942.1 lps (10.0 secs, 3 samples)
116Arithoh 18864899.5 lps (10.0 secs, 3 samples)
117Dc: sqrt(2) to 99 decimal places 161726.0 lpm (30.0 secs, 3 samples)
118Recursion Test--Tower of Hanoi 89229.3 lps (20.0 secs, 3 samples)
119
120
121 INDEX VALUES
122TEST BASELINE RESULT INDEX
123
124Dhrystone 2 using register variables 116700.0 7918001.7 678.5
125Double-Precision Whetstone 55.0 1948.2 354.2
126Execl Throughput 43.0 4159.7 967.4
127File Copy 1024 bufsize 2000 maxblocks 3960.0 452986.0 1143.9
128File Copy 256 bufsize 500 maxblocks 1655.0 143989.0 870.0
129File Copy 4096 bufsize 8000 maxblocks 5800.0 793041.0 1367.3
130Pipe Throughput 12440.0 1048491.9 842.8
131Pipe-based Context Switching 4000.0 300778.3 751.9
132Process Creation 126.0 11508.6 913.4
133Shell Scripts (8 concurrent) 6.0 1109.0 1848.3
134System Call Overhead 15000.0 1427272.7 951.5
135 =========
136 FINAL SCORE 902.1
137"""