2 from autotest_lib
.client
.bin
import test
, os_dep
, utils
5 def convert_size(values
):
6 values
= values
.split(':')
12 if size
.endswith('G') or size
.endswith('g'):
13 size
= int(size
[:-1]) * 2**30
15 if size
.endswith('M') or size
.endswith('m'):
17 size
= int(size
) * 2**20
19 if chunk
.endswith('K') or chunk
.endswith('k'):
20 chunk
= int(chunk
[:-1]) * 2**10
26 class bonnie(test
.test
):
30 self
.job
.require_gcc()
33 # http://www.coker.com.au/bonnie++/bonnie++-1.03a.tgz
34 def setup(self
, tarball
= 'bonnie++-1.03a.tgz'):
35 tarball
= utils
.unmap_url(self
.bindir
, tarball
, self
.tmpdir
)
36 utils
.extract_tarball_to_dir(tarball
, self
.srcdir
)
40 utils
.system('patch -p1 < ../bonnie++-1.03a-gcc43.patch')
45 def run_once(self
, dir=None, extra_args
='', user
='root'):
49 # if the user specified a -n we will use that
50 if '-n' not in extra_args
:
51 extra_args
+= ' -n 2048'
52 args
= '-d ' + dir + ' -u ' + user
+ ' ' + extra_args
53 cmd
= self
.srcdir
+ '/bonnie++ ' + args
55 self
.results
.append(utils
.system_output(cmd
, retain_output
=True))
58 def postprocess(self
):
59 strip_plus
= lambda s
: re
.sub(r
"^\++$", "0", s
)
61 keys
= ('size', 'chnk', 'seqout_perchr_ksec',
62 'seqout_perchr_pctcp', 'seqout_perblk_ksec',
63 'seqout_perblk_pctcp', 'seqout_rewrite_ksec',
64 'seqout_rewrite_pctcp', 'seqin_perchr_ksec',
65 'seqin_perchr_pctcp', 'seqin_perblk_ksec',
66 'seqin_perblk_pctcp', 'rand_ksec', 'rand_pctcp', 'files',
67 'seqcreate_create_ksec', 'seqcreate_create_pctcp',
68 'seqcreate_read_ksec', 'seqcreate_read_pctcp',
69 'seqcreate_delete_ksec', 'seqcreate_delete_pctcp',
70 'randreate_create_ksec', 'randcreate_create_pctcp',
71 'randcreate_read_ksec', 'randcreate_read_pctcp',
72 'randcreate_delete_ksec', 'randcreate_delete_pctcp')
74 for line
in self
.results
:
75 if line
.count(',') != 26:
77 fields
= line
.split(',')
78 fields
= [strip_plus(f
) for f
in fields
]
79 fields
= convert_size(fields
[1]) + fields
[2:]
81 self
.write_perf_keyval(dict(zip(keys
,fields
)))