#! /usr/bin/env python import os, sys, tempfile, time import parse_aiod dsfs = 'sdy sdz sdaa sdab sdac sdad sdae sdaf sdag sdah sdai sdaj'.split() def run_aiod(bs, dsfs, rnd): def gen_aiod_cmd(bs, dsfs): aiod_cmd= '/usr/local/bin/aiod' opts = '-A 256 -D -I -i 10000000 -l -v' xopts = '-R -b %dk -T 30' % bs cmd = '%s %s %s' % (aiod_cmd, opts, xopts) if rnd: cmd = '%s -z' % cmd for path in ['/dev/%s' % dsf for dsf in dsfs]: cmd = '%s %s' % (cmd, path) return cmd (fd, fn) = tempfile.mkstemp() fo = os.fdopen(fd, 'w') pid = os.fork() if pid == 0: os.dup2(fo.fileno(), sys.stdout.fileno()) os.dup2(fo.fileno(), sys.stderr.fileno()) fo.close() cmd = gen_aiod_cmd(bs, dsfs).split(None) os.execvp(cmd[0], cmd) sys.exit(1) else: fo.close() os.waitpid(pid, 0) pa = parse_aiod.parse_aiod(fn) mbps = pa.get_mb_per_sec() del pa os.unlink(fn) return mbps if __name__ == '__main__': def start_bt(dir, dsfs): if os.path.exists(dir): os.system('/bin/rm -rf ' + dir) os.mkdir(dir) cmd = '/usr/local/bin/blktrace -D %s -b 1024 -n 6' % dir for dsf in dsfs: cmd = '%s /dev/%s' % (cmd, dsf) pid = os.fork() if pid > 0: time.sleep(30) return pid fo = open('%s/bt.out' % dir, 'w') os.dup2(fo.fileno(), sys.stdout.fileno()) os.dup2(fo.fileno(), sys.stderr.fileno()) fo.close() cmd = cmd.split(None) os.execvp(cmd[0], cmd) sys.exit(1) def stop_bt(pid): os.kill(pid, 1) os.waitpid(pid, 0) #bss = [ 4, 8, 16, 32, 64, 128, 256 ] bss = [ 32, 64, 128 ] print '%3s:' % 'run', for bs in bss: print '%6d ' % bs, print '\n----', for bs in bss: print '%6s ' % '------', print '' for run in range(0, 3): print '%3d:' % run, sys.stdout.flush() for bs in bss: pid = start_bt('%03dk_%03d' % (bs, run), dsfs) print '%6.2f ' % run_aiod(bs, dsfs, False), sys.stdout.flush() stop_bt(pid) print '' sys.exit(0)