def prepare_disks(mntdir, ndisks, ndirs, **kwargs): """Prepare disks """ fs = kwargs.get('fs', 'ext4') no_journal = kwargs.get('no_journal', False) # mount options. options = '' if fs == 'ext4': options = 'noatime,nodiratime' print('Preparing directories...{}'.format(mntdir)) if not os.path.exists(mntdir): os.makedirs(mntdir) osutil.umount_all(mntdir) for nram in range(ndisks): disk_path = '/dev/ram{}'.format(nram) mntpnt = os.path.join(mntdir, 'ram{}'.format(nram)) if not os.path.exists(mntpnt): os.makedirs(mntpnt) osutil.mount(disk_path, os.path.join(mntdir, 'ram{}'.format(nram)), format=fs, no_journal=no_journal, options=options) for dir_num in range(ndirs): dirpath = os.path.join(mntdir, 'ram{}'.format(nram), 'test{}'.format(dir_num)) os.makedirs(dirpath)
def run_filebench(workload, **kwargs): """Run filebench. """ ndisks = kwargs.get('ndisks', 4) ndirs = kwargs.get('ndirs', 1) basedir = kwargs.get('basedir', 'ramdisks') cpus = kwargs.get('cpus', '') nprocs = kwargs.get('nprocs', 1) nthreads = kwargs.get('nthreads', 1) output = kwargs.get('output', 'filebench') no_profile = kwargs.get('no_profile', False) affinity = kwargs.get('affinity', False) if cpus: set_cpus.set_cpus(cpus) lockstat = None procstat = None perf = None if not no_profile: lockstat = mfsbase.LockstatProfiler() procstat = mfsbase.ProcStatProfiler() perf = mfsbase.PerfProfiler(perf=PERF, **kwargs) else: lockstat = mfsbase.NonProfiler() procstat = mfsbase.NonProfiler() perf = mfsbase.NonProfiler() lockstat.start() procstat.start() result_file = output + '_results.txt' cmd = '{} run -w {} --disks {} --dirs {} -b {} -p {} -t {} -o {}' \ .format(__file__, workload, ndisks, ndirs, basedir, nprocs, nthreads, result_file) if affinity: cmd += ' --affinity' print(cmd) perf.start(cmd) procstat.stop() lockstat.stop() # Move PerfProfile.stop() to the last because it generates hunders of MBs # logs, which has significant impact to procstat and lockstat accuracy. perf.stop() if cpus: set_cpus.reset() procstat.dump(output + '_cpustat.txt') lockstat.dump(output + '_lockstat.txt') perf.dump(output + '_perf.txt') osutil.umount_all('ramdisks') return True