1import os, re 2from autotest_lib.client.bin import test, utils 3from autotest_lib.client.common_lib import error 4 5 6class unixbench5(test.test): 7 """ 8 This test measure system wide performance by running the following tests: 9 - Dhrystone - focuses on string handling. 10 - Whetstone - measure floating point operations. 11 - Execl Throughput - measure the number of execl calls per second. 12 - File Copy 13 - Pipe throughput 14 - Pipe-based context switching 15 - Process creation - number of times a process can fork and reap 16 - Shell Scripts - number of times a process can start and reap a script 17 - System Call Overhead - estimates the cost of entering and leaving the 18 kernel. 19 20 @see: http://code.google.com/p/byte-unixbench/ 21 @author: Dale Curtis <dalecurtis@google.com> 22 """ 23 version = 1 24 25 26 def initialize(self): 27 self.job.require_gcc() 28 self.err = [] 29 30 31 def setup(self, tarball='unixbench-5.1.3.tgz'): 32 """ 33 Compiles unixbench. 34 35 @tarball: Path or URL to a unixbench tarball 36 @see: http://byte-unixbench.googlecode.com/files/unixbench-5.1.3.tgz 37 """ 38 tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) 39 utils.extract_tarball_to_dir(tarball, self.srcdir) 40 os.chdir(self.srcdir) 41 42 utils.system('patch -p0 < ../Makefile.patch') 43 utils.make() 44 45 46 def run_once(self, args=''): 47 vars = 'UB_TMPDIR="%s" UB_RESULTDIR="%s"' % (self.tmpdir, 48 self.resultsdir) 49 os.chdir(self.srcdir) 50 self.report_data = utils.system_output(vars + ' ./Run ' + args) 51 self.results_path = os.path.join(self.resultsdir, 52 'raw_output_%s' % self.iteration) 53 utils.open_write_close(self.results_path, self.report_data) 54 55 56 def cleanup(self): 57 """ 58 Check error index list and throw TestError if necessary. 59 """ 60 if self.err: 61 e_msg = ("No measured results for output lines: %s\nOutput:%s" % 62 (" ".join(self.err), self.report_data)) 63 raise error.TestError(e_msg) 64 65 66 def process_section(self, section, suffix): 67 keyval = {} 68 subsections = section.split('\n\n') 69 70 if len(subsections) < 3: 71 raise error.TestError('Invalid output format. Unable to parse') 72 73 # Process the subsection containing performance results first. 74 for index, line in enumerate(subsections[1].strip().split('\n')): 75 # Look for problems first. 76 if re.search('no measured results', line, flags=re.IGNORECASE): 77 self.err.append(str(index + 1)) 78 79 # Every performance result line ends with 6 values, with the sixth 80 # being the actual result. Make sure there are at least that words 81 # in the line before processing. 82 words = line.lower().split() 83 if len(words) >= 6: 84 key = re.sub('\W', '', '_'.join(words[:-6])) 85 keyval[key + suffix] = words[-6] 86 87 # The final score should be the last item in the third subsection. 88 keyval['score' + suffix] = subsections[2].strip().split()[-1] 89 90 self.write_perf_keyval(keyval) 91 92 93 def postprocess_iteration(self): 94 # Break up sections around dividing lines. 95 sections = self.report_data.split('-'*72) 96 97 # First section is junk to us, second has results for single CPU run. 98 if len(sections) > 1: 99 self.process_section(section=sections[1], suffix='') 100 101 # Only machines with > 1 CPU will have a 3rd section. 102 if len(sections) > 2: 103 self.process_section(section=sections[2], suffix='_multi') 104 else: 105 raise error.TestError('Invalid output format. Unable to parse') 106 107 108""" Here is a sample output: 109 110 # # # # # # # ##### ###### # # #### # # 111 # # ## # # # # # # # ## # # # # # 112 # # # # # # ## ##### ##### # # # # ###### 113 # # # # # # ## # # # # # # # # # 114 # # # ## # # # # # # # ## # # # # 115 #### # # # # # ##### ###### # # #### # # 116 117 Version 5.1.2 Based on the Byte Magazine Unix Benchmark 118 119 Multi-CPU version Version 5 revisions by Ian Smith, 120 Sunnyvale, CA, USA 121 December 22, 2007 johantheghost at yahoo period com 122 123 1241 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 125 1261 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10 127 1281 x Execl Throughput 1 2 3 129 1301 x File Copy 1024 bufsize 2000 maxblocks 1 2 3 131 1321 x File Copy 256 bufsize 500 maxblocks 1 2 3 133 1341 x File Copy 4096 bufsize 8000 maxblocks 1 2 3 135 1361 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10 137 1381 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10 139 1401 x Process Creation 1 2 3 141 1421 x System Call Overhead 1 2 3 4 5 6 7 8 9 10 143 1441 x Shell Scripts (1 concurrent) 1 2 3 145 1461 x Shell Scripts (8 concurrent) 1 2 3 147 1482 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 149 1502 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10 151 1522 x Execl Throughput 1 2 3 153 1542 x File Copy 1024 bufsize 2000 maxblocks 1 2 3 155 1562 x File Copy 256 bufsize 500 maxblocks 1 2 3 157 1582 x File Copy 4096 bufsize 8000 maxblocks 1 2 3 159 1602 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10 161 1622 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10 163 1642 x Process Creation 1 2 3 165 1662 x System Call Overhead 1 2 3 4 5 6 7 8 9 10 167 1682 x Shell Scripts (1 concurrent) 1 2 3 169 1702 x Shell Scripts (8 concurrent) 1 2 3 171 172======================================================================== 173 BYTE UNIX Benchmarks (Version 5.1.2) 174 175 System: localhost: GNU/Linux 176 OS: GNU/Linux -- 2.6.32.26+drm33.12 -- #1 SMP Wed Jan 12 16:16:05 PST 2011 177 Machine: i686 (GenuineIntel) 178 Language: en_US.utf8 (charmap=, collate=) 179 CPU 0: Intel(R) Atom(TM) CPU N455 @ 1.66GHz (3325.2 bogomips) 180 Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT 181 CPU 1: Intel(R) Atom(TM) CPU N455 @ 1.66GHz (3325.0 bogomips) 182 Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT 183 14:11:59 up 1 day, 1:10, 0 users, load average: 0.47, 0.48, 0.51; runlevel 184 185------------------------------------------------------------------------ 186Benchmark Run: Fri Jan 14 2011 14:11:59 - 14:41:26 1872 CPUs in system; running 1 parallel copy of tests 188 189Dhrystone 2 using register variables 2264000.6 lps (10.0 s, 7 samples) 190Double-Precision Whetstone 507.0 MWIPS (10.1 s, 7 samples) 191Execl Throughput 796.7 lps (30.0 s, 2 samples) 192File Copy 1024 bufsize 2000 maxblocks 110924.1 KBps (30.1 s, 2 samples) 193File Copy 256 bufsize 500 maxblocks 32600.5 KBps (30.1 s, 2 samples) 194File Copy 4096 bufsize 8000 maxblocks 284236.5 KBps (30.0 s, 2 samples) 195Pipe Throughput 301672.5 lps (10.0 s, 7 samples) 196Pipe-based Context Switching 29475.3 lps (10.0 s, 7 samples) 197Process Creation 3124.6 lps (30.0 s, 2 samples) 198Shell Scripts (1 concurrent) 1753.0 lpm (60.0 s, 2 samples) 199Shell Scripts (8 concurrent) 305.9 lpm (60.1 s, 2 samples) 200System Call Overhead 592781.7 lps (10.0 s, 7 samples) 201 202System Benchmarks Index Values BASELINE RESULT INDEX 203Dhrystone 2 using register variables 116700.0 2264000.6 194.0 204Double-Precision Whetstone 55.0 507.0 92.2 205Execl Throughput 43.0 796.7 185.3 206File Copy 1024 bufsize 2000 maxblocks 3960.0 110924.1 280.1 207File Copy 256 bufsize 500 maxblocks 1655.0 32600.5 197.0 208File Copy 4096 bufsize 8000 maxblocks 5800.0 284236.5 490.1 209Pipe Throughput 12440.0 301672.5 242.5 210Pipe-based Context Switching 4000.0 29475.3 73.7 211Process Creation 126.0 3124.6 248.0 212Shell Scripts (1 concurrent) 42.4 1753.0 413.4 213Shell Scripts (8 concurrent) 6.0 305.9 509.8 214System Call Overhead 15000.0 592781.7 395.2 215 ======== 216System Benchmarks Index Score 238.0 217 218------------------------------------------------------------------------ 219Benchmark Run: Fri Jan 14 2011 14:41:26 - 15:09:23 2202 CPUs in system; running 2 parallel copies of tests 221 222Dhrystone 2 using register variables 3411919.6 lps (10.0 s, 7 samples) 223Double-Precision Whetstone 964.3 MWIPS (10.1 s, 7 samples) 224Execl Throughput 2053.5 lps (30.0 s, 2 samples) 225File Copy 1024 bufsize 2000 maxblocks 158308.0 KBps (30.0 s, 2 samples) 226File Copy 256 bufsize 500 maxblocks 46249.5 KBps (30.0 s, 2 samples) 227File Copy 4096 bufsize 8000 maxblocks 389881.9 KBps (30.0 s, 2 samples) 228Pipe Throughput 410193.1 lps (10.0 s, 7 samples) 229Pipe-based Context Switching 113780.0 lps (10.0 s, 7 samples) 230Process Creation 7609.0 lps (30.0 s, 2 samples) 231Shell Scripts (1 concurrent) 2355.0 lpm (60.0 s, 2 samples) 232Shell Scripts (8 concurrent) 308.1 lpm (60.2 s, 2 samples) 233System Call Overhead 1057063.2 lps (10.0 s, 7 samples) 234 235System Benchmarks Index Values BASELINE RESULT INDEX 236Dhrystone 2 using register variables 116700.0 3411919.6 292.4 237Double-Precision Whetstone 55.0 964.3 175.3 238Execl Throughput 43.0 2053.5 477.6 239File Copy 1024 bufsize 2000 maxblocks 3960.0 158308.0 399.8 240File Copy 256 bufsize 500 maxblocks 1655.0 46249.5 279.5 241File Copy 4096 bufsize 8000 maxblocks 5800.0 389881.9 672.2 242Pipe Throughput 12440.0 410193.1 329.7 243Pipe-based Context Switching 4000.0 113780.0 284.5 244Process Creation 126.0 7609.0 603.9 245Shell Scripts (1 concurrent) 42.4 2355.0 555.4 246Shell Scripts (8 concurrent) 6.0 308.1 513.5 247System Call Overhead 15000.0 1057063.2 704.7 248 ======== 249System Benchmarks Index Score 407.4 250 251""" 252