Skip to content

Commit bcfd1b0

Browse files
andyz422copybara-github
authored andcommitted
Enable warmup runs for all netperf benchmarks. Previously, warmup runs were only performed for TCP_RR.
PiperOrigin-RevId: 937464266
1 parent b250bf9 commit bcfd1b0

2 files changed

Lines changed: 51 additions & 15 deletions

File tree

perfkitbenchmarker/linux_benchmarks/netperf_benchmark.py

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,8 @@
5555
flags.DEFINE_integer(
5656
'netperf_warmup_test_length',
5757
60,
58-
'The duration of the warmup run in seconds. If --netperf_benchmarks'
59-
' contains TCP_RR, a warmup run of this duration will be performed before'
60-
' the benchmark runs. If 0, no warmup is done.',
58+
'The duration of the warmup run in seconds. If greater than 0, a warmup '
59+
'run of this duration will be performed before each benchmark run.',
6160
lower_bound=0,
6261
)
6362
flags.DEFINE_bool(
@@ -241,13 +240,6 @@ def Prepare(benchmark_spec):
241240
],
242241
2,
243242
)
244-
if (
245-
TCP_RR in FLAGS.netperf_benchmarks
246-
and FLAGS.netperf_warmup_test_length > 0
247-
):
248-
# If TCP_RR is requested, do a warmup run as 1st run performance could be
249-
# low due to initial flow setup issue.
250-
RunClientServerVMs(client_vm, server_vm, FLAGS.netperf_warmup_test_length)
251243

252244

253245
def PrepareClientVM(client_vm):
@@ -526,12 +518,8 @@ def RunNetperf(
526518
'netperf_test_length': test_length,
527519
'sending_thread_count': num_streams,
528520
'max_iter': FLAGS.netperf_max_iter or 1,
521+
'netperf_warmup_test_length': FLAGS.netperf_warmup_test_length,
529522
}
530-
if (
531-
TCP_RR in FLAGS.netperf_benchmarks
532-
and FLAGS.netperf_warmup_test_length > 0
533-
):
534-
metadata['netperf_warmup_test_length'] = FLAGS.netperf_warmup_test_length
535523

536524
remote_cmd_list = []
537525
assert server_ips, 'Server VM does not have an IP to use for netperf.'
@@ -803,6 +791,20 @@ def RunClientServerVMs(client_vm, server_vm, test_length=None):
803791

804792
for netperf_benchmark in FLAGS.netperf_benchmarks:
805793
if vm_util.ShouldRunOnExternalIpAddress():
794+
if FLAGS.netperf_warmup_test_length > 0:
795+
logging.info(
796+
'Running warmup for %s for %d seconds',
797+
netperf_benchmark,
798+
FLAGS.netperf_warmup_test_length,
799+
)
800+
RunNetperf(
801+
client_vm,
802+
netperf_benchmark,
803+
server_vm.GetExternalIPs(),
804+
num_streams,
805+
[client_vm.GetInternalIPs()[0]],
806+
FLAGS.netperf_warmup_test_length,
807+
)
806808
external_ip_results = RunNetperf(
807809
client_vm,
808810
netperf_benchmark,
@@ -821,6 +823,20 @@ def RunClientServerVMs(client_vm, server_vm, test_length=None):
821823
results.extend(external_ip_results)
822824

823825
if vm_util.ShouldRunOnInternalIpAddress(client_vm, server_vm):
826+
if FLAGS.netperf_warmup_test_length > 0:
827+
logging.info(
828+
'Running warmup for %s for %d seconds',
829+
netperf_benchmark,
830+
FLAGS.netperf_warmup_test_length,
831+
)
832+
RunNetperf(
833+
client_vm,
834+
netperf_benchmark,
835+
server_vm.GetInternalIPs(),
836+
num_streams,
837+
client_vm.GetInternalIPs(),
838+
FLAGS.netperf_warmup_test_length,
839+
)
824840
internal_ip_results = RunNetperf(
825841
client_vm,
826842
netperf_benchmark,

tests/linux_benchmarks/netperf_benchmark_test.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def setUp(self):
5454
self.should_run_internal = p.start()
5555
self.addCleanup(p.stop)
5656
FLAGS.netperf_enable_histograms = False
57+
FLAGS.netperf_warmup_test_length = 0
5758

5859
def _ConfigureIpTypes(self, run_external=True, run_internal=True):
5960
self.should_run_external.return_value = run_external
@@ -244,6 +245,25 @@ def testMultiStreams(self):
244245
[i[:3] for i in result],
245246
)
246247

248+
@flagsaver.flagsaver(netperf_benchmarks=['TCP_STREAM'])
249+
@flagsaver.flagsaver(netperf_num_streams=[1])
250+
@flagsaver.flagsaver(netperf_warmup_test_length=5)
251+
def testWarmup(self):
252+
self._ConfigureIpTypes(run_external=False, run_internal=True)
253+
vm_spec = mock.MagicMock(spec=benchmark_spec.BenchmarkSpec)
254+
vm_spec.vms = [mock.MagicMock(), mock.MagicMock()]
255+
vm_spec.vms[0].RobustRemoteCommand.side_effect = [
256+
(self.expected_stdout[0], ''), # Warmup
257+
(self.expected_stdout[0], ''), # Actual
258+
]
259+
vm_spec.vms[1].GetInternalIPs.return_value = ['test_ip']
260+
vm_spec.vms[0].GetInternalIPs.return_value = ['test_ip']
261+
unused_run_result = netperf_benchmark.Run(vm_spec)
262+
self.assertEqual(vm_spec.vms[0].RobustRemoteCommand.call_count, 2)
263+
call_args_list = vm_spec.vms[0].RobustRemoteCommand.call_args_list
264+
self.assertIn('-l 5', call_args_list[0][0][0])
265+
self.assertIn('-l 60', call_args_list[1][0][0])
266+
247267

248268
if __name__ == '__main__':
249269
unittest.main()

0 commit comments

Comments
 (0)