예제 #1
0
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)
예제 #2
0
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