From patchwork Fri Jun 24 15:47:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jiale, SongX" X-Patchwork-Id: 113413 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 13C3FA0032; Fri, 24 Jun 2022 09:29:48 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ED7E040A87; Fri, 24 Jun 2022 09:29:47 +0200 (CEST) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 9175E40A82 for ; Fri, 24 Jun 2022 09:29:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1656055785; x=1687591785; h=from:to:cc:subject:date:message-id; bh=0jO28haOrwFF78GYCTXVNLR/dY8eJm0pba/HEHhK9us=; b=hFHFkRanCJuOM0Wmy1PcS0Ud3zTasDtsKPMijdIBDcf5TSS6JiUn/zlB bxXYOm0svthV/+nxKDCqLpzFldXFYSn2HzqqtYTVgQu3X4VQbxKo+ug6O W79IfohZUc4CyUwDnslqVTDS9GpWD3Dv6PM1Yeqx7KEdYsf/nRqAczcgE MXqZe0R5VreQJsO0ZUQ/WyryOz2G+lONUvlCSE+SC6e14G2X4mfwxCmFx EN5mh4sZ9QWiJQfDgzYjEiR894ZHU1fKIAbVapxz0y7FqNJz/tA5jPlri F4DlPAio20RpvuViJR8ENsHgbWtyi0a3rPNYbIE/t/n7pMY9qs0k3ZXgo g==; X-IronPort-AV: E=McAfee;i="6400,9594,10387"; a="342632251" X-IronPort-AV: E=Sophos;i="5.92,218,1650956400"; d="scan'208";a="342632251" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jun 2022 00:29:44 -0700 X-IronPort-AV: E=Sophos;i="5.92,218,1650956400"; d="scan'208";a="593104586" Received: from unknown (HELO dpdk_tester203.icx.intel.com) ([10.239.252.203]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jun 2022 00:29:42 -0700 From: Jiale Song To: dts@dpdk.org Cc: Jiale Song Subject: [dts] [PATCH V1] tests/multiprocess_iavf: synchronize case and testplan Date: Fri, 24 Jun 2022 23:47:14 +0800 Message-Id: <20220624154714.3805-1-songx.jiale@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 1.testplan tests iavf multiprocesses, while script tests PF multiprocesses. testplan is not synchronized with the script. modify the script to synchronize testplan. 2.no perf case in testplan, delete perf case. Signed-off-by: Jiale Song --- tests/TestSuite_multiprocess_iavf.py | 529 ++++++++------------------- 1 file changed, 144 insertions(+), 385 deletions(-) diff --git a/tests/TestSuite_multiprocess_iavf.py b/tests/TestSuite_multiprocess_iavf.py index 2e301367..bb8e0c98 100644 --- a/tests/TestSuite_multiprocess_iavf.py +++ b/tests/TestSuite_multiprocess_iavf.py @@ -1,6 +1,6 @@ # BSD LICENSE # -# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. +# Copyright(c) 2022 Intel Corporation. All rights reserved. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -56,7 +56,7 @@ from .rte_flow_common import RssProcessing as rssprocess executions = [] -class TestMultiprocess(TestCase): +class TestMultiprocessIavf(TestCase): support_nic = ["ICE_100G-E810C_QSFP", "ICE_25G-E810C_SFP", "ICE_25G-E810_XXV_SFP"] @@ -90,11 +90,16 @@ class TestMultiprocess(TestCase): executions.append({"nprocs": 4, "cores": "1S/4C/1T", "pps": 0}) executions.append({"nprocs": 8, "cores": "1S/4C/2T", "pps": 0}) - self.eal_param = "" - for i in self.dut_ports: - self.eal_param += " -a %s" % self.dut.ports_info[i]["pci"] - - self.eal_para = self.dut.create_eal_parameters(cores="1S/2C/1T") + self.dport_info0 = self.dut.ports_info[self.dut_ports[0]] + self.dport_ifaces = self.dport_info0["intf"] + self.create_vfs() + self.port_pci_list = [] + for vf_port in self.sriov_vfs_port: + self.port_pci_list.append(vf_port.pci) + + self.eal_para = self.dut.create_eal_parameters( + cores="1S/2C/1T", ports=self.port_pci_list + ) # start new session to run secondary self.session_secondary = self.dut.new_session() @@ -106,8 +111,7 @@ class TestMultiprocess(TestCase): self.output_path = os.sep.join([cur_path, self.logger.log_path]) # create an instance to set stream field setting self.pktgen_helper = PacketGeneratorHelper() - self.dport_info0 = self.dut.ports_info[self.dut_ports[0]] - self.pci0 = self.dport_info0["pci"] + self.tester_ifaces = [ self.tester.get_interface(self.dut.ports_map[port]) for port in self.dut_ports @@ -122,6 +126,29 @@ class TestMultiprocess(TestCase): """ pass + def create_vfs(self): + self.dut.bind_interfaces_linux(self.kdriver) + self.dut.generate_sriov_vfs_by_port(self.dut_ports[0], 2) + self.sriov_vfs_port = self.dut.ports_info[self.dut_ports[0]]["vfs_port"] + try: + for port in self.sriov_vfs_port: + port.bind_driver(self.drivername) + self.dut.send_expect("ifconfig {} up".format(self.dport_ifaces), "# ") + self.dut.send_expect( + "ip link set {} vf 0 mac {}".format( + self.dport_ifaces, "00:11:22:33:44:55" + ), + "# ", + ) + except Exception as e: + self.destroy_iavf() + raise Exception(e) + + def destroy_iavf(self): + self.dut.destroy_sriov_vfs_by_port(self.dut_ports[0]) + for port in self.sriov_vfs_port: + port.bind_driver(self.drivername) + def launch_multi_testpmd(self, proc_type, queue_num, process_num, **kwargs): self.session_list = [ self.dut.new_session("process_{}".format(i)) for i in range(process_num) @@ -140,7 +167,7 @@ class TestMultiprocess(TestCase): if i != 0 and proc_type_list: proc_type = proc_type_list[1] eal_param = "--proc-type={} -a {} --log-level=ice,7".format( - proc_type, self.pci0 + proc_type, self.sriov_vfs_port[0].pci ) param = "--rxq={0} --txq={0} --num-procs={1} --proc-id={2}".format( queue_num, process_num, i @@ -962,11 +989,14 @@ class TestMultiprocess(TestCase): session_list = [ self.dut.new_session("process_{}".format(i)) for i in range(proc_num) ] + port_param = "" + for port_pci in self.port_pci_list: + port_param += " -a {}".format(port_pci) for i in range(proc_num): session_list[i].send_expect( self.app_symmetric_mp + " -l {} -n 4 --proc-type=auto {} -- -p {} --num-procs={} --proc-id={}".format( - i + 1, self.eal_param, portMask, proc_num, i + i + 1, port_param, portMask, proc_num, i ), "Finished Process Init", ) @@ -1098,7 +1128,9 @@ class TestMultiprocess(TestCase): pmd_2 = PmdOutput(self.dut, self.dut.new_session("process_2")) self.dut.init_reserved_core() cores = self.dut.get_reserved_core("2C", socket=1) - eal_param = "--proc-type={} -a {} --log-level=ice,7".format("auto", self.pci0) + eal_param = "--proc-type={} -a {} --log-level=ice,7".format( + "auto", self.sriov_vfs_port[0].pci + ) param = "--rxq={0} --txq={0} --num-procs={1} --proc-id={2}".format( queue_num, process_num, 2 ) @@ -1188,25 +1220,25 @@ class TestMultiprocess(TestCase): } mac_ipv4_pay_queue_index = { "sub_casename": "mac_ipv4_pay_queue_index", - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 62 / mark id 4 / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 6 / mark id 4 / end", "packet": MAC_IPV4_PAY, - "check_param": {"port_id": 0, "queue": 62, "mark_id": 4}, + "check_param": {"port_id": 0, "queue": 6, "mark_id": 4}, } mac_ipv4_pay_drop = { "sub_casename": "mac_ipv4_pay_drop", - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop / mark / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions drop / mark / end", "packet": MAC_IPV4_PAY, "check_param": {"port_id": 0, "drop": True}, } mac_ipv4_pay_rss_queues = { "sub_casename": "mac_ipv4_pay_rss_queues", - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 31 32 end / mark / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 10 11 end / mark / end", "packet": MAC_IPV4_PAY, - "check_param": {"port_id": 0, "queue": [31, 32]}, + "check_param": {"port_id": 0, "queue": [10, 11]}, } mac_ipv4_pay_mark_rss = { "sub_casename": "mac_ipv4_pay_mark_rss", - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions mark / rss / end", + "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions mark / rss / end", "packet": MAC_IPV4_PAY, "check_param": {"port_id": 0, "mark_id": 0, "rss": True}, } @@ -1228,13 +1260,9 @@ class TestMultiprocess(TestCase): } mac_ipv4_tcp_toeplitz_basic_pkt = { "ipv4-tcp": [ - 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', ], } - mac_ipv4_tcp_toeplitz_non_basic_pkt = [ - 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/UDP(sport=22,dport=23)/("X"*480)', - 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/Raw("x"*80)', - ] mac_ipv4_tcp_l2_src = { "sub_casename": "mac_ipv4_tcp_l2_src", "port_id": 0, @@ -1245,22 +1273,14 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E1", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=25,dport=99)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=25,dport=99)/("X"*480)', "action": "check_hash_same", }, ], - "post-test": [ - { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", - }, - ], } mac_ipv4_tcp_l2_dst = { "sub_casename": "mac_ipv4_tcp_l2_dst", @@ -1272,25 +1292,9 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', - "action": "check_hash_different", - }, - { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=25,dport=99)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E1", dst="00:11:22:33:44:55")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=25,dport=99)/("X"*480)', "action": "check_hash_same", }, - { - "send_packet": mac_ipv4_tcp_toeplitz_non_basic_pkt, - "action": "check_no_hash", - }, - ], - "post-test": [ - { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", - }, ], } mac_ipv4_tcp_l2src_l2dst = { @@ -1303,33 +1307,9 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', - "action": "check_hash_different", - }, - { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E1", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, - { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', - "action": "check_hash_different", - }, - { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.3", src="192.168.0.5")/TCP(sport=25,dport=99)/("X"*480)', - "action": "check_hash_same", - }, - { - "send_packet": mac_ipv4_tcp_toeplitz_non_basic_pkt, - "action": "check_no_hash", - }, - ], - "post-test": [ - { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", - }, ], } mac_ipv4_tcp_l3_src = { @@ -1342,20 +1322,20 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "action": "check_hash_same", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', "action": "check_hash_same", }, - ], - "post-test": [ { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)', + "action": "check_hash_same", }, ], } @@ -1369,20 +1349,24 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=33)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=33)/("X"*480)', "action": "check_hash_same", }, - ], - "post-test": [ { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "action": "check_hash_same", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', + "action": "check_hash_same", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)', + "action": "check_hash_same", }, ], } @@ -1396,24 +1380,28 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', + "action": "check_hash_different", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "action": "check_hash_same", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', "action": "check_hash_same", }, - ], - "post-test": [ { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', + "action": "check_hash_same", }, ], } @@ -1427,24 +1415,28 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)', + "action": "check_hash_different", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_same", }, - ], - "post-test": [ { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "action": "check_hash_same", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "action": "check_hash_same", }, ], } @@ -1458,24 +1450,28 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "action": "check_hash_different", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_same", }, - ], - "post-test": [ { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', + "action": "check_hash_same", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)', + "action": "check_hash_same", }, ], } @@ -1489,24 +1485,28 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "action": "check_hash_different", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', + "action": "check_hash_same", + }, + { + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', "action": "check_hash_same", }, - ], - "post-test": [ { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=32,dport=23)/("X"*480)', + "action": "check_hash_same", }, ], } @@ -1520,22 +1520,14 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.1.2")/TCP(sport=22,dport=33)/("X"*480)', "action": "check_hash_same", }, ], - "post-test": [ - { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", - }, - ], } mac_ipv4_tcp_l4_dst = { "sub_casename": "mac_ipv4_tcp_l4_dst", @@ -1547,22 +1539,14 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.1.1", src="192.168.1.2")/TCP(sport=32,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.1.2")/TCP(sport=32,dport=23)/("X"*480)', "action": "check_hash_same", }, ], - "post-test": [ - { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", - }, - ], } mac_ipv4_tcp_all = { "sub_casename": "mac_ipv4_tcp_all", @@ -1574,34 +1558,26 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=33)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=32,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="00:11:22:33:44:55", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_same", }, ], - "post-test": [ - { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", - }, - ], } mac_ipv4_tcp_ipv4 = { "sub_casename": "mac_ipv4_tcp_ipv4", @@ -1613,26 +1589,18 @@ class TestMultiprocess(TestCase): "action": "save_hash", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:55", dst="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_different", }, { - "send_packet": 'Ether(src="00:11:22:33:44:53", dst="68:05:CA:BB:27:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + "send_packet": 'Ether(src="68:05:CA:BB:26:E0", dst="00:11:22:33:44:55")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', "action": "check_hash_same", }, ], - "post-test": [ - { - "send_packet": [ - mac_ipv4_tcp_toeplitz_basic_pkt["ipv4-tcp"][0], - ], - "action": "check_no_hash", - }, - ], } case_list = [ @@ -1655,15 +1623,16 @@ class TestMultiprocess(TestCase): @check_supported_nic(support_nic) def test_multiprocess_with_rss_symmetric(self): pmd_param = { - "queue_num": 64, + "queue_num": 16, "proc_num": 2, "proc_type": "auto", + "symmetric": True, } packets = [ 'Ether(dst="00:11:22:33:44:55", src="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)', 'Ether(dst="00:11:22:33:44:55", src="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/("X"*480)', - 'Ether(dst="00:11:22:33:44:55", src="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="12.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', - 'Ether(dst="00:11:22:33:44:55", src="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="12.168.0.1")/TCP(sport=22,dport=23)/("X"*480)', + 'Ether(dst="00:11:22:33:44:55", src="68:05:CA:BB:26:E0")/IP(dst="192.168.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)', + 'Ether(dst="00:11:22:33:44:55", src="68:05:CA:BB:26:E0")/IP(dst="192.168.0.2", src="192.168.0.1")/TCP(sport=22,dport=23)/("X"*480)', ] mac_ipv4_symmetric = { "sub_casename": "mac_ipv4_all", @@ -1708,216 +1677,6 @@ class TestMultiprocess(TestCase): } self.rte_flow(mac_ipv4_symmetric, self.multiprocess_rss_data, **pmd_param) - def test_perf_multiprocess_performance(self): - """ - Benchmark Multiprocess performance. - #""" - packet_count = 16 - self.dut.send_expect("fg", "# ") - txPort = self.tester.get_local_port(self.dut_ports[0]) - rxPort = self.tester.get_local_port(self.dut_ports[1]) - mac = self.tester.get_mac(txPort) - dmac = self.dut.get_mac_address(self.dut_ports[0]) - tgenInput = [] - - # create mutative src_ip+dst_ip package - for i in range(packet_count): - package = ( - r'flows = [Ether(src="%s", dst="%s")/IP(src="192.168.1.%d", dst="192.168.1.%d")/("X"*26)]' - % (mac, dmac, i + 1, i + 2) - ) - self.tester.scapy_append(package) - pcap = os.sep.join([self.output_path, "test_%d.pcap" % i]) - self.tester.scapy_append('wrpcap("%s", flows)' % pcap) - tgenInput.append([txPort, rxPort, pcap]) - self.tester.scapy_execute() - - # run multiple symmetric_mp process - validExecutions = [] - for execution in executions: - if len(self.dut.get_core_list(execution["cores"])) == execution["nprocs"]: - validExecutions.append(execution) - - portMask = utils.create_mask(self.dut_ports) - - for n in range(len(validExecutions)): - execution = validExecutions[n] - # get coreList form execution['cores'] - coreList = self.dut.get_core_list(execution["cores"], socket=self.socket) - # to run a set of symmetric_mp instances, like test plan - dutSessionList = [] - for index in range(len(coreList)): - dut_new_session = self.dut.new_session() - dutSessionList.append(dut_new_session) - # add -a option when tester and dut in same server - dut_new_session.send_expect( - self.app_symmetric_mp - + " -c %s --proc-type=auto %s -- -p %s --num-procs=%d --proc-id=%d" - % ( - utils.create_mask([coreList[index]]), - self.eal_param, - portMask, - execution["nprocs"], - index, - ), - "Finished Process Init", - ) - - # clear streams before add new streams - self.tester.pktgen.clear_streams() - # run packet generator - streams = self.pktgen_helper.prepare_stream_from_tginput( - tgenInput, 100, None, self.tester.pktgen - ) - _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams) - - execution["pps"] = pps - - # close all symmetric_mp process - self.dut.send_expect("killall symmetric_mp", "# ") - # close all dut sessions - for dut_session in dutSessionList: - self.dut.close_session(dut_session) - - # get rate and mpps data - for n in range(len(executions)): - self.verify(executions[n]["pps"] is not 0, "No traffic detected") - self.result_table_create( - [ - "Num-procs", - "Sockets/Cores/Threads", - "Num Ports", - "Frame Size", - "%-age Line Rate", - "Packet Rate(mpps)", - ] - ) - - for execution in validExecutions: - self.result_table_add( - [ - execution["nprocs"], - execution["cores"], - 2, - 64, - execution["pps"] / float(100000000 / (8 * 84)), - execution["pps"] / float(1000000), - ] - ) - - self.result_table_print() - - def test_perf_multiprocess_client_serverperformance(self): - """ - Benchmark Multiprocess client-server performance. - """ - self.dut.kill_all() - self.dut.send_expect("fg", "# ") - txPort = self.tester.get_local_port(self.dut_ports[0]) - rxPort = self.tester.get_local_port(self.dut_ports[1]) - mac = self.tester.get_mac(txPort) - - self.tester.scapy_append( - 'dmac="%s"' % self.dut.get_mac_address(self.dut_ports[0]) - ) - self.tester.scapy_append('smac="%s"' % mac) - self.tester.scapy_append( - 'flows = [Ether(src=smac, dst=dmac)/IP(src="192.168.1.1", dst="192.168.1.1")/("X"*26)]' - ) - - pcap = os.sep.join([self.output_path, "test.pcap"]) - self.tester.scapy_append('wrpcap("%s", flows)' % pcap) - self.tester.scapy_execute() - - validExecutions = [] - for execution in executions: - if len(self.dut.get_core_list(execution["cores"])) == execution["nprocs"]: - validExecutions.append(execution) - - for execution in validExecutions: - coreList = self.dut.get_core_list(execution["cores"], socket=self.socket) - # get core with socket parameter to specified which core dut used when tester and dut in same server - coreMask = utils.create_mask( - self.dut.get_core_list("1S/1C/1T", socket=self.socket) - ) - portMask = utils.create_mask(self.dut_ports) - # specified mp_server core and add -a option when tester and dut in same server - self.dut.send_expect( - self.app_mp_server - + " -n %d -c %s %s -- -p %s -n %d" - % ( - self.dut.get_memory_channels(), - coreMask, - self.eal_param, - portMask, - execution["nprocs"], - ), - "Finished Process Init", - 20, - ) - self.dut.send_expect("^Z", "\r\n") - self.dut.send_expect("bg", "# ") - - for n in range(execution["nprocs"]): - time.sleep(5) - # use next core as mp_client core, different from mp_server - coreMask = utils.create_mask([str(int(coreList[n]) + 1)]) - self.dut.send_expect( - self.app_mp_client - + " -n %d -c %s --proc-type=secondary %s -- -n %d" - % (self.dut.get_memory_channels(), coreMask, self.eal_param, n), - "Finished Process Init", - ) - self.dut.send_expect("^Z", "\r\n") - self.dut.send_expect("bg", "# ") - - tgenInput = [] - tgenInput.append([txPort, rxPort, pcap]) - - # clear streams before add new streams - self.tester.pktgen.clear_streams() - # run packet generator - streams = self.pktgen_helper.prepare_stream_from_tginput( - tgenInput, 100, None, self.tester.pktgen - ) - _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams) - - execution["pps"] = pps - self.dut.kill_all() - time.sleep(5) - - for n in range(len(executions)): - self.verify(executions[n]["pps"] is not 0, "No traffic detected") - - self.result_table_create( - [ - "Server threads", - "Server Cores/Threads", - "Num-procs", - "Sockets/Cores/Threads", - "Num Ports", - "Frame Size", - "%-age Line Rate", - "Packet Rate(mpps)", - ] - ) - - for execution in validExecutions: - self.result_table_add( - [ - 1, - "1S/1C/1T", - execution["nprocs"], - execution["cores"], - 2, - 64, - execution["pps"] / float(100000000 / (8 * 84)), - execution["pps"] / float(1000000), - ] - ) - - self.result_table_print() - def set_fields(self): """set ip protocol field behavior""" fields_config = { @@ -1943,4 +1702,4 @@ class TestMultiprocess(TestCase): Run after each test suite. """ self.dut.kill_all() - pass + self.destroy_iavf()