diff --git a/lisa/tools/iperf3.py b/lisa/tools/iperf3.py index 8751beda70..92df9d863c 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,70 @@ 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.""" + 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), + "relativity": MetricRelativity.HigherIsBetter, + "unit": "Gbps", + }, + { + "name": "rx_throughput_in_gbps", + "value": float(rx_throughput_in_gbps), + "relativity": MetricRelativity.HigherIsBetter, + "unit": "Gbps", + }, + { + "name": "data_loss", + "value": float(data_loss), + "relativity": MetricRelativity.LowerIsBetter, + "unit": "%", + }, + ] + + 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_description=metric.get("description", ""), + metric_relativity=metric["relativity"], + protocol_type=TransportProtocol.Udp, + ) + def get_sender_bandwidth(self, result: str) -> Decimal: return self._get_bandwidth(result, self._sender_pattern)