1*9c5db199SXin Liimport os, re 2*9c5db199SXin Lifrom autotest_lib.client.bin import test, os_dep, utils 3*9c5db199SXin Li 4*9c5db199SXin Li 5*9c5db199SXin Lidef convert_size(values): 6*9c5db199SXin Li values = values.split(':') 7*9c5db199SXin Li size = values[0] 8*9c5db199SXin Li if len(values) > 1: 9*9c5db199SXin Li chunk = values[1] 10*9c5db199SXin Li else: 11*9c5db199SXin Li chunk = 0 12*9c5db199SXin Li if size.endswith('G') or size.endswith('g'): 13*9c5db199SXin Li size = int(size[:-1]) * 2**30 14*9c5db199SXin Li else: 15*9c5db199SXin Li if size.endswith('M') or size.endswith('m'): 16*9c5db199SXin Li size = int(size[:-1]) 17*9c5db199SXin Li size = int(size) * 2**20 18*9c5db199SXin Li if chunk: 19*9c5db199SXin Li if chunk.endswith('K') or chunk.endswith('k'): 20*9c5db199SXin Li chunk = int(chunk[:-1]) * 2**10 21*9c5db199SXin Li else: 22*9c5db199SXin Li chunk = int(chunk) 23*9c5db199SXin Li return [size, chunk] 24*9c5db199SXin Li 25*9c5db199SXin Li 26*9c5db199SXin Liclass bonnie(test.test): 27*9c5db199SXin Li version = 1 28*9c5db199SXin Li 29*9c5db199SXin Li def initialize(self): 30*9c5db199SXin Li self.job.require_gcc() 31*9c5db199SXin Li self.results = [] 32*9c5db199SXin Li 33*9c5db199SXin Li # http://www.coker.com.au/bonnie++/bonnie++-1.03a.tgz 34*9c5db199SXin Li def setup(self, tarball = 'bonnie++-1.03a.tgz'): 35*9c5db199SXin Li tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) 36*9c5db199SXin Li utils.extract_tarball_to_dir(tarball, self.srcdir) 37*9c5db199SXin Li os.chdir(self.srcdir) 38*9c5db199SXin Li 39*9c5db199SXin Li os_dep.command('g++') 40*9c5db199SXin Li utils.system('patch -p1 < ../bonnie++-1.03a-gcc43.patch') 41*9c5db199SXin Li utils.configure() 42*9c5db199SXin Li utils.make() 43*9c5db199SXin Li 44*9c5db199SXin Li 45*9c5db199SXin Li def run_once(self, dir=None, extra_args='', user='root'): 46*9c5db199SXin Li if not dir: 47*9c5db199SXin Li dir = self.tmpdir 48*9c5db199SXin Li 49*9c5db199SXin Li # if the user specified a -n we will use that 50*9c5db199SXin Li if '-n' not in extra_args: 51*9c5db199SXin Li extra_args += ' -n 2048' 52*9c5db199SXin Li args = '-d ' + dir + ' -u ' + user + ' ' + extra_args 53*9c5db199SXin Li cmd = self.srcdir + '/bonnie++ ' + args 54*9c5db199SXin Li 55*9c5db199SXin Li self.results.append(utils.system_output(cmd, retain_output=True)) 56*9c5db199SXin Li 57*9c5db199SXin Li 58*9c5db199SXin Li def postprocess(self): 59*9c5db199SXin Li strip_plus = lambda s: re.sub(r"^\++$", "0", s) 60*9c5db199SXin Li 61*9c5db199SXin Li keys = ('size', 'chnk', 'seqout_perchr_ksec', 62*9c5db199SXin Li 'seqout_perchr_pctcp', 'seqout_perblk_ksec', 63*9c5db199SXin Li 'seqout_perblk_pctcp', 'seqout_rewrite_ksec', 64*9c5db199SXin Li 'seqout_rewrite_pctcp', 'seqin_perchr_ksec', 65*9c5db199SXin Li 'seqin_perchr_pctcp', 'seqin_perblk_ksec', 66*9c5db199SXin Li 'seqin_perblk_pctcp', 'rand_ksec', 'rand_pctcp', 'files', 67*9c5db199SXin Li 'seqcreate_create_ksec', 'seqcreate_create_pctcp', 68*9c5db199SXin Li 'seqcreate_read_ksec', 'seqcreate_read_pctcp', 69*9c5db199SXin Li 'seqcreate_delete_ksec', 'seqcreate_delete_pctcp', 70*9c5db199SXin Li 'randreate_create_ksec', 'randcreate_create_pctcp', 71*9c5db199SXin Li 'randcreate_read_ksec', 'randcreate_read_pctcp', 72*9c5db199SXin Li 'randcreate_delete_ksec', 'randcreate_delete_pctcp') 73*9c5db199SXin Li 74*9c5db199SXin Li for line in self.results: 75*9c5db199SXin Li if line.count(',') != 26: 76*9c5db199SXin Li continue 77*9c5db199SXin Li fields = line.split(',') 78*9c5db199SXin Li fields = [strip_plus(f) for f in fields] 79*9c5db199SXin Li fields = convert_size(fields[1]) + fields[2:] 80*9c5db199SXin Li 81*9c5db199SXin Li self.write_perf_keyval(dict(zip(keys,fields))) 82