blob: e7f4917887e3d61c21b9002a2cca8a0139522697 [file] [log] [blame] [edit]
import os, re
from autotest_lib.client.bin import test, os_dep, utils
def convert_size(values):
values = values.split(':')
size = values[0]
if len(values) > 1:
chunk = values[1]
else:
chunk = 0
if size.endswith('G') or size.endswith('g'):
size = int(size[:-1]) * 2**30
else:
if size.endswith('M') or size.endswith('m'):
size = int(size[:-1])
size = int(size) * 2**20
if chunk:
if chunk.endswith('K') or chunk.endswith('k'):
chunk = int(chunk[:-1]) * 2**10
else:
chunk = int(chunk)
return [size, chunk]
class bonnie(test.test):
version = 1
def initialize(self):
self.job.require_gcc()
self.results = []
# http://www.coker.com.au/bonnie++/bonnie++-1.03a.tgz
def setup(self, tarball = 'bonnie++-1.03a.tgz'):
tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
utils.extract_tarball_to_dir(tarball, self.srcdir)
os.chdir(self.srcdir)
os_dep.command('g++')
utils.system('patch -p1 < ../bonnie++-1.03a-gcc43.patch')
utils.configure()
utils.make()
def run_once(self, dir=None, extra_args='', user='root'):
if not dir:
dir = self.tmpdir
# if the user specified a -n we will use that
if '-n' not in extra_args:
extra_args += ' -n 2048'
args = '-d ' + dir + ' -u ' + user + ' ' + extra_args
cmd = self.srcdir + '/bonnie++ ' + args
self.results.append(utils.system_output(cmd, retain_output=True))
def postprocess(self):
strip_plus = lambda s: re.sub(r"^\++$", "0", s)
keys = ('size', 'chnk', 'seqout_perchr_ksec',
'seqout_perchr_pctcp', 'seqout_perblk_ksec',
'seqout_perblk_pctcp', 'seqout_rewrite_ksec',
'seqout_rewrite_pctcp', 'seqin_perchr_ksec',
'seqin_perchr_pctcp', 'seqin_perblk_ksec',
'seqin_perblk_pctcp', 'rand_ksec', 'rand_pctcp', 'files',
'seqcreate_create_ksec', 'seqcreate_create_pctcp',
'seqcreate_read_ksec', 'seqcreate_read_pctcp',
'seqcreate_delete_ksec', 'seqcreate_delete_pctcp',
'randreate_create_ksec', 'randcreate_create_pctcp',
'randcreate_read_ksec', 'randcreate_read_pctcp',
'randcreate_delete_ksec', 'randcreate_delete_pctcp')
for line in self.results:
if line.count(',') != 26:
continue
fields = line.split(',')
fields = [strip_plus(f) for f in fields]
fields = convert_size(fields[1]) + fields[2:]
self.write_perf_keyval(dict(zip(keys,fields)))