blob: 5b149d5a9df2c1f6afa1015da808987a9efc27d9 [file] [log] [blame]
mbligh9f857922008-06-05 16:19:07 +00001import os
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])
76 value = words[-6]
mbligh34b297b2009-02-03 17:49:48 +000077 keyval[key] = value
78 for line in self.report_data:
jadmanski0afbb632008-06-06 21:10:57 +000079 if 'FINAL SCORE' in line:
mbligh34b297b2009-02-03 17:49:48 +000080 keyval['score'] = line.split()[-1]
jadmanski0afbb632008-06-06 21:10:57 +000081 break
mbligh34b297b2009-02-03 17:49:48 +000082 self.write_perf_keyval(keyval)
mbligh5e3ad612007-10-12 23:34:37 +000083
84
mbligh5e3ad612007-10-12 23:34:37 +000085""" Here is a sample report file:
86
87 BYTE UNIX Benchmarks (Version 4.1.0)
88 System -- Linux adrianbg 2.6.18.5 #1 SMP Thu J Start Benchmark Run: Tue Sep 1
89 9 interactive users.
90 21:03:50 up 5 days, 7:38, 9 users, load average: 0.71, 0.40, 0.25
91 lrwxrwxrwx 1 root root 4 Aug 15 09:53 /bin/sh -> bash
92 /bin/sh: symbolic link to `bash'
93 /dev/sda6 192149596 91964372 90424536 51% /home
94Dhrystone 2 using register variables 7918001.7 lps (10.0 secs, 10 samples)
95System Call Overhead 1427272.7 lps (10.0 secs, 10 samples)
96Process Creation 11508.6 lps (30.0 secs, 3 samples)
97Execl Throughput 4159.7 lps (29.7 secs, 3 samples)
98File Read 1024 bufsize 2000 maxblocks 1708109.0 KBps (30.0 secs, 3 samples)
99File Write 1024 bufsize 2000 maxblocks 788024.0 KBps (30.0 secs, 3 samples)
100File Copy 1024 bufsize 2000 maxblocks 452986.0 KBps (30.0 secs, 3 samples)
101File Read 256 bufsize 500 maxblocks 508752.0 KBps (30.0 secs, 3 samples)
102File Write 256 bufsize 500 maxblocks 214772.0 KBps (30.0 secs, 3 samples)
103File Copy 256 bufsize 500 maxblocks 143989.0 KBps (30.0 secs, 3 samples)
104File Read 4096 bufsize 8000 maxblocks 2626923.0 KBps (30.0 secs, 3 samples)
105File Write 4096 bufsize 8000 maxblocks 1175070.0 KBps (30.0 secs, 3 samples)
106File Copy 4096 bufsize 8000 maxblocks 793041.0 KBps (30.0 secs, 3 samples)
107Shell Scripts (1 concurrent) 4417.4 lpm (60.0 secs, 3 samples)
108Shell Scripts (8 concurrent) 1109.0 lpm (60.0 secs, 3 samples)
109Shell Scripts (16 concurrent) 578.3 lpm (60.0 secs, 3 samples)
110Arithmetic Test (type = short) 1843690.0 lps (10.0 secs, 3 samples)
111Arithmetic Test (type = int) 1873615.8 lps (10.0 secs, 3 samples)
112Arithmetic Test (type = long) 1888345.9 lps (10.0 secs, 3 samples)
113Arithmetic Test (type = float) 616260.3 lps (10.0 secs, 3 samples)
114Arithmetic Test (type = double) 615942.1 lps (10.0 secs, 3 samples)
115Arithoh 18864899.5 lps (10.0 secs, 3 samples)
116Dc: sqrt(2) to 99 decimal places 161726.0 lpm (30.0 secs, 3 samples)
117Recursion Test--Tower of Hanoi 89229.3 lps (20.0 secs, 3 samples)
118
119
120 INDEX VALUES
121TEST BASELINE RESULT INDEX
122
123Dhrystone 2 using register variables 116700.0 7918001.7 678.5
124Double-Precision Whetstone 55.0 1948.2 354.2
125Execl Throughput 43.0 4159.7 967.4
126File Copy 1024 bufsize 2000 maxblocks 3960.0 452986.0 1143.9
127File Copy 256 bufsize 500 maxblocks 1655.0 143989.0 870.0
128File Copy 4096 bufsize 8000 maxblocks 5800.0 793041.0 1367.3
129Pipe Throughput 12440.0 1048491.9 842.8
130Pipe-based Context Switching 4000.0 300778.3 751.9
131Process Creation 126.0 11508.6 913.4
132Shell Scripts (8 concurrent) 6.0 1109.0 1848.3
133System Call Overhead 15000.0 1427272.7 951.5
134 =========
135 FINAL SCORE 902.1
136"""