From 31e530b86b7da2de6f2c2605bc7ee067b11ecf8c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 21:40:43 +0000 Subject: [PATCH 1/8] Initial plan From 1932c7d0816202a314c9b070b9f8e209e02a44eb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 21:49:48 +0000 Subject: [PATCH 2/8] Add UnifiedMessage support for NetworkUDPPerformanceMessage in iperf3 Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> --- lisa/tools/iperf3.py | 71 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/lisa/tools/iperf3.py b/lisa/tools/iperf3.py index 8751beda70..7ba83300e5 100644 --- a/lisa/tools/iperf3.py +++ b/lisa/tools/iperf3.py @@ -10,9 +10,12 @@ from lisa.executable import Tool from lisa.messages import ( + MetricRelativity, NetworkTCPPerformanceMessage, NetworkUDPPerformanceMessage, + TransportProtocol, create_perf_message, + send_unified_perf_message, ) from lisa.operating_system import Posix from lisa.tools import Cat @@ -427,6 +430,18 @@ def create_iperf_udp_performance_message( ) other_fields["send_buffer_size"] = Decimal(buffer_length) other_fields["connections_num"] = connections_num + + # Send unified performance messages + self.send_iperf_udp_unified_perf_messages( + tx_throughput_in_gbps=other_fields["tx_throughput_in_gbps"], + rx_throughput_in_gbps=other_fields["rx_throughput_in_gbps"], + data_loss=other_fields["data_loss"], + send_buffer_size=other_fields["send_buffer_size"], + connections_num=connections_num, + test_case_name=test_case_name, + test_result=test_result, + ) + return create_perf_message( NetworkUDPPerformanceMessage, self.node, @@ -435,6 +450,62 @@ def create_iperf_udp_performance_message( other_fields, ) + def send_iperf_udp_unified_perf_messages( + self, + tx_throughput_in_gbps: Decimal, + rx_throughput_in_gbps: Decimal, + data_loss: Decimal, + send_buffer_size: Decimal, + connections_num: int, + test_case_name: str, + test_result: "TestResult", + ) -> None: + """Send unified performance messages for UDP iperf3 metrics.""" + # Include connections_num in metric names to distinguish results + conn_suffix = f"_conn_{connections_num}" + + metrics = [ + { + "name": f"tx_throughput_in_gbps{conn_suffix}", + "value": float(tx_throughput_in_gbps), + "relativity": MetricRelativity.HigherIsBetter, + "unit": "Gbps", + }, + { + "name": f"rx_throughput_in_gbps{conn_suffix}", + "value": float(rx_throughput_in_gbps), + "relativity": MetricRelativity.HigherIsBetter, + "unit": "Gbps", + }, + { + "name": f"data_loss{conn_suffix}", + "value": float(data_loss), + "relativity": MetricRelativity.LowerIsBetter, + "unit": "%", + }, + { + "name": f"send_buffer_size{conn_suffix}", + "value": float(send_buffer_size), + "relativity": MetricRelativity.NA, + "unit": "bytes", + }, + ] + + tool = constants.NETWORK_PERFORMANCE_TOOL_IPERF + + for metric in metrics: + send_unified_perf_message( + node=self.node, + test_result=test_result, + test_case_name=test_case_name, + tool=tool, + metric_name=metric["name"], + metric_value=metric["value"], + metric_unit=metric.get("unit", ""), + metric_relativity=metric["relativity"], + protocol_type=TransportProtocol.Udp, + ) + def get_sender_bandwidth(self, result: str) -> Decimal: return self._get_bandwidth(result, self._sender_pattern) From af83f2e4ff74639cf651fcc587e31da5642eba1a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 02:00:26 +0000 Subject: [PATCH 3/8] Move connections_num from metric name to description field Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> --- lisa/tools/iperf3.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lisa/tools/iperf3.py b/lisa/tools/iperf3.py index 7ba83300e5..36387dd63c 100644 --- a/lisa/tools/iperf3.py +++ b/lisa/tools/iperf3.py @@ -461,33 +461,34 @@ def send_iperf_udp_unified_perf_messages( test_result: "TestResult", ) -> None: """Send unified performance messages for UDP iperf3 metrics.""" - # Include connections_num in metric names to distinguish results - conn_suffix = f"_conn_{connections_num}" - metrics = [ { - "name": f"tx_throughput_in_gbps{conn_suffix}", + "name": "tx_throughput_in_gbps", "value": float(tx_throughput_in_gbps), "relativity": MetricRelativity.HigherIsBetter, "unit": "Gbps", + "description": f"iperf3 UDP TX throughput with {connections_num} connections", }, { - "name": f"rx_throughput_in_gbps{conn_suffix}", + "name": "rx_throughput_in_gbps", "value": float(rx_throughput_in_gbps), "relativity": MetricRelativity.HigherIsBetter, "unit": "Gbps", + "description": f"iperf3 UDP RX throughput with {connections_num} connections", }, { - "name": f"data_loss{conn_suffix}", + "name": "data_loss", "value": float(data_loss), "relativity": MetricRelativity.LowerIsBetter, "unit": "%", + "description": f"iperf3 UDP data loss with {connections_num} connections", }, { - "name": f"send_buffer_size{conn_suffix}", + "name": "send_buffer_size", "value": float(send_buffer_size), "relativity": MetricRelativity.NA, "unit": "bytes", + "description": f"iperf3 UDP send buffer size with {connections_num} connections", }, ] @@ -502,6 +503,7 @@ def send_iperf_udp_unified_perf_messages( metric_name=metric["name"], metric_value=metric["value"], metric_unit=metric.get("unit", ""), + metric_description=metric.get("description", ""), metric_relativity=metric["relativity"], protocol_type=TransportProtocol.Udp, ) From 9ee7ea21533b3533d5dbd2dfaae95513c5db2bc8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 03:35:23 +0000 Subject: [PATCH 4/8] Fix line length violations in metric descriptions Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> --- lisa/tools/iperf3.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lisa/tools/iperf3.py b/lisa/tools/iperf3.py index 36387dd63c..3efa33216a 100644 --- a/lisa/tools/iperf3.py +++ b/lisa/tools/iperf3.py @@ -467,28 +467,39 @@ def send_iperf_udp_unified_perf_messages( "value": float(tx_throughput_in_gbps), "relativity": MetricRelativity.HigherIsBetter, "unit": "Gbps", - "description": f"iperf3 UDP TX throughput with {connections_num} connections", + "description": ( + f"iperf3 UDP TX throughput with {connections_num} " + f"connections" + ), }, { "name": "rx_throughput_in_gbps", "value": float(rx_throughput_in_gbps), "relativity": MetricRelativity.HigherIsBetter, "unit": "Gbps", - "description": f"iperf3 UDP RX throughput with {connections_num} connections", + "description": ( + f"iperf3 UDP RX throughput with {connections_num} " + f"connections" + ), }, { "name": "data_loss", "value": float(data_loss), "relativity": MetricRelativity.LowerIsBetter, "unit": "%", - "description": f"iperf3 UDP data loss with {connections_num} connections", + "description": ( + f"iperf3 UDP data loss with {connections_num} connections" + ), }, { "name": "send_buffer_size", "value": float(send_buffer_size), "relativity": MetricRelativity.NA, "unit": "bytes", - "description": f"iperf3 UDP send buffer size with {connections_num} connections", + "description": ( + f"iperf3 UDP send buffer size with {connections_num} " + f"connections" + ), }, ] From bf05093b986b2e75814b9257fffb0d951c2a8826 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 03:44:17 +0000 Subject: [PATCH 5/8] Pass connections_num as field parameter instead of in metric name or description Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> --- lisa/tools/iperf3.py | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/lisa/tools/iperf3.py b/lisa/tools/iperf3.py index 3efa33216a..98573efeb6 100644 --- a/lisa/tools/iperf3.py +++ b/lisa/tools/iperf3.py @@ -8,12 +8,14 @@ from retry import retry +from lisa import notifier from lisa.executable import Tool from lisa.messages import ( MetricRelativity, NetworkTCPPerformanceMessage, NetworkUDPPerformanceMessage, TransportProtocol, + UnifiedPerfMessage, create_perf_message, send_unified_perf_message, ) @@ -467,57 +469,51 @@ def send_iperf_udp_unified_perf_messages( "value": float(tx_throughput_in_gbps), "relativity": MetricRelativity.HigherIsBetter, "unit": "Gbps", - "description": ( - f"iperf3 UDP TX throughput with {connections_num} " - f"connections" - ), }, { "name": "rx_throughput_in_gbps", "value": float(rx_throughput_in_gbps), "relativity": MetricRelativity.HigherIsBetter, "unit": "Gbps", - "description": ( - f"iperf3 UDP RX throughput with {connections_num} " - f"connections" - ), }, { "name": "data_loss", "value": float(data_loss), "relativity": MetricRelativity.LowerIsBetter, "unit": "%", - "description": ( - f"iperf3 UDP data loss with {connections_num} connections" - ), }, { "name": "send_buffer_size", "value": float(send_buffer_size), "relativity": MetricRelativity.NA, "unit": "bytes", - "description": ( - f"iperf3 UDP send buffer size with {connections_num} " - f"connections" - ), }, ] tool = constants.NETWORK_PERFORMANCE_TOOL_IPERF for metric in metrics: - send_unified_perf_message( + # Add connections_num as a field parameter + other_fields = { + "protocol_type": TransportProtocol.Udp, + "connections_num": connections_num, + } + + message = create_perf_message( + message_type=UnifiedPerfMessage, node=self.node, test_result=test_result, test_case_name=test_case_name, - tool=tool, - metric_name=metric["name"], - metric_value=metric["value"], - metric_unit=metric.get("unit", ""), - metric_description=metric.get("description", ""), - metric_relativity=metric["relativity"], - protocol_type=TransportProtocol.Udp, + other_fields=other_fields, ) + + message.metric_name = metric["name"] + message.metric_value = metric["value"] + message.metric_unit = metric.get("unit", "") + message.metric_relativity = metric["relativity"] + message.tool = tool + + notifier.notify(message) def get_sender_bandwidth(self, result: str) -> Decimal: return self._get_bandwidth(result, self._sender_pattern) From 40037b8472da381c60929caac19e1d65532dfbe2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 04:02:53 +0000 Subject: [PATCH 6/8] Revert and add connections_num as Parameter type unified message Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> --- lisa/tools/iperf3.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/lisa/tools/iperf3.py b/lisa/tools/iperf3.py index 98573efeb6..156af5e060 100644 --- a/lisa/tools/iperf3.py +++ b/lisa/tools/iperf3.py @@ -8,14 +8,12 @@ from retry import retry -from lisa import notifier from lisa.executable import Tool from lisa.messages import ( MetricRelativity, NetworkTCPPerformanceMessage, NetworkUDPPerformanceMessage, TransportProtocol, - UnifiedPerfMessage, create_perf_message, send_unified_perf_message, ) @@ -463,6 +461,20 @@ def send_iperf_udp_unified_perf_messages( test_result: "TestResult", ) -> None: """Send unified performance messages for UDP iperf3 metrics.""" + # Send connections_num as a Parameter type metric + send_unified_perf_message( + node=self.node, + test_result=test_result, + test_case_name=test_case_name, + tool=constants.NETWORK_PERFORMANCE_TOOL_IPERF, + metric_name="connections_num", + metric_value=float(connections_num), + metric_unit="", + metric_description="Parameter", + metric_relativity=MetricRelativity.NA, + protocol_type=TransportProtocol.Udp, + ) + metrics = [ { "name": "tx_throughput_in_gbps", @@ -493,27 +505,17 @@ def send_iperf_udp_unified_perf_messages( tool = constants.NETWORK_PERFORMANCE_TOOL_IPERF for metric in metrics: - # Add connections_num as a field parameter - other_fields = { - "protocol_type": TransportProtocol.Udp, - "connections_num": connections_num, - } - - message = create_perf_message( - message_type=UnifiedPerfMessage, + send_unified_perf_message( node=self.node, test_result=test_result, test_case_name=test_case_name, - other_fields=other_fields, + tool=tool, + metric_name=metric["name"], + metric_value=metric["value"], + metric_unit=metric.get("unit", ""), + metric_relativity=metric["relativity"], + protocol_type=TransportProtocol.Udp, ) - - message.metric_name = metric["name"] - message.metric_value = metric["value"] - message.metric_unit = metric.get("unit", "") - message.metric_relativity = metric["relativity"] - message.tool = tool - - notifier.notify(message) def get_sender_bandwidth(self, result: str) -> Decimal: return self._get_bandwidth(result, self._sender_pattern) From e6fb7069de5dbc8f74ec9db02878c79142346820 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 04:08:05 +0000 Subject: [PATCH 7/8] Mark send_buffer_size as Parameter type unified message Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> --- lisa/tools/iperf3.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lisa/tools/iperf3.py b/lisa/tools/iperf3.py index 156af5e060..cdac711840 100644 --- a/lisa/tools/iperf3.py +++ b/lisa/tools/iperf3.py @@ -461,7 +461,7 @@ def send_iperf_udp_unified_perf_messages( test_result: "TestResult", ) -> None: """Send unified performance messages for UDP iperf3 metrics.""" - # Send connections_num as a Parameter type metric + # Send parameters as Parameter type metrics send_unified_perf_message( node=self.node, test_result=test_result, @@ -475,6 +475,20 @@ def send_iperf_udp_unified_perf_messages( protocol_type=TransportProtocol.Udp, ) + send_unified_perf_message( + node=self.node, + test_result=test_result, + test_case_name=test_case_name, + tool=constants.NETWORK_PERFORMANCE_TOOL_IPERF, + metric_name="send_buffer_size", + metric_value=float(send_buffer_size), + metric_unit="bytes", + metric_description="Parameter", + metric_relativity=MetricRelativity.NA, + protocol_type=TransportProtocol.Udp, + ) + + # Send performance metrics metrics = [ { "name": "tx_throughput_in_gbps", @@ -494,12 +508,6 @@ def send_iperf_udp_unified_perf_messages( "relativity": MetricRelativity.LowerIsBetter, "unit": "%", }, - { - "name": "send_buffer_size", - "value": float(send_buffer_size), - "relativity": MetricRelativity.NA, - "unit": "bytes", - }, ] tool = constants.NETWORK_PERFORMANCE_TOOL_IPERF From 5e58cd1bafdc8d300a573f912fc8cbbeb61b0e0d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 21 Oct 2025 04:12:04 +0000 Subject: [PATCH 8/8] Consolidate parameters and metrics into single array Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> --- lisa/tools/iperf3.py | 45 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/lisa/tools/iperf3.py b/lisa/tools/iperf3.py index cdac711840..92df9d863c 100644 --- a/lisa/tools/iperf3.py +++ b/lisa/tools/iperf3.py @@ -461,35 +461,23 @@ def send_iperf_udp_unified_perf_messages( test_result: "TestResult", ) -> None: """Send unified performance messages for UDP iperf3 metrics.""" - # Send parameters as Parameter type metrics - send_unified_perf_message( - node=self.node, - test_result=test_result, - test_case_name=test_case_name, - tool=constants.NETWORK_PERFORMANCE_TOOL_IPERF, - metric_name="connections_num", - metric_value=float(connections_num), - metric_unit="", - metric_description="Parameter", - metric_relativity=MetricRelativity.NA, - protocol_type=TransportProtocol.Udp, - ) - - send_unified_perf_message( - node=self.node, - test_result=test_result, - test_case_name=test_case_name, - tool=constants.NETWORK_PERFORMANCE_TOOL_IPERF, - metric_name="send_buffer_size", - metric_value=float(send_buffer_size), - metric_unit="bytes", - metric_description="Parameter", - metric_relativity=MetricRelativity.NA, - protocol_type=TransportProtocol.Udp, - ) - - # Send performance metrics metrics = [ + # Parameters + { + "name": "connections_num", + "value": float(connections_num), + "relativity": MetricRelativity.NA, + "unit": "", + "description": "Parameter", + }, + { + "name": "send_buffer_size", + "value": float(send_buffer_size), + "relativity": MetricRelativity.NA, + "unit": "bytes", + "description": "Parameter", + }, + # Performance metrics { "name": "tx_throughput_in_gbps", "value": float(tx_throughput_in_gbps), @@ -521,6 +509,7 @@ def send_iperf_udp_unified_perf_messages( metric_name=metric["name"], metric_value=metric["value"], metric_unit=metric.get("unit", ""), + metric_description=metric.get("description", ""), metric_relativity=metric["relativity"], protocol_type=TransportProtocol.Udp, )