Home | History | Annotate | Download | only in unixbench
      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 unixbench(test.test):
      7     version = 2
      8 
      9     def initialize(self):
     10         self.job.require_gcc()
     11         self.err = None
     12 
     13 
     14     # http://www.tux.org/pub/tux/niemi/unixbench/unixbench-4.1.0.tgz
     15     def setup(self, tarball = 'unixbench-4.1.0.tar.bz2'):
     16         tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
     17         utils.extract_tarball_to_dir(tarball, self.srcdir)
     18         os.chdir(self.srcdir)
     19 
     20         utils.system('patch -p1 < ../unixbench.patch')
     21         utils.system('patch -p1 < ../Makefile.patch')
     22         utils.make()
     23         utils.system('rm pgms/select')
     24 
     25 
     26     def run_once(self, args='', stepsecs=0):
     27         vars = ('TMPDIR=\"%s\" RESULTDIR=\"%s\" FLAVOR=Linux' %
     28                (self.tmpdir, self.resultsdir))
     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 
     36         os.chdir(self.srcdir)
     37         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)
     46 
     47         report_path = os.path.join(self.resultsdir, 'report')
     48         self.report_data = open(report_path).readlines()[9:]
     49 
     50 
     51     def cleanup(self):
     52         # check err string and possible throw
     53         if self.err is not None:
     54             raise error.TestError(self.err)
     55 
     56 
     57     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])
     62             if self.err is None:
     63                 self.err = key
     64             else:
     65                 self.err = self.err + " " + key
     66             return True
     67         else:
     68             return False
     69 
     70 
     71     def postprocess_iteration(self):
     72         keyval = {}
     73         for line in self.report_data:
     74             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])
     86                 key = re.sub('\W', '', key)
     87                 value = words[-6]
     88                 keyval[key] = value
     89         for line in self.report_data:
     90             if 'FINAL SCORE' in line:
     91                 keyval['score'] = line.split()[-1]
     92                 break
     93         self.write_perf_keyval(keyval)
     94 
     95 
     96 """ 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
    105 Dhrystone 2 using register variables     7918001.7 lps   (10.0 secs, 10 samples)
    106 System Call Overhead                     1427272.7 lps   (10.0 secs, 10 samples)
    107 Process Creation                          11508.6 lps   (30.0 secs, 3 samples)
    108 Execl Throughput                           4159.7 lps   (29.7 secs, 3 samples)
    109 File Read 1024 bufsize 2000 maxblocks    1708109.0 KBps  (30.0 secs, 3 samples)
    110 File Write 1024 bufsize 2000 maxblocks   788024.0 KBps  (30.0 secs, 3 samples)
    111 File Copy 1024 bufsize 2000 maxblocks    452986.0 KBps  (30.0 secs, 3 samples)
    112 File Read 256 bufsize 500 maxblocks      508752.0 KBps  (30.0 secs, 3 samples)
    113 File Write 256 bufsize 500 maxblocks     214772.0 KBps  (30.0 secs, 3 samples)
    114 File Copy 256 bufsize 500 maxblocks      143989.0 KBps  (30.0 secs, 3 samples)
    115 File Read 4096 bufsize 8000 maxblocks    2626923.0 KBps  (30.0 secs, 3 samples)
    116 File Write 4096 bufsize 8000 maxblocks   1175070.0 KBps  (30.0 secs, 3 samples)
    117 File Copy 4096 bufsize 8000 maxblocks    793041.0 KBps  (30.0 secs, 3 samples)
    118 Shell Scripts (1 concurrent)               4417.4 lpm   (60.0 secs, 3 samples)
    119 Shell Scripts (8 concurrent)               1109.0 lpm   (60.0 secs, 3 samples)
    120 Shell Scripts (16 concurrent)               578.3 lpm   (60.0 secs, 3 samples)
    121 Arithmetic Test (type = short)           1843690.0 lps   (10.0 secs, 3 samples)
    122 Arithmetic Test (type = int)             1873615.8 lps   (10.0 secs, 3 samples)
    123 Arithmetic Test (type = long)            1888345.9 lps   (10.0 secs, 3 samples)
    124 Arithmetic Test (type = float)           616260.3 lps   (10.0 secs, 3 samples)
    125 Arithmetic Test (type = double)          615942.1 lps   (10.0 secs, 3 samples)
    126 Arithoh                                  18864899.5 lps   (10.0 secs, 3 samples)
    127 Dc: sqrt(2) to 99 decimal places         161726.0 lpm   (30.0 secs, 3 samples)
    128 Recursion Test--Tower of Hanoi            89229.3 lps   (20.0 secs, 3 samples)
    129 
    130 
    131                      INDEX VALUES
    132 TEST                                        BASELINE     RESULT      INDEX
    133 
    134 Dhrystone 2 using register variables        116700.0  7918001.7      678.5
    135 Double-Precision Whetstone                      55.0     1948.2      354.2
    136 Execl Throughput                                43.0     4159.7      967.4
    137 File Copy 1024 bufsize 2000 maxblocks         3960.0   452986.0     1143.9
    138 File Copy 256 bufsize 500 maxblocks           1655.0   143989.0      870.0
    139 File Copy 4096 bufsize 8000 maxblocks         5800.0   793041.0     1367.3
    140 Pipe Throughput                              12440.0  1048491.9      842.8
    141 Pipe-based Context Switching                  4000.0   300778.3      751.9
    142 Process Creation                               126.0    11508.6      913.4
    143 Shell Scripts (8 concurrent)                     6.0     1109.0     1848.3
    144 System Call Overhead                         15000.0  1427272.7      951.5
    145                                                                  =========
    146      FINAL SCORE                                                     902.1
    147 """
    148