Skip to content

Commit 25e82b7

Browse files
tests: Add NIC passthrough performance test.
Add testcases for nttcp/iperf3/netperf for NIC device passthrough cases for host-guest and guest-guest scenarios. Signed-off-by: Smit Gardhariya <[email protected]>
1 parent 0ca2633 commit 25e82b7

File tree

2 files changed

+690
-8
lines changed

2 files changed

+690
-8
lines changed

microsoft/testsuites/performance/common.py

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ def perf_tcp_pps(
207207
test_type: str,
208208
server: Optional[RemoteNode] = None,
209209
client: Optional[RemoteNode] = None,
210+
run_with_internal_address: bool = False,
210211
) -> None:
211212
# Either server and client are set explicitly or we use the first two nodes
212213
# from the environment. We never combine the two options. We need to specify
@@ -226,6 +227,14 @@ def perf_tcp_pps(
226227
[lambda: client.tools[Netperf], lambda: server.tools[Netperf]] # type: ignore
227228
)
228229

230+
server_interface_ip: str = ""
231+
client_interface_ip: str = ""
232+
if run_with_internal_address:
233+
server_interface_ip = server.internal_address
234+
client_interface_ip = client.internal_address
235+
assert server_interface_ip, "Server Node: internal address is not set"
236+
assert client_interface_ip, "Client Node: internal address is not set"
237+
229238
cpu = client.tools[Lscpu]
230239
core_count = cpu.get_core_count()
231240
if "maxpps" == test_type:
@@ -235,9 +244,14 @@ def perf_tcp_pps(
235244
else:
236245
ports = range(30000, 30001)
237246
for port in ports:
238-
server_netperf.run_as_server(port)
247+
server_netperf.run_as_server(port, interface_ip=server_interface_ip)
239248
for port in ports:
240-
client_netperf.run_as_client_async(server.internal_address, core_count, port)
249+
client_netperf.run_as_client_async(
250+
server_ip=server.internal_address,
251+
core_count=core_count,
252+
port=port,
253+
interface_ip=client_interface_ip,
254+
)
241255
client_sar = client.tools[Sar]
242256
server_sar = server.tools[Sar]
243257
server_sar.get_statistics_async()
@@ -446,17 +460,33 @@ def perf_iperf(
446460
connections: List[int],
447461
buffer_length_list: List[int],
448462
udp_mode: bool = False,
463+
server: Optional[RemoteNode] = None,
464+
client: Optional[RemoteNode] = None,
465+
run_with_internal_address: bool = False,
449466
) -> None:
450-
environment = test_result.environment
451-
assert environment, "fail to get environment from testresult"
467+
if server is not None or client is not None:
468+
assert server is not None, "server need to be specified, if client is set"
469+
assert client is not None, "client need to be specified, if server is set"
470+
else:
471+
environment = test_result.environment
472+
assert environment, "fail to get environment from testresult"
473+
# set server and client from environment, if not set explicitly
474+
client = cast(RemoteNode, environment.nodes[0])
475+
server = cast(RemoteNode, environment.nodes[1])
452476

453-
client = cast(RemoteNode, environment.nodes[0])
454-
server = cast(RemoteNode, environment.nodes[1])
455477
client_iperf3, server_iperf3 = run_in_parallel(
456-
[lambda: client.tools[Iperf3], lambda: server.tools[Iperf3]]
478+
[lambda: client.tools[Iperf3], lambda: server.tools[Iperf3]] # type: ignore
457479
)
458480
test_case_name = inspect.stack()[1][3]
459481
iperf3_messages_list: List[Any] = []
482+
server_interface_ip = ""
483+
client_interface_ip = ""
484+
if run_with_internal_address:
485+
server_interface_ip = server.internal_address
486+
client_interface_ip = client.internal_address
487+
assert server_interface_ip, "Server Node: internal address is not set"
488+
assert client_interface_ip, "Client Node: internal address is not set"
489+
460490
if udp_mode:
461491
for node in [client, server]:
462492
ssh = node.tools[Ssh]
@@ -481,7 +511,13 @@ def perf_iperf(
481511
current_server_iperf_instances += 1
482512
server_iperf3_process_list.append(
483513
server_iperf3.run_as_server_async(
484-
current_server_port, "g", 10, True, True, False
514+
port=current_server_port,
515+
report_unit="g",
516+
report_periodic=10,
517+
use_json_format=True,
518+
one_connection_only=True,
519+
daemon=False,
520+
interface_ip=server_interface_ip,
485521
)
486522
)
487523
current_server_port += 1
@@ -502,6 +538,7 @@ def perf_iperf(
502538
parallel_number=num_threads_p,
503539
ip_version="4",
504540
udp_mode=udp_mode,
541+
client_ip=client_interface_ip,
505542
)
506543
)
507544
current_client_port += 1

0 commit comments

Comments
 (0)