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)