xref: /aosp_15_r20/external/autotest/client/tests/bonnie/bonnie.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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