1 import os, re 2 from autotest_lib.client.bin import test, utils 3 from autotest_lib.client.common_lib import error 4 5 6 class 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 (at] 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 124 1 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 125 126 1 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10 127 128 1 x Execl Throughput 1 2 3 129 130 1 x File Copy 1024 bufsize 2000 maxblocks 1 2 3 131 132 1 x File Copy 256 bufsize 500 maxblocks 1 2 3 133 134 1 x File Copy 4096 bufsize 8000 maxblocks 1 2 3 135 136 1 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10 137 138 1 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10 139 140 1 x Process Creation 1 2 3 141 142 1 x System Call Overhead 1 2 3 4 5 6 7 8 9 10 143 144 1 x Shell Scripts (1 concurrent) 1 2 3 145 146 1 x Shell Scripts (8 concurrent) 1 2 3 147 148 2 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 149 150 2 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10 151 152 2 x Execl Throughput 1 2 3 153 154 2 x File Copy 1024 bufsize 2000 maxblocks 1 2 3 155 156 2 x File Copy 256 bufsize 500 maxblocks 1 2 3 157 158 2 x File Copy 4096 bufsize 8000 maxblocks 1 2 3 159 160 2 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10 161 162 2 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10 163 164 2 x Process Creation 1 2 3 165 166 2 x System Call Overhead 1 2 3 4 5 6 7 8 9 10 167 168 2 x Shell Scripts (1 concurrent) 1 2 3 169 170 2 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 ------------------------------------------------------------------------ 186 Benchmark Run: Fri Jan 14 2011 14:11:59 - 14:41:26 187 2 CPUs in system; running 1 parallel copy of tests 188 189 Dhrystone 2 using register variables 2264000.6 lps (10.0 s, 7 samples) 190 Double-Precision Whetstone 507.0 MWIPS (10.1 s, 7 samples) 191 Execl Throughput 796.7 lps (30.0 s, 2 samples) 192 File Copy 1024 bufsize 2000 maxblocks 110924.1 KBps (30.1 s, 2 samples) 193 File Copy 256 bufsize 500 maxblocks 32600.5 KBps (30.1 s, 2 samples) 194 File Copy 4096 bufsize 8000 maxblocks 284236.5 KBps (30.0 s, 2 samples) 195 Pipe Throughput 301672.5 lps (10.0 s, 7 samples) 196 Pipe-based Context Switching 29475.3 lps (10.0 s, 7 samples) 197 Process Creation 3124.6 lps (30.0 s, 2 samples) 198 Shell Scripts (1 concurrent) 1753.0 lpm (60.0 s, 2 samples) 199 Shell Scripts (8 concurrent) 305.9 lpm (60.1 s, 2 samples) 200 System Call Overhead 592781.7 lps (10.0 s, 7 samples) 201 202 System Benchmarks Index Values BASELINE RESULT INDEX 203 Dhrystone 2 using register variables 116700.0 2264000.6 194.0 204 Double-Precision Whetstone 55.0 507.0 92.2 205 Execl Throughput 43.0 796.7 185.3 206 File Copy 1024 bufsize 2000 maxblocks 3960.0 110924.1 280.1 207 File Copy 256 bufsize 500 maxblocks 1655.0 32600.5 197.0 208 File Copy 4096 bufsize 8000 maxblocks 5800.0 284236.5 490.1 209 Pipe Throughput 12440.0 301672.5 242.5 210 Pipe-based Context Switching 4000.0 29475.3 73.7 211 Process Creation 126.0 3124.6 248.0 212 Shell Scripts (1 concurrent) 42.4 1753.0 413.4 213 Shell Scripts (8 concurrent) 6.0 305.9 509.8 214 System Call Overhead 15000.0 592781.7 395.2 215 ======== 216 System Benchmarks Index Score 238.0 217 218 ------------------------------------------------------------------------ 219 Benchmark Run: Fri Jan 14 2011 14:41:26 - 15:09:23 220 2 CPUs in system; running 2 parallel copies of tests 221 222 Dhrystone 2 using register variables 3411919.6 lps (10.0 s, 7 samples) 223 Double-Precision Whetstone 964.3 MWIPS (10.1 s, 7 samples) 224 Execl Throughput 2053.5 lps (30.0 s, 2 samples) 225 File Copy 1024 bufsize 2000 maxblocks 158308.0 KBps (30.0 s, 2 samples) 226 File Copy 256 bufsize 500 maxblocks 46249.5 KBps (30.0 s, 2 samples) 227 File Copy 4096 bufsize 8000 maxblocks 389881.9 KBps (30.0 s, 2 samples) 228 Pipe Throughput 410193.1 lps (10.0 s, 7 samples) 229 Pipe-based Context Switching 113780.0 lps (10.0 s, 7 samples) 230 Process Creation 7609.0 lps (30.0 s, 2 samples) 231 Shell Scripts (1 concurrent) 2355.0 lpm (60.0 s, 2 samples) 232 Shell Scripts (8 concurrent) 308.1 lpm (60.2 s, 2 samples) 233 System Call Overhead 1057063.2 lps (10.0 s, 7 samples) 234 235 System Benchmarks Index Values BASELINE RESULT INDEX 236 Dhrystone 2 using register variables 116700.0 3411919.6 292.4 237 Double-Precision Whetstone 55.0 964.3 175.3 238 Execl Throughput 43.0 2053.5 477.6 239 File Copy 1024 bufsize 2000 maxblocks 3960.0 158308.0 399.8 240 File Copy 256 bufsize 500 maxblocks 1655.0 46249.5 279.5 241 File Copy 4096 bufsize 8000 maxblocks 5800.0 389881.9 672.2 242 Pipe Throughput 12440.0 410193.1 329.7 243 Pipe-based Context Switching 4000.0 113780.0 284.5 244 Process Creation 126.0 7609.0 603.9 245 Shell Scripts (1 concurrent) 42.4 2355.0 555.4 246 Shell Scripts (8 concurrent) 6.0 308.1 513.5 247 System Call Overhead 15000.0 1057063.2 704.7 248 ======== 249 System Benchmarks Index Score 407.4 250 251 """ 252