blob: 9983cec59dbc013730251ec25310b93256975a37 [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')
mbligh5ba43b22010-01-05 18:18:02 +000021 utils.system('patch -p1 < ../Makefile.patch')
Eric Li861b2d52011-02-04 14:50:35 -080022 utils.make()
mblighf7b0d272010-02-19 19:14:26 +000023 utils.system('rm pgms/select')
mbligh8de9a4d2008-03-04 16:12:02 +000024
25
mbligh64ed9742008-09-11 21:59:56 +000026 def run_once(self, args='', stepsecs=0):
Eric Lie4ac9912010-03-03 14:03:51 -080027 vars = ('TMPDIR=\"%s\" RESULTDIR=\"%s\" FLAVOR=Linux' %
jadmanski0afbb632008-06-06 21:10:57 +000028 (self.tmpdir, self.resultsdir))
jadmanski0afbb632008-06-06 21:10:57 +000029 if stepsecs:
30 # change time per subtest from unixbench's defaults of
31 # 10 secs for small tests, 30 secs for bigger tests
32 vars += ' systime=%i looper=%i seconds=%i'\
33 ' dhrytime=%i arithtime=%i' \
34 % ((stepsecs,)*5)
mbligh8de9a4d2008-03-04 16:12:02 +000035
mbligh22b3a332008-08-28 21:00:31 +000036 os.chdir(self.srcdir)
Eric Li861b2d52011-02-04 14:50:35 -080037 try:
38 utils.system(vars + ' ./Run ' + args)
39 finally:
40 times_path = os.path.join(self.resultsdir, 'times')
41 # The 'times' file can be needlessly huge as it contains warnings
42 # and error messages printed out by small benchmarks that are
43 # run in a loop. It can easily compress 100x in such cases.
44 if os.path.exists(times_path):
45 utils.system("gzip -9 '%s'" % (times_path,), ignore_status=True)
jadmanski0afbb632008-06-06 21:10:57 +000046
mbligh64ed9742008-09-11 21:59:56 +000047 report_path = os.path.join(self.resultsdir, 'report')
mbligh690cdcb2009-02-06 22:50:40 +000048 self.report_data = open(report_path).readlines()[9:]
mbligh22b3a332008-08-28 21:00:31 +000049
50
51 def cleanup(self):
jadmanski0afbb632008-06-06 21:10:57 +000052 # check err string and possible throw
mblighd876f452008-12-03 15:09:17 +000053 if self.err is not None:
jadmanski0afbb632008-06-06 21:10:57 +000054 raise error.TestError(self.err)
mbligh5e3ad612007-10-12 23:34:37 +000055
56
jadmanski0afbb632008-06-06 21:10:57 +000057 def check_for_error(self, words):
58 l = len(words)
59 if l >= 3 and words[-3:l] == ['no', 'measured', 'results']:
60 # found a problem so record it in err string
61 key = '_'.join(words[:-3])
mblighd876f452008-12-03 15:09:17 +000062 if self.err is None:
jadmanski0afbb632008-06-06 21:10:57 +000063 self.err = key
64 else:
65 self.err = self.err + " " + key
66 return True
67 else:
68 return False
mbligh5e3ad612007-10-12 23:34:37 +000069
jadmanski0afbb632008-06-06 21:10:57 +000070
mbligh34b297b2009-02-03 17:49:48 +000071 def postprocess_iteration(self):
72 keyval = {}
73 for line in self.report_data:
jadmanski0afbb632008-06-06 21:10:57 +000074 if not line.strip():
75 break
76
77 words = line.split()
78 # look for problems first
79 if self.check_for_error(words):
80 continue
81
82 # we should make sure that there are at least
83 # 6 guys before we start accessing the array
84 if len(words) >= 6:
85 key = '_'.join(words[:-6])
mblighf074a932009-02-06 22:52:53 +000086 key = re.sub('\W', '', key)
jadmanski0afbb632008-06-06 21:10:57 +000087 value = words[-6]
mbligh34b297b2009-02-03 17:49:48 +000088 keyval[key] = value
89 for line in self.report_data:
jadmanski0afbb632008-06-06 21:10:57 +000090 if 'FINAL SCORE' in line:
mbligh34b297b2009-02-03 17:49:48 +000091 keyval['score'] = line.split()[-1]
jadmanski0afbb632008-06-06 21:10:57 +000092 break
mbligh34b297b2009-02-03 17:49:48 +000093 self.write_perf_keyval(keyval)
mbligh5e3ad612007-10-12 23:34:37 +000094
95
mbligh5e3ad612007-10-12 23:34:37 +000096""" Here is a sample report file:
97
98 BYTE UNIX Benchmarks (Version 4.1.0)
99 System -- Linux adrianbg 2.6.18.5 #1 SMP Thu J Start Benchmark Run: Tue Sep 1
100 9 interactive users.
101 21:03:50 up 5 days, 7:38, 9 users, load average: 0.71, 0.40, 0.25
102 lrwxrwxrwx 1 root root 4 Aug 15 09:53 /bin/sh -> bash
103 /bin/sh: symbolic link to `bash'
104 /dev/sda6 192149596 91964372 90424536 51% /home
105Dhrystone 2 using register variables 7918001.7 lps (10.0 secs, 10 samples)
106System Call Overhead 1427272.7 lps (10.0 secs, 10 samples)
107Process Creation 11508.6 lps (30.0 secs, 3 samples)
108Execl Throughput 4159.7 lps (29.7 secs, 3 samples)
109File Read 1024 bufsize 2000 maxblocks 1708109.0 KBps (30.0 secs, 3 samples)
110File Write 1024 bufsize 2000 maxblocks 788024.0 KBps (30.0 secs, 3 samples)
111File Copy 1024 bufsize 2000 maxblocks 452986.0 KBps (30.0 secs, 3 samples)
112File Read 256 bufsize 500 maxblocks 508752.0 KBps (30.0 secs, 3 samples)
113File Write 256 bufsize 500 maxblocks 214772.0 KBps (30.0 secs, 3 samples)
114File Copy 256 bufsize 500 maxblocks 143989.0 KBps (30.0 secs, 3 samples)
115File Read 4096 bufsize 8000 maxblocks 2626923.0 KBps (30.0 secs, 3 samples)
116File Write 4096 bufsize 8000 maxblocks 1175070.0 KBps (30.0 secs, 3 samples)
117File Copy 4096 bufsize 8000 maxblocks 793041.0 KBps (30.0 secs, 3 samples)
118Shell Scripts (1 concurrent) 4417.4 lpm (60.0 secs, 3 samples)
119Shell Scripts (8 concurrent) 1109.0 lpm (60.0 secs, 3 samples)
120Shell Scripts (16 concurrent) 578.3 lpm (60.0 secs, 3 samples)
121Arithmetic Test (type = short) 1843690.0 lps (10.0 secs, 3 samples)
122Arithmetic Test (type = int) 1873615.8 lps (10.0 secs, 3 samples)
123Arithmetic Test (type = long) 1888345.9 lps (10.0 secs, 3 samples)
124Arithmetic Test (type = float) 616260.3 lps (10.0 secs, 3 samples)
125Arithmetic Test (type = double) 615942.1 lps (10.0 secs, 3 samples)
126Arithoh 18864899.5 lps (10.0 secs, 3 samples)
127Dc: sqrt(2) to 99 decimal places 161726.0 lpm (30.0 secs, 3 samples)
128Recursion Test--Tower of Hanoi 89229.3 lps (20.0 secs, 3 samples)
129
130
131 INDEX VALUES
132TEST BASELINE RESULT INDEX
133
134Dhrystone 2 using register variables 116700.0 7918001.7 678.5
135Double-Precision Whetstone 55.0 1948.2 354.2
136Execl Throughput 43.0 4159.7 967.4
137File Copy 1024 bufsize 2000 maxblocks 3960.0 452986.0 1143.9
138File Copy 256 bufsize 500 maxblocks 1655.0 143989.0 870.0
139File Copy 4096 bufsize 8000 maxblocks 5800.0 793041.0 1367.3
140Pipe Throughput 12440.0 1048491.9 842.8
141Pipe-based Context Switching 4000.0 300778.3 751.9
142Process Creation 126.0 11508.6 913.4
143Shell Scripts (8 concurrent) 6.0 1109.0 1848.3
144System Call Overhead 15000.0 1427272.7 951.5
145 =========
146 FINAL SCORE 902.1
147"""