From patchwork Thu Sep 22 23:03:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, ZhiminX" X-Patchwork-Id: 116653 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D6C94A0543; Thu, 22 Sep 2022 16:51:20 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9865640156; Thu, 22 Sep 2022 16:51:20 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id 0ECAA400D7 for ; Thu, 22 Sep 2022 16:51:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663858279; x=1695394279; h=from:to:cc:subject:date:message-id; bh=SQrwwdaf166AuoSveJzwM2OczxMEAIxRXfW6RrGz3rw=; b=TBWs4dqXJjOHGEXXpQhnJBIzepZIL+c2di8GdEw+CgNrLYEp09CMh6/8 vdBzo8H2Be30al2KbX0AQ71AU/xcvYmmCf7lGujPzkxNfPriavzskwJ3u uOOcI6pOmJvpqvk0q91zC1XWsutTK8SiV/kXLxDWiwiABmFwG9Lj5kPvu +r1yEgMTif0GBwK/CBrxUgj1myn/4f4OO0jmlG7p4fGXixFKrjcnJ0r4O 4q1U7mtfkMf+/t96iyAkQW6ExvoQQMNZghwaf/UXZo4hTKd1p06sEwSQJ kfA9MCzJI1jgjSB1BUYmuyS5FPCwVCJIWCTNjOEaZ9uezzs7h+Pm1YjcG g==; X-IronPort-AV: E=McAfee;i="6500,9779,10478"; a="301163945" X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="301163945" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Sep 2022 07:51:17 -0700 X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="597459480" Received: from unknown (HELO localhost.localdomain) ([10.239.252.93]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Sep 2022 07:51:16 -0700 From: Zhimin Huang To: dts@dpdk.org Cc: Zhimin Huang Subject: [dts][PATCH V4 1/2] test_plans/telemetry:add cases to check laser power in dpdk Date: Fri, 23 Sep 2022 07:03:51 +0800 Message-Id: <20220922230352.14237-1-zhiminx.huang@intel.com> X-Mailer: git-send-email 2.17.1 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org the customer need to get the laser power values in dpdk. so a new telemtry command /ethdev/module_eeprom to show module EEPROM for each port in dpdk22.07. we add new test cases to check laser power value. 1.check the laser power values same as that of 'ethtool -m'. 2.check different/same optical modules have different/same laser power values. Signed-off-by: Zhimin Huang Acked-by: Peng, Yuan --- v4: -optimized code in testcase. v3: -detail subject and comments. -add some descriptions related to ethtool version. test_plans/telemetry_test_plan.rst | 74 +++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/test_plans/telemetry_test_plan.rst b/test_plans/telemetry_test_plan.rst index 16568cd3..b1ac5844 100644 --- a/test_plans/telemetry_test_plan.rst +++ b/test_plans/telemetry_test_plan.rst @@ -200,4 +200,76 @@ Test case: Stats of 4 ports for testpmd and telemetry with different type nic a. Ensure # of ports stats being returned == # of ports b. Ensure packet counts (eg rx_good_packets) is 0 c. Ensure extended NIC stats are shown (depends on PMD used for testing, refer to ixgbe/i40e tests for PMD xstats) - d. Ensure extended NIC stats are 0 (eg: rx_q0_packets == 0) \ No newline at end of file + d. Ensure extended NIC stats are 0 (eg: rx_q0_packets == 0) + +Test case: read nic Laser Power via dpdk +======================================== + +1.Bind ports to dpdk:: + + ./usertools/dpdk-devbind.py --bind=vfio-pci 18:00.0 18.00.1 + +2.Launch the dpdk testpmd with teltmetry:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd --telemetry -- -i + +3.Launch the telemetry client:: + + python ./usertools/dpdk-telemetry.py + +4.Excute command in telemtry client:: + + --> /ethdev/module_eeprom, + +5.check the testpmd and telemetry show info same as 'ethtool -m':: + + ethtool -m ens25f1 | grep 'Laser output power' + Laser output power : 0.6703 mW / -1.74 dBm + +.. note:: + + refer to command 'ethtool -m' of ethtool v5.4 + +Test case: check Laser Power in different optical modules +========================================================= + +1.set port 0 and port 1 with diffent optical modules + +2.Launch the dpdk testpmd with teltmetry:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd --telemetry -- -i + +3.Launch the telemetry client:: + + python ./usertools/dpdk-telemetry.py + +4.Excute command in telemtry client:: + + --> /ethdev/module_eeprom,0 + --> /ethdev/module_eeprom,1 + +5.check port 0 and port 1 have different Laser Power + +Test case: check Laser Power in same optical modules +==================================================== + +1.set port 0 and port 1 with same optical modules + +2.Launch the dpdk testpmd with teltmetry:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd --telemetry -- -i + +3.Launch the telemetry client:: + + python ./usertools/dpdk-telemetry.py + +4.Excute command in telemtry client:: + + --> /ethdev/module_eeprom,0 + --> /ethdev/module_eeprom,1 + +5.check port 0 and port 1 have same Laser Power + +.. note:: + + the laser power will change slightly with the voltage and temperature From patchwork Thu Sep 22 23:03:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, ZhiminX" X-Patchwork-Id: 116654 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C5047A0544; Thu, 22 Sep 2022 16:51:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BE4A040C35; Thu, 22 Sep 2022 16:51:21 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id D6FAB400D7 for ; Thu, 22 Sep 2022 16:51:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663858280; x=1695394280; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=cvgDeAF7VJbJLfTJt7orcGnUmuWTEVGbFwoD2+FU2OI=; b=I+/qolU5yKk+65pJQJQNh74u98DPtjMGEGQFD8WxTVIyAqi9sAceRPvD wOUaYPMqh3MsvTmEqO5eTQVsKdFsy15Mz6nb7maNaUBfyOWzukfEIKvLA VPyIpbIkM6ZODSwlFwlJopTWnh58FzlvugKXnL0kTHImKhE/iPRUZPCBk q12r6C8QI4elkolRJUWVIXOE0A4O9GZb7JsCat+ZjhLQo1r0CpVVw4Vyn wqEtXifgSlMXxKzYPVma2gKA5zHg4Ee0hlZHKLD05thHuMTLuRiJ2n8qy S3WoS8G0e5IId4muGBiQ/C6F4MoCYG+bF0MlZQ79B4VS5G3DeYKB1ToR5 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10478"; a="301163953" X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="301163953" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Sep 2022 07:51:19 -0700 X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="597459495" Received: from unknown (HELO localhost.localdomain) ([10.239.252.93]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Sep 2022 07:51:18 -0700 From: Zhimin Huang To: dts@dpdk.org Cc: Zhimin Huang Subject: [dts][PATCH V4 2/2] tests/telemetry:add cases to check laser power in dpdk Date: Fri, 23 Sep 2022 07:03:52 +0800 Message-Id: <20220922230352.14237-2-zhiminx.huang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220922230352.14237-1-zhiminx.huang@intel.com> References: <20220922230352.14237-1-zhiminx.huang@intel.com> X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org the customer need to get the laser power values in dpdk. so a new telemtry command /ethdev/module_eeprom to show module EEPROM for each port in dpdk22.07. we add new test cases to check laser power value. 1.check the laser power values same as that of 'ethtool -m'. 2.check different/same optical modules have different/same laser power values. Signed-off-by: Zhimin Huang Acked-by: Peng, Yuan Tested-by: Jiale Song < songx.jiale@intel.com> --- v4: -fix hard code, use defined variable instead. -restore the interface status,avoid affecting other suite. v3: -add more comments in testplan tests/TestSuite_telemetry.py | 185 ++++++++++++++++++++++++++++++++++- 1 file changed, 183 insertions(+), 2 deletions(-) diff --git a/tests/TestSuite_telemetry.py b/tests/TestSuite_telemetry.py index 97c1c748..736ae7ed 100644 --- a/tests/TestSuite_telemetry.py +++ b/tests/TestSuite_telemetry.py @@ -539,6 +539,126 @@ class TestTelemetry(TestCase): self.close_telemetry_server() raise Exception(e) + def start_telemetry_server_and_get_module_eeprom(self, port_id): + try: + self.change_flag = True + self.dut.bind_interfaces_linux(self.drivername) + out = self.start_telemetry_server() + self.tester.is_interface_up(self.tester_iface0) + p = re.search("socket /var/run/dpdk/(.+?)/", out) + self.start_dpdk_telemetry(p.group(1)) + module_eeprom_output = self.dut_telemetry.send_expect( + "/ethdev/module_eeprom,{}".format(port_id), "--> " + ) + self.close_telemetry_server() + return module_eeprom_output + except Exception as e: + self.close_telemetry_server() + raise Exception(e) + + def start_dpdk_telemetry(self, *args): + self.dut_telemetry = self.dut.new_session() + dpdk_tool = os.path.join(self.target_dir, "usertools/dpdk-telemetry.py") + self.dut_telemetry.send_expect( + "python3 " + dpdk_tool + " -f {}".format(args[0]), "--> ", 5 + ) + + def verify_nic_laser_power_via_dpdk(self, laser_powers, *ports): + for laser_power, port in zip(laser_powers, ports): + laser_power_via_dpdk = self.get_nic_laser_power_via_dpdk(port) + dpdk_float_values = self.get_float_laser_power_values(laser_power_via_dpdk) + eth_float_values = self.get_float_laser_power_values(laser_power) + test_flag = [ + abs(v_d - v_e) for v_d, v_e in zip(dpdk_float_values, eth_float_values) + ] + self.logger.info( + "dpdk:{} eth:{}".format(dpdk_float_values, eth_float_values) + ) + self.verify( + [flag <= 0.1 for flag in test_flag], + "dpdk:{} eth:{},get the incorrect laser power values".format( + dpdk_float_values, eth_float_values + ), + ) + + def verify_laser_Power_in_different_optical_modules(self, laser_powers, *ports): + laser_power_via_dpdk = self.get_nic_laser_power_via_dpdk(ports[-1]) + dpdk_float_values = self.get_float_laser_power_values(laser_power_via_dpdk) + eth_float_values = self.get_float_laser_power_values(laser_powers[0]) + self.logger.info( + "dpdk port 1: {} eth port 0: {}".format( + dpdk_float_values, eth_float_values + ) + ) + test_flag = [ + abs(v_d - v_e) for v_d, v_e in zip(dpdk_float_values, eth_float_values) + ] + self.verify( + [flag > 0.1 for flag in test_flag], + "different optical modules should have different laser power values", + ) + + def verify_laser_Power_in_same_optical_modules(self, laser_powers, *ports): + laser_power_via_dpdk = self.get_nic_laser_power_via_dpdk(ports[-1]) + dpdk_float_values = self.get_float_laser_power_values(laser_power_via_dpdk) + eth_float_values = self.get_float_laser_power_values(laser_powers[0]) + self.logger.info( + "dpdk port 1: {} eth port 0: {}".format( + dpdk_float_values, eth_float_values + ) + ) + test_flag = [ + abs(v_d - v_e) for v_d, v_e in zip(dpdk_float_values, eth_float_values) + ] + self.verify( + [flag <= 0.1 for flag in test_flag], + "same optical modules should have same laser power values", + ) + + def get_float_laser_power_values(self, output): + p = re.findall(r"(\d+\.\d+.)", output) + float_list = list(map(float, p)) + return float_list + + def get_nic_laser_power_via_ethtool(self, intf): + output = self.d_a_console( + "ethtool -m {} | grep 'Laser output power'".format(intf) + ) + rex_output = re.search(r"Laser output power\s+:.*", output) + if not rex_output: + return False + return rex_output.group() + + def get_nic_laser_power_via_dpdk(self, port): + out = self.start_telemetry_server_and_get_module_eeprom(port) + laser_power_via_dpdk = self.get_nic_laser_power_via_dpdk_rex(out) + return laser_power_via_dpdk + + def get_nic_laser_power_via_dpdk_rex(self, output): + rex_output = re.search(r'"Laser output power":.*?dBm"', output) + if not rex_output: + return False + return rex_output.group() + + def check_interface_link_up(self, intf): + try: + self.d_a_console("ifconfig {} up".format(intf)) + link = self.dut.is_interface_up(intf) + self.verify(link, "link is down") + except Exception as e: + self.d_a_console("ifconfig {} up".format(intf)) + finally: + time.sleep(3) + + def skip_unsupported_get_laser_power(self, *intfs): + laser_power_list = [] + for intf in intfs: + output = self.get_nic_laser_power_via_ethtool(intf) + if not output: + return False + laser_power_list.append(output) + return laser_power_list + # # Test cases. # @@ -550,6 +670,11 @@ class TestTelemetry(TestCase): # get ports information self.dut_ports = self.dut.get_ports() self.verify(len(self.dut_ports) >= 2, "Insufficient ports") + self.pf0_intf = self.dut.ports_info[self.dut_ports[0]]["intf"] + self.pf1_intf = self.dut.ports_info[self.dut_ports[1]]["intf"] + self.tester_iface0 = self.tester.get_interface( + self.tester.get_local_port(self.dut_ports[0]) + ) self.init_test_binary_files() self.nic_grp = self.get_ports_by_nic_type() self.used_ports = [] @@ -559,7 +684,7 @@ class TestTelemetry(TestCase): """ Run before each test case. """ - pass + self.dut.bind_interfaces_linux(self.drivername) def tear_down(self): """ @@ -571,7 +696,7 @@ class TestTelemetry(TestCase): """ Run after each test suite. """ - pass + self.dut.bind_interfaces_linux(self.drivername) def test_basic_connection(self): """ @@ -585,3 +710,59 @@ class TestTelemetry(TestCase): Stats of 2 ports for testpmd and telemetry with same type nic """ self.verify_same_nic_with_2ports() + + def test_read_nic_laser_power_via_dpdk(self): + """ + read laser power, check testpmd show correct laser power + """ + self.dut.bind_interfaces_linux(self.kdriver) + self.check_interface_link_up(self.pf0_intf) + laser_power_list = self.skip_unsupported_get_laser_power(self.pf0_intf) + self.skip_case(laser_power_list, "The test need Optical module to support") + self.verify_nic_laser_power_via_dpdk(laser_power_list, self.dut_ports[0]) + + def test_check_laser_power_in_different_optical_modules(self): + """ + set different optical modules in two ports and check the testpmd show different laser power + """ + self.dut.bind_interfaces_linux(self.kdriver) + [self.check_interface_link_up(i) for i in [self.pf0_intf, self.pf1_intf]] + laser_power_list = self.skip_unsupported_get_laser_power( + self.pf0_intf, self.pf1_intf + ) + self.skip_case(laser_power_list, "The test need Optical module to support") + float_list = [ + self.get_float_laser_power_values(laser_power) + for laser_power in laser_power_list + ] + self.skip_case( + abs(float_list[0][0] - float_list[1][0]) > 0.1 + and abs(float_list[0][1] - float_list[1][1]) > 0.1, + "The test need different optical module in two ports", + ) + self.verify_laser_Power_in_different_optical_modules( + laser_power_list, self.dut_ports[0], self.dut_ports[1] + ) + + def test_check_laser_power_in_same_optical_modules(self): + """ + set same optical modules in two ports and check the testpmd show same laser power + """ + self.dut.bind_interfaces_linux(self.kdriver) + [self.check_interface_link_up(i) for i in [self.pf0_intf, self.pf1_intf]] + laser_power_list = self.skip_unsupported_get_laser_power( + self.pf0_intf, self.pf1_intf + ) + self.skip_case(laser_power_list, "The test need Optical module to support") + float_list = [ + self.get_float_laser_power_values(laser_power) + for laser_power in laser_power_list + ] + self.skip_case( + abs(float_list[0][0] - float_list[1][0]) <= 0.1 + and abs(float_list[0][1] - float_list[1][1]) <= 0.1, + "The test need same optical module in two ports", + ) + self.verify_laser_Power_in_same_optical_modules( + laser_power_list, self.dut_ports[0], self.dut_ports[1] + )