def _Run(benchmark_spec): """Runs cloudharmony iperf from cloudharmony harness.""" vm_groups = benchmark_spec.vm_groups client = vm_groups['client'][0] servers = vm_groups['server'] ports = list(range(_PORT, _PORT + _IPERF_CONCURRENCY.value)) ports_str = ':'.join([str(port) for port in ports]) server_ports = [f'{server.internal_ip}:{ports_str}' for server in servers] endpoints = '' for endpoint in server_ports: endpoints += f' --iperf_server {endpoint}' metadata = { 'iperf_server_instance_id': servers[0].machine_type, 'iperf_server_region': FLAGS.zone[0], 'meta_instance_id': client.machine_type, 'iperf_time': _IPERF_TIME.value, 'iperf_warmup': _IPERF_WARMUP.value, 'iperf_test': _IPERF_TEST.value, } if _IPERF_PARALLEL.value: metadata['iperf_parallel'] = _IPERF_PARALLEL.value if _IPERF_BANDWIDTH.value: metadata['iperf_bandwidth'] = _IPERF_BANDWIDTH.value if _IPERF_ZEROCOPY.value: metadata['iperf_zerocopy'] = True metadata['tcp_bw_file'] = _BW_SCRATCH_FILE ch_warm_up_metadata = cloud_harmony_util.GetCommonMetadata(metadata) cmd_path = posixpath.join('iperf', 'run.sh') # Do a warmup tcp run (even if test is udp) warm_up_cmd = f'{cmd_path} {endpoints} {ch_warm_up_metadata} --wkhtml_xvfb' client.RobustRemoteCommand(warm_up_cmd) if _IPERF_TEST.value == UDP: metadata['iperf_reverse'] = True metadata['iperf_udp'] = True metadata['skip_bandwidth_graphs'] = True ch_metadata = cloud_harmony_util.GetCommonMetadata(metadata) cmd = (f'{cmd_path} {endpoints} {ch_metadata} --wkhtml_xvfb --verbose') client.RobustRemoteCommand(cmd) cmd_path = posixpath.join('iperf', 'save.sh') save_command = (f'sudo {cmd_path} ') if FLAGS.ch_store_results: save_command += cloud_harmony_util.GetSaveCommand() client.RemoteCommand(f'{save_command}') return cloud_harmony_util.ParseCsvResultsIntoMetadata(client, OUTPUT)
def _Run(benchmark_spec, test): """Runs cloudharmony network and reports the results.""" vm_groups = benchmark_spec.vm_groups metadata = { 'test_service_type': FLAGS.ch_network_test_service_type, 'test': test, 'throughput_size': FLAGS.ch_network_throughput_size, 'throughput_threads': FLAGS.ch_network_throughput_threads, 'throughput_samples': FLAGS.ch_network_throughput_samples, 'tcp_samples': FLAGS.ch_network_tcp_samples, } client = vm_groups['client'][0] endpoints = '' if FLAGS.ch_network_test_service_type == COMPUTE: vms = vm_groups['server'] endpoints = ' '.join( [f'--test_endpoint={vm.internal_ip}' for vm in vms]) _AddComputeMetadata(client, vms[0], metadata) elif FLAGS.ch_network_test_service_type == STORAGE: http_url = f'http://{benchmark_spec.bucket}.storage.googleapis.com/probe' endpoints = f'--test_endpoint={http_url}' _AddStorageMetadata(client, metadata) elif FLAGS.ch_network_test_service_type == DNS: vms = vm_groups['server'] # use GCP zonal internal DNS, # but maybe should add domain to vm's data attributes? endpoints = ' '.join([ f'--test_endpoint={vm.name}.{vm.zone}.c.{vm.project}.internal' for vm in vms ]) _AddComputeMetadata(client, vms[0], metadata) if FLAGS.ch_network_throughput_https: metadata['throughput_https'] = True if FLAGS.ch_network_throughput_small_file: metadata['throughput_small_file'] = True if FLAGS.ch_network_throughput_time: metadata['throughput_time'] = True if FLAGS.ch_network_throughput_slowest_thread: metadata['throughput_slowest_thread'] = True if FLAGS.ch_network_test == DNS: metadata['dns_recursive'] = True if FLAGS.ch_network_test in ['rtt', 'ssl', 'ttfb']: metadata['throughput_time'] = True metadata = cloud_harmony_util.GetCommonMetadata(metadata) cmd_path = posixpath.join(cloud_harmony_network.INSTALL_PATH, 'run.sh') outdir = vm_util.VM_TMP_DIR cmd = f'sudo {cmd_path} {endpoints} {metadata} --output={outdir} --verbose' client.RobustRemoteCommand(cmd) save_command = posixpath.join(cloud_harmony_network.INSTALL_PATH, 'save.sh') client.RemoteCommand(f'{save_command} {outdir}') cloud_harmony_metadata = cloud_harmony_util.ParseCsvResultsIntoMetadata( client, OUTPUT) return ParseOutput(cloud_harmony_metadata)
def test_GetCommonMetadata(self): no_override = cloud_harmony_util.GetCommonMetadata() expected_no_override = ('--meta_compute_service Google Compute Engine ' '--meta_compute_service_id google:compute ' '--meta_instance_id n1-standard-2 ' '--meta_provider Google Cloud Platform ' '--meta_provider_id google ' '--meta_region us-east3 ' '--meta_zone us-east3 ' '--meta_test_id None') self.assertEqual(no_override, expected_no_override) expected_override = ('--meta_compute_service Google Compute Engine ' '--meta_compute_service_id google:compute ' '--meta_instance_id n1-standard-8 ' '--meta_provider Google Cloud Platform ' '--meta_provider_id google ' '--meta_region us-east3 ' '--meta_zone us-east3 ' '--meta_test_id None') override = cloud_harmony_util.GetCommonMetadata( {'meta_instance_id': 'n1-standard-8'}) self.assertEqual(override, expected_override)