blob: 7c28bce4db5d1308c1053edf4b7f26734e7f2fae [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')
jadmanski987b7472008-09-11 22:32:34 +000038 report = open(report_path)
mbligh34b297b2009-02-03 17:49:48 +000039 for i in range(9):
40 report.next()
41 self.report_data = report.readlines()
42 report.close()
mbligh22b3a332008-08-28 21:00:31 +000043
44
45 def cleanup(self):
jadmanski0afbb632008-06-06 21:10:57 +000046 # check err string and possible throw
mblighd876f452008-12-03 15:09:17 +000047 if self.err is not None:
jadmanski0afbb632008-06-06 21:10:57 +000048 raise error.TestError(self.err)
mbligh5e3ad612007-10-12 23:34:37 +000049
50
jadmanski0afbb632008-06-06 21:10:57 +000051 def check_for_error(self, words):
52 l = len(words)
53 if l >= 3 and words[-3:l] == ['no', 'measured', 'results']:
54 # found a problem so record it in err string
55 key = '_'.join(words[:-3])
mblighd876f452008-12-03 15:09:17 +000056 if self.err is None:
jadmanski0afbb632008-06-06 21:10:57 +000057 self.err = key
58 else:
59 self.err = self.err + " " + key
60 return True
61 else:
62 return False
mbligh5e3ad612007-10-12 23:34:37 +000063
jadmanski0afbb632008-06-06 21:10:57 +000064
mbligh34b297b2009-02-03 17:49:48 +000065 def postprocess_iteration(self):
66 keyval = {}
67 for line in self.report_data:
jadmanski0afbb632008-06-06 21:10:57 +000068 if not line.strip():
69 break
70
71 words = line.split()
72 # look for problems first
73 if self.check_for_error(words):
74 continue
75
76 # we should make sure that there are at least
77 # 6 guys before we start accessing the array
78 if len(words) >= 6:
79 key = '_'.join(words[:-6])
80 value = words[-6]
mbligh34b297b2009-02-03 17:49:48 +000081 keyval[key] = value
82 for line in self.report_data:
jadmanski0afbb632008-06-06 21:10:57 +000083 if 'FINAL SCORE' in line:
mbligh34b297b2009-02-03 17:49:48 +000084 keyval['score'] = line.split()[-1]
jadmanski0afbb632008-06-06 21:10:57 +000085 break
mbligh34b297b2009-02-03 17:49:48 +000086 self.write_perf_keyval(keyval)
mbligh5e3ad612007-10-12 23:34:37 +000087
88
mbligh5e3ad612007-10-12 23:34:37 +000089""" Here is a sample report file:
90
91 BYTE UNIX Benchmarks (Version 4.1.0)
92 System -- Linux adrianbg 2.6.18.5 #1 SMP Thu J Start Benchmark Run: Tue Sep 1
93 9 interactive users.
94 21:03:50 up 5 days, 7:38, 9 users, load average: 0.71, 0.40, 0.25
95 lrwxrwxrwx 1 root root 4 Aug 15 09:53 /bin/sh -> bash
96 /bin/sh: symbolic link to `bash'
97 /dev/sda6 192149596 91964372 90424536 51% /home
98Dhrystone 2 using register variables 7918001.7 lps (10.0 secs, 10 samples)
99System Call Overhead 1427272.7 lps (10.0 secs, 10 samples)
100Process Creation 11508.6 lps (30.0 secs, 3 samples)
101Execl Throughput 4159.7 lps (29.7 secs, 3 samples)
102File Read 1024 bufsize 2000 maxblocks 1708109.0 KBps (30.0 secs, 3 samples)
103File Write 1024 bufsize 2000 maxblocks 788024.0 KBps (30.0 secs, 3 samples)
104File Copy 1024 bufsize 2000 maxblocks 452986.0 KBps (30.0 secs, 3 samples)
105File Read 256 bufsize 500 maxblocks 508752.0 KBps (30.0 secs, 3 samples)
106File Write 256 bufsize 500 maxblocks 214772.0 KBps (30.0 secs, 3 samples)
107File Copy 256 bufsize 500 maxblocks 143989.0 KBps (30.0 secs, 3 samples)
108File Read 4096 bufsize 8000 maxblocks 2626923.0 KBps (30.0 secs, 3 samples)
109File Write 4096 bufsize 8000 maxblocks 1175070.0 KBps (30.0 secs, 3 samples)
110File Copy 4096 bufsize 8000 maxblocks 793041.0 KBps (30.0 secs, 3 samples)
111Shell Scripts (1 concurrent) 4417.4 lpm (60.0 secs, 3 samples)
112Shell Scripts (8 concurrent) 1109.0 lpm (60.0 secs, 3 samples)
113Shell Scripts (16 concurrent) 578.3 lpm (60.0 secs, 3 samples)
114Arithmetic Test (type = short) 1843690.0 lps (10.0 secs, 3 samples)
115Arithmetic Test (type = int) 1873615.8 lps (10.0 secs, 3 samples)
116Arithmetic Test (type = long) 1888345.9 lps (10.0 secs, 3 samples)
117Arithmetic Test (type = float) 616260.3 lps (10.0 secs, 3 samples)
118Arithmetic Test (type = double) 615942.1 lps (10.0 secs, 3 samples)
119Arithoh 18864899.5 lps (10.0 secs, 3 samples)
120Dc: sqrt(2) to 99 decimal places 161726.0 lpm (30.0 secs, 3 samples)
121Recursion Test--Tower of Hanoi 89229.3 lps (20.0 secs, 3 samples)
122
123
124 INDEX VALUES
125TEST BASELINE RESULT INDEX
126
127Dhrystone 2 using register variables 116700.0 7918001.7 678.5
128Double-Precision Whetstone 55.0 1948.2 354.2
129Execl Throughput 43.0 4159.7 967.4
130File Copy 1024 bufsize 2000 maxblocks 3960.0 452986.0 1143.9
131File Copy 256 bufsize 500 maxblocks 1655.0 143989.0 870.0
132File Copy 4096 bufsize 8000 maxblocks 5800.0 793041.0 1367.3
133Pipe Throughput 12440.0 1048491.9 842.8
134Pipe-based Context Switching 4000.0 300778.3 751.9
135Process Creation 126.0 11508.6 913.4
136Shell Scripts (8 concurrent) 6.0 1109.0 1848.3
137System Call Overhead 15000.0 1427272.7 951.5
138 =========
139 FINAL SCORE 902.1
140"""