mbligh | 9f85792 | 2008-06-05 16:19:07 +0000 | [diff] [blame] | 1 | import os |
| 2 | from autotest_lib.client.bin import test, autotest_utils |
| 3 | from autotest_lib.client.common_lib import utils, error |
| 4 | |
mbligh | b71116b | 2006-05-17 21:32:55 +0000 | [diff] [blame] | 5 | |
| 6 | class unixbench(test.test): |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 7 | version = 2 |
mbligh | b71116b | 2006-05-17 21:32:55 +0000 | [diff] [blame] | 8 | |
mbligh | c5ddfd1 | 2008-08-04 17:15:00 +0000 | [diff] [blame^] | 9 | def initialize(self): |
| 10 | self.job.require_gcc() |
| 11 | |
| 12 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 13 | # http://www.tux.org/pub/tux/niemi/unixbench/unixbench-4.1.0.tgz |
| 14 | def setup(self, tarball = 'unixbench-4.1.0.tar.bz2'): |
mbligh | 8b35285 | 2008-06-07 01:07:08 +0000 | [diff] [blame] | 15 | tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 16 | autotest_utils.extract_tarball_to_dir(tarball, self.srcdir) |
| 17 | os.chdir(self.srcdir) |
mbligh | b71116b | 2006-05-17 21:32:55 +0000 | [diff] [blame] | 18 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 19 | utils.system('patch -p1 < ../unixbench.patch') |
| 20 | utils.system('make') |
mbligh | 8de9a4d | 2008-03-04 16:12:02 +0000 | [diff] [blame] | 21 | |
| 22 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 23 | def execute(self, iterations = 1, args = '', stepsecs=0): |
| 24 | vars = ('TMPDIR=\"%s\" RESULTDIR=\"%s\"' % |
| 25 | (self.tmpdir, self.resultsdir)) |
| 26 | profilers = self.job.profilers |
| 27 | keyval = open(self.resultsdir + '/keyval', 'w') |
| 28 | self.err = None |
| 29 | 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) |
| 35 | if not profilers.only(): |
| 36 | for i in range(iterations): |
| 37 | os.chdir(self.srcdir) |
| 38 | utils.system(vars + ' ./Run ' + args) |
| 39 | report = open(self.resultsdir + '/report') |
| 40 | self.format_results(report, keyval) |
mbligh | 8de9a4d | 2008-03-04 16:12:02 +0000 | [diff] [blame] | 41 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 42 | # Do a profiling run if necessary |
| 43 | if profilers.present(): |
| 44 | profilers.start(self) |
| 45 | utils.system(vars + ' ./Run ' + args) |
| 46 | profilers.stop(self) |
| 47 | profilers.report(self) |
| 48 | |
| 49 | # check err string and possible throw |
| 50 | if self.err != None: |
| 51 | raise error.TestError(self.err) |
mbligh | 5e3ad61 | 2007-10-12 23:34:37 +0000 | [diff] [blame] | 52 | |
| 53 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 54 | def check_for_error(self, words): |
| 55 | l = len(words) |
| 56 | if l >= 3 and words[-3:l] == ['no', 'measured', 'results']: |
| 57 | # found a problem so record it in err string |
| 58 | key = '_'.join(words[:-3]) |
| 59 | if self.err == None: |
| 60 | self.err = key |
| 61 | else: |
| 62 | self.err = self.err + " " + key |
| 63 | return True |
| 64 | else: |
| 65 | return False |
mbligh | 5e3ad61 | 2007-10-12 23:34:37 +0000 | [diff] [blame] | 66 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 67 | |
| 68 | def format_results(self, report, keyval): |
| 69 | for i in range(9): |
| 70 | report.next() |
| 71 | for line in report: |
| 72 | if not line.strip(): |
| 73 | break |
| 74 | |
| 75 | words = line.split() |
| 76 | # look for problems first |
| 77 | if self.check_for_error(words): |
| 78 | continue |
| 79 | |
| 80 | # we should make sure that there are at least |
| 81 | # 6 guys before we start accessing the array |
| 82 | if len(words) >= 6: |
| 83 | key = '_'.join(words[:-6]) |
| 84 | value = words[-6] |
| 85 | print >> keyval, '%s=%s' % (key, value) |
| 86 | for line in report: |
| 87 | if 'FINAL SCORE' in line: |
| 88 | print >> keyval, 'score=%s\n' % line.split()[-1] |
| 89 | break |
mbligh | 5e3ad61 | 2007-10-12 23:34:37 +0000 | [diff] [blame] | 90 | |
| 91 | |
| 92 | if __name__ == '__main__': |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 93 | import sys |
| 94 | unixbench.format_results(sys.stdin, sys.stdout) |
mbligh | 5e3ad61 | 2007-10-12 23:34:37 +0000 | [diff] [blame] | 95 | |
| 96 | |
| 97 | """ Here is a sample report file: |
| 98 | |
| 99 | BYTE UNIX Benchmarks (Version 4.1.0) |
| 100 | System -- Linux adrianbg 2.6.18.5 #1 SMP Thu J Start Benchmark Run: Tue Sep 1 |
| 101 | 9 interactive users. |
| 102 | 21:03:50 up 5 days, 7:38, 9 users, load average: 0.71, 0.40, 0.25 |
| 103 | lrwxrwxrwx 1 root root 4 Aug 15 09:53 /bin/sh -> bash |
| 104 | /bin/sh: symbolic link to `bash' |
| 105 | /dev/sda6 192149596 91964372 90424536 51% /home |
| 106 | Dhrystone 2 using register variables 7918001.7 lps (10.0 secs, 10 samples) |
| 107 | System Call Overhead 1427272.7 lps (10.0 secs, 10 samples) |
| 108 | Process Creation 11508.6 lps (30.0 secs, 3 samples) |
| 109 | Execl Throughput 4159.7 lps (29.7 secs, 3 samples) |
| 110 | File Read 1024 bufsize 2000 maxblocks 1708109.0 KBps (30.0 secs, 3 samples) |
| 111 | File Write 1024 bufsize 2000 maxblocks 788024.0 KBps (30.0 secs, 3 samples) |
| 112 | File Copy 1024 bufsize 2000 maxblocks 452986.0 KBps (30.0 secs, 3 samples) |
| 113 | File Read 256 bufsize 500 maxblocks 508752.0 KBps (30.0 secs, 3 samples) |
| 114 | File Write 256 bufsize 500 maxblocks 214772.0 KBps (30.0 secs, 3 samples) |
| 115 | File Copy 256 bufsize 500 maxblocks 143989.0 KBps (30.0 secs, 3 samples) |
| 116 | File Read 4096 bufsize 8000 maxblocks 2626923.0 KBps (30.0 secs, 3 samples) |
| 117 | File Write 4096 bufsize 8000 maxblocks 1175070.0 KBps (30.0 secs, 3 samples) |
| 118 | File Copy 4096 bufsize 8000 maxblocks 793041.0 KBps (30.0 secs, 3 samples) |
| 119 | Shell Scripts (1 concurrent) 4417.4 lpm (60.0 secs, 3 samples) |
| 120 | Shell Scripts (8 concurrent) 1109.0 lpm (60.0 secs, 3 samples) |
| 121 | Shell Scripts (16 concurrent) 578.3 lpm (60.0 secs, 3 samples) |
| 122 | Arithmetic Test (type = short) 1843690.0 lps (10.0 secs, 3 samples) |
| 123 | Arithmetic Test (type = int) 1873615.8 lps (10.0 secs, 3 samples) |
| 124 | Arithmetic Test (type = long) 1888345.9 lps (10.0 secs, 3 samples) |
| 125 | Arithmetic Test (type = float) 616260.3 lps (10.0 secs, 3 samples) |
| 126 | Arithmetic Test (type = double) 615942.1 lps (10.0 secs, 3 samples) |
| 127 | Arithoh 18864899.5 lps (10.0 secs, 3 samples) |
| 128 | Dc: sqrt(2) to 99 decimal places 161726.0 lpm (30.0 secs, 3 samples) |
| 129 | Recursion Test--Tower of Hanoi 89229.3 lps (20.0 secs, 3 samples) |
| 130 | |
| 131 | |
| 132 | INDEX VALUES |
| 133 | TEST BASELINE RESULT INDEX |
| 134 | |
| 135 | Dhrystone 2 using register variables 116700.0 7918001.7 678.5 |
| 136 | Double-Precision Whetstone 55.0 1948.2 354.2 |
| 137 | Execl Throughput 43.0 4159.7 967.4 |
| 138 | File Copy 1024 bufsize 2000 maxblocks 3960.0 452986.0 1143.9 |
| 139 | File Copy 256 bufsize 500 maxblocks 1655.0 143989.0 870.0 |
| 140 | File Copy 4096 bufsize 8000 maxblocks 5800.0 793041.0 1367.3 |
| 141 | Pipe Throughput 12440.0 1048491.9 842.8 |
| 142 | Pipe-based Context Switching 4000.0 300778.3 751.9 |
| 143 | Process Creation 126.0 11508.6 913.4 |
| 144 | Shell Scripts (8 concurrent) 6.0 1109.0 1848.3 |
| 145 | System Call Overhead 15000.0 1427272.7 951.5 |
| 146 | ========= |
| 147 | FINAL SCORE 902.1 |
| 148 | """ |