示例#1
0
def Run(benchmark_spec):
    """Spawn fio on vm(s) and gather results."""
    fio_exe = fio.GetFioExec()
    default_job_file_contents = GetFileAsString(data.ResourcePath('fio.job'))
    vms = benchmark_spec.vms
    samples = []

    path = REMOTE_JOB_FILE_PATH
    samples_list = vm_util.RunThreaded(
        lambda vm: RunWithExec(vm, fio_exe, path, default_job_file_contents),
        vms)
    for i, _ in enumerate(samples_list):
        for item in samples_list[i]:
            item.metadata['machine_instance'] = i
        samples.extend(samples_list[i])

    if FLAGS.fio_write_against_multiple_clients:
        metrics = collections.defaultdict(list)
        if not metrics:
            return samples
        for item in samples:
            # example metric: 'filestore-bandwidth:write:bandwidth'
            metrics[item.metric.split(':', 1)[-1]].append(item.value)

        samples.append(
            sample.Sample('Total_write_throughput',
                          sum(metrics['write:bandwidth']), 'KB/s'))
        samples.append(
            sample.Sample('Total_write_iops', sum(metrics['write:iops']),
                          'ops'))
        earliest_start = min(metrics['start_time'])
        latest_start = max(metrics['start_time'])
        earliest_end = min(metrics['end_time'])
        latest_end = max(metrics['end_time'])
        # Invalid run if the start and end times don't overlap 95%.
        nonoverlap_percent = (latest_end - earliest_end + latest_start -
                              earliest_start) / (earliest_end - latest_start)
        valid_run = (nonoverlap_percent < 0.05)
        for item in samples:
            item.metadata['valid_run'] = valid_run
            item.metadata['nonoverlap_percentage'] = nonoverlap_percent
    for item in samples:
        item.metadata['fio_target_mode'] = FLAGS.fio_target_mode
        item.metadata['fio_fill_size'] = FLAGS.fio_fill_size
        item.metadata['fio_rng'] = FLAGS.fio_rng

    return samples
def _RunFio(vm, fio_params, metadata):
    """Run fio.

  Args:
    vm: Virtual machine to run fio on.
    fio_params: fio parameters used to create the fio command to run.
    metadata: Metadata to add to the results.

  Returns:
    A list of sample.Sample objects
  """
    stdout, _ = vm.RemoteCommand('sudo {0} {1}'.format(fio.GetFioExec(),
                                                       fio_params))
    job_file_contents = fio.FioParametersToJob(fio_params)
    samples = fio.ParseResults(job_file_contents,
                               json.loads(stdout),
                               base_metadata=metadata,
                               skip_latency_individual_stats=True)
    return samples
def Run(benchmark_spec):
    fio_exe = fio.GetFioExec()
    default_job_file_contents = GetFileAsString(data.ResourcePath('fio.job'))
    return RunWithExec(benchmark_spec, fio_exe, REMOTE_JOB_FILE_PATH,
                       default_job_file_contents)
def Prepare(benchmark_spec):
    exec_path = fio.GetFioExec()
    return PrepareWithExec(benchmark_spec, exec_path)
def Prepare(benchmark_spec):
    exec_path = fio.GetFioExec()
    vms = benchmark_spec.vms
    vm_util.RunThreaded(lambda vm: PrepareWithExec(vm, exec_path), vms)