Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/97586/?format=api
http://patches.dpdk.org/api/patches/97586/?format=api", "web_url": "http://patches.dpdk.org/project/dts/patch/20210831081224.47039-4-yufengx.mo@intel.com/", "project": { "id": 3, "url": "http://patches.dpdk.org/api/projects/3/?format=api", "name": "DTS", "link_name": "dts", "list_id": "dts.dpdk.org", "list_email": "dts@dpdk.org", "web_url": "", "scm_url": "git://dpdk.org/tools/dts", "webscm_url": "http://git.dpdk.org/tools/dts/", "list_archive_url": "https://inbox.dpdk.org/dts", "list_archive_url_format": "https://inbox.dpdk.org/dts/{}", "commit_url_format": "" }, "msgid": "<20210831081224.47039-4-yufengx.mo@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/20210831081224.47039-4-yufengx.mo@intel.com", "date": "2021-08-31T08:12:21", "name": "[V1,3/6] tests/vxlan: move to pktgen from etgen", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "bb279648bc2a66ca7b50fa58e3a0d534d9a5f603", "submitter": { "id": 1342, "url": "http://patches.dpdk.org/api/people/1342/?format=api", "name": "Yufen.Mo", "email": "yufengx.mo@intel.com" }, "delegate": null, "mbox": "http://patches.dpdk.org/project/dts/patch/20210831081224.47039-4-yufengx.mo@intel.com/mbox/", "series": [ { "id": 18555, "url": "http://patches.dpdk.org/api/series/18555/?format=api", "web_url": "http://patches.dpdk.org/project/dts/list/?series=18555", "date": "2021-08-31T08:12:18", "name": "etgen: remove etgen", "version": 1, "mbox": "http://patches.dpdk.org/series/18555/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/97586/comments/", "check": "pending", "checks": "http://patches.dpdk.org/api/patches/97586/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dts-bounces@dpdk.org>", "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 78FCBA0C46;\n\tTue, 31 Aug 2021 10:11:43 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6CBF5406A3;\n\tTue, 31 Aug 2021 10:11:43 +0200 (CEST)", "from mga07.intel.com (mga07.intel.com [134.134.136.100])\n by mails.dpdk.org (Postfix) with ESMTP id 4243A40141\n for <dts@dpdk.org>; Tue, 31 Aug 2021 10:11:41 +0200 (CEST)", "from fmsmga006.fm.intel.com ([10.253.24.20])\n by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 31 Aug 2021 01:11:40 -0700", "from dpdk-moyufen06.sh.intel.com ([10.67.116.208])\n by fmsmga006.fm.intel.com with ESMTP; 31 Aug 2021 01:11:38 -0700" ], "X-IronPort-AV": [ "E=McAfee;i=\"6200,9189,10092\"; a=\"282140460\"", "E=Sophos;i=\"5.84,365,1620716400\"; d=\"scan'208\";a=\"282140460\"", "E=Sophos;i=\"5.84,365,1620716400\"; d=\"scan'208\";a=\"687623327\"" ], "X-ExtLoop1": "1", "From": "Yufen Mo <yufengx.mo@intel.com>", "To": "dts@dpdk.org, lijuan.tu@intel.com, yingyax.han@intel.com,\n junx.w.zhou@intel.com", "Cc": "Yufen Mo <yufengx.mo@intel.com>", "Date": "Tue, 31 Aug 2021 16:12:21 +0800", "Message-Id": "<20210831081224.47039-4-yufengx.mo@intel.com>", "X-Mailer": "git-send-email 2.21.0", "In-Reply-To": "<20210831081224.47039-1-yufengx.mo@intel.com>", "References": "<20210831081224.47039-1-yufengx.mo@intel.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[dts] [PATCH V1 3/6] tests/vxlan: move to pktgen from etgen", "X-BeenThere": "dts@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "test suite reviews and discussions <dts.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dts/>", "List-Post": "<mailto:dts@dpdk.org>", "List-Help": "<mailto:dts-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>", "Errors-To": "dts-bounces@dpdk.org", "Sender": "\"dts\" <dts-bounces@dpdk.org>" }, "content": "#. remove etgen relevant source code.\n#. udpate perf test cases to pktgen.\n#. dpdk remove legacy filter command, perf test cases need to use rte flow command.\n\nSigned-off-by: Yufen Mo <yufengx.mo@intel.com>\n---\n tests/TestSuite_vxlan.py | 186 ++++++++++++++++++++++++++-------------\n 1 file changed, 124 insertions(+), 62 deletions(-)", "diff": "diff --git a/tests/TestSuite_vxlan.py b/tests/TestSuite_vxlan.py\nindex fdb6616d..30ad3c31 100644\n--- a/tests/TestSuite_vxlan.py\n+++ b/tests/TestSuite_vxlan.py\n@@ -57,7 +57,7 @@ from scapy.route import *\n \n from test_case import TestCase\n from settings import HEADER_SIZE, FOLDERS\n-from etgen import IxiaPacketGenerator\n+from pktgen import PacketGeneratorHelper\n import packet\n \n #\n@@ -283,7 +283,7 @@ class VxlanTestConfig(object):\n return len(self.pkt) + 4\n \n \n-class TestVxlan(TestCase, IxiaPacketGenerator):\n+class TestVxlan(TestCase):\n \n def set_up_all(self):\n \"\"\"\n@@ -301,9 +301,6 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n # Based on h/w type, choose how many ports to use\n ports = self.dut.get_ports()\n \n- # update IxiaPacketGenerator function by local\n- self.tester.extend_external_packet_generator(TestVxlan, self)\n-\n # Verify that enough ports are available\n self.verify(len(ports) >= 2, \"Insufficient ports for testing\")\n global valports\n@@ -396,6 +393,68 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n 'omac-imac-tenid', 'recvqueue': 'Multi'}\n ]\n \n+ self.pktgen_helper = PacketGeneratorHelper()\n+\n+ def set_fields(self):\n+ fields_config = {\n+ 'ip': {\n+ 'src': {'action': 'random'},\n+ 'dst': {'action': 'random'},\n+ },}\n+ return fields_config\n+\n+ def suite_measure_throughput(self, tgen_input, use_vm=False):\n+ vm_config = self.set_fields()\n+ self.tester.pktgen.clear_streams()\n+ streams = self.pktgen_helper.prepare_stream_from_tginput(\n+ tgen_input, 100, vm_config if use_vm else None, self.tester.pktgen)\n+ result = self.tester.pktgen.measure_throughput(stream_ids=streams)\n+\n+ return result\n+\n+ def perf_tunnel_filter_set_rule(self, rule_config):\n+ rule_list = {\n+ # check inner mac + inner vlan filter can work\n+ 'imac-ivlan': \n+ f'flow create {rule_config.get(\"dut_port\")} ingress pattern eth / '\n+ f'ipv4 / udp / vxlan / eth dst is {rule_config.get(\"inner_mac_dst\")} / '\n+ f'vlan tci is {rule_config.get(\"inner_vlan\")} / end actions pf / '\n+ f'queue index {rule_config.get(\"queue\")} / end',\n+ # check inner mac + inner vlan + tunnel id filter can work\n+ 'imac-ivlan-tenid':\n+ f'flow create {rule_config.get(\"dut_port\")} ingress pattern eth / '\n+ f'ipv4 / udp / vxlan vni is {rule_config.get(\"vni\")} / '\n+ f'eth dst is {rule_config.get(\"inner_mac_dst\")} / '\n+ f'vlan tci is {rule_config.get(\"inner_vlan\")} / '\n+ f'end actions pf / queue index {rule_config.get(\"queue\")} / end',\n+ # check inner mac + tunnel id filter can work\n+ 'imac-tenid':\n+ f'flow create {rule_config.get(\"dut_port\")} ingress pattern eth / '\n+ f'ipv4 / udp / vxlan vni is {rule_config.get(\"vni\")} / '\n+ f'eth dst is {rule_config.get(\"inner_mac_dst\")} / end actions pf / '\n+ f'queue index {rule_config.get(\"queue\")} / end',\n+ # check inner mac filter can work\n+ 'imac':\n+ f'flow create {rule_config.get(\"dut_port\")} ingress pattern eth / '\n+ f'ipv4 / udp / vxlan / eth dst is {rule_config.get(\"inner_mac_dst\")} / end actions pf / '\n+ f'queue index {rule_config.get(\"queue\")} / end',\n+ # check outer mac + inner mac + tunnel id filter can work\n+ 'omac-imac-tenid':\n+ f'flow create {rule_config.get(\"dut_port\")} ingress pattern '\n+ f'eth dst is {rule_config.get(\"outer_mac_dst\")} / '\n+ f'ipv4 / udp / vxlan vni is {rule_config.get(\"vni\")} / '\n+ f'eth dst is {rule_config.get(\"inner_mac_dst\")} / '\n+ f'end actions pf / queue index {rule_config.get(\"queue\")} / end',\n+ }\n+ rule = rule_list.get(rule_config.get(\"tun_filter\"))\n+ if not rule:\n+ msg = \"not support format\"\n+ self.logger.error(msg)\n+ return\n+ out = self.dut.send_expect(rule, \"testpmd>\", 3)\n+ pat = \"Flow rule #\\d+ created\"\n+ self.verify(re.findall(pat, out, re.M), \"Flow rule create failed\")\n+\n def send_and_detect(self, **kwargs):\n \"\"\"\n send vxlan packet and check whether testpmd detect the correct\n@@ -886,11 +945,17 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n self.enable_vxlan(dut_port)\n \n if tun_filter != 'None':\n- args = [dut_port, config.outer_mac_dst,\n- config.inner_mac_dst, config.inner_ip_dst,\n- config.inner_vlan, tun_filter,\n- config.vni, 0]\n- self.tunnel_filter_add(*args)\n+ rule_config = {\n+ 'dut_port': dut_port,\n+ 'outer_mac_dst': config.outer_mac_dst,\n+ 'inner_mac_dst': config.inner_mac_dst,\n+ 'inner_ip_dst': config.inner_ip_dst,\n+ 'inner_vlan': config.inner_vlan,\n+ 'tun_filter': tun_filter,\n+ 'vni': config.vni,\n+ 'queue': 0\n+ }\n+ self.perf_tunnel_filter_set_rule(rule_config)\n \n if perf_config['Packet'] == 'Normal':\n config.outer_udp_dst = 63\n@@ -917,35 +982,22 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n pkt = config.create_pcap()\n pkts.append(pkt)\n \n- args = [dut_port, config.outer_mac_dst,\n- config.inner_mac_dst, config.inner_ip_dst,\n- config.inner_vlan, tun_filter,\n- config.vni, (queue + 1)]\n- self.tunnel_filter_add(*args)\n+ rule_config = {\n+ 'dut_port': dut_port,\n+ 'outer_mac_dst': config.outer_mac_dst,\n+ 'inner_mac_dst': config.inner_mac_dst,\n+ 'inner_ip_dst': config.inner_ip_dst,\n+ 'inner_vlan': config.inner_vlan,\n+ 'tun_filter': tun_filter,\n+ 'vni': config.vni,\n+ 'queue': (queue + 1),\n+ }\n+ self.perf_tunnel_filter_set_rule(rule_config)\n \n # save pkt list into pcap file\n wrpcap(config.pcap_file, pkts)\n self.tester.session.copy_file_to(config.pcap_file)\n \n- def ip_random(self, port, frag, src, proto, tos, dst, chksum, len,\n- options, version, flags, ihl, ttl, id):\n- self.add_tcl_cmd(\"protocol config -name ip\")\n- self.add_tcl_cmd('ip config -sourceIpAddr \"%s\"' % src)\n- self.add_tcl_cmd('ip config -sourceIpAddrMode ipIncrHost')\n- self.add_tcl_cmd('ip config -sourceIpAddrRepeatCount %d' % 64)\n- self.add_tcl_cmd('ip config -destIpAddr \"%s\"' % dst)\n- self.add_tcl_cmd('ip config -destIpMask \"255.255.0.0\" ')\n- self.add_tcl_cmd('ip config -destIpAddrMode ipRandom')\n- self.add_tcl_cmd('ip config -destIpAddrRepeatCount 65536')\n- self.add_tcl_cmd(\"ip config -ttl %d\" % ttl)\n- self.add_tcl_cmd(\"ip config -totalLength %d\" % len)\n- self.add_tcl_cmd(\"ip config -fragment %d\" % frag)\n- self.add_tcl_cmd(\"ip config -ipProtocol %d\" % proto)\n- self.add_tcl_cmd(\"ip config -identifier %d\" % id)\n- self.add_tcl_cmd(\"stream config -framesize %d\" % (len + 18))\n- self.add_tcl_cmd(\"ip set %d %d %d\" %\n- (self.chasId, port['card'], port['port']))\n-\n def combine_pcap(self, dest_pcap, src_pcap):\n pkts = rdpcap(dest_pcap)\n if len(pkts) != 1:\n@@ -1002,15 +1054,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n else:\n wirespeed = self.wirespeed(self.nic, PACKET_LEN, 1)\n \n- if recv_queue == 'Multi' and tun_filter == \"None\":\n- ip_ori = self.ip\n- self.ip = self.ip_random\n-\n # run traffic generator\n- _, pps = self.tester.traffic_generator_throughput(tgen_input)\n-\n- if recv_queue == 'Multi' and tun_filter == \"None\":\n- self.ip = ip_ori\n+ use_vm = True if recv_queue == 'Multi' and tun_filter == \"None\" else False\n+ _, pps = self.suite_measure_throughput(tgen_input, use_vm=use_vm)\n \n pps /= 1000000.0\n perf_config['Mpps'] = pps\n@@ -1020,8 +1066,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n self.dut.send_expect(\"quit\", \"# \", 10)\n \n # verify every queue work fine\n+ check_queue = 0\n if recv_queue == 'Multi':\n- for queue in range(self.tunnel_multiqueue):\n+ for queue in range(check_queue):\n self.verify(\"Queue= %d -> TX Port\"\n % (queue) in out,\n \"Queue %d no traffic\" % queue)\n@@ -1033,6 +1080,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n \n self.result_table_print()\n \n+\n def test_perf_vxlan_checksum_performance_2ports(self):\n self.result_table_create(self.chksum_header)\n vxlan = VxlanTestConfig(self, payload_size=self.vxlan_payload)\n@@ -1053,8 +1101,10 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n socket=self.ports_socket)\n core_mask = utils.create_mask(core_list)\n \n- tgen_dut = self.tester.get_local_port(self.dut_port)\n- tgen_tester = self.tester.get_local_port(self.recv_port)\n+ self.dut_ports = self.dut.get_ports_performance(force_different_nic=False)\n+ tx_port = self.tester.get_local_port(self.dut_ports[0])\n+ rx_port = self.tester.get_local_port(self.dut_ports[1])\n+ \n for cal in self.cal_type:\n recv_queue = cal['recvqueue']\n print((utils.GREEN(\"Measure checksum performance of [%s %s %s]\"\n@@ -1063,9 +1113,10 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n # configure flows\n tgen_input = []\n if recv_queue == 'Multi':\n- self.combine_pcap(\"vxlan1.pcap\", \"vxlan1_1.pcap\")\n- self.tester.session.copy_file_to(\"vxlan1.pcap\")\n- tgen_input.append((tgen_dut, tgen_tester, \"vxlan1.pcap\"))\n+ tgen_input.append((tx_port, rx_port, \"vxlan1.pcap\"))\n+ tgen_input.append((tx_port, rx_port, \"vxlan1_1.pcap\"))\n+ else:\n+ tgen_input.append((tx_port, rx_port, \"vxlan1.pcap\"))\n \n # multi queue and signle queue commands\n if recv_queue == 'Multi':\n@@ -1078,24 +1129,34 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n \n self.dut.send_expect(pmd_cmd, \"testpmd> \", 100)\n self.dut.send_expect(\"set fwd csum\", \"testpmd>\", 10)\n- self.dut.send_expect(\"csum parse-tunnel on %d\" %\n- self.dut_port, \"testpmd>\", 10)\n- self.dut.send_expect(\"csum parse-tunnel on %d\" %\n- self.recv_port, \"testpmd>\", 10)\n self.enable_vxlan(self.dut_port)\n self.enable_vxlan(self.recv_port)\n \n # redirect flow to another queue by tunnel filter\n- args = [self.dut_port, vxlan.outer_mac_dst,\n- vxlan.inner_mac_dst, vxlan.inner_ip_dst,\n- 0, 'imac', vxlan.vni, 0]\n- self.tunnel_filter_add(*args)\n+ rule_config = {\n+ 'dut_port': self.dut_port,\n+ 'outer_mac_dst': vxlan.outer_mac_dst,\n+ 'inner_mac_dst': vxlan.inner_mac_dst,\n+ 'inner_ip_dst': vxlan.inner_ip_dst,\n+ 'inner_vlan': 0,\n+ 'tun_filter': 'imac',\n+ 'vni': vxlan.vni,\n+ 'queue': 0\n+ }\n+ self.perf_tunnel_filter_set_rule(rule_config)\n \n if recv_queue == 'Multi':\n- args = [self.dut_port, vxlan_queue.outer_mac_dst,\n- vxlan_queue.inner_mac_dst, vxlan_queue.inner_ip_dst,\n- 0, 'imac', vxlan_queue.vni, 1]\n- self.tunnel_filter_add(*args)\n+ rule_config = {\n+ 'dut_port': self.dut_port,\n+ 'outer_mac_dst': vxlan_queue.outer_mac_dst,\n+ 'inner_mac_dst': vxlan_queue.inner_mac_dst,\n+ 'inner_ip_dst': vxlan_queue.inner_ip_dst,\n+ 'inner_vlan': 0,\n+ 'tun_filter': 'imac',\n+ 'vni': vxlan.vni,\n+ 'queue': 1\n+ }\n+ self.perf_tunnel_filter_set_rule(rule_config)\n \n for pro in cal['csum']:\n self.csum_set_type(pro, self.dut_port)\n@@ -1106,7 +1167,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n wirespeed = self.wirespeed(self.nic, PACKET_LEN, 1)\n \n # run traffic generator\n- _, pps = self.tester.traffic_generator_throughput(tgen_input)\n+ _, pps = self.suite_measure_throughput(tgen_input)\n \n pps /= 1000000.0\n cal['Mpps'] = pps\n@@ -1116,8 +1177,9 @@ class TestVxlan(TestCase, IxiaPacketGenerator):\n self.dut.send_expect(\"quit\", \"# \", 10)\n \n # verify every queue work fine\n+ check_queue = 1\n if recv_queue == 'Multi':\n- for queue in range(self.tunnel_multiqueue):\n+ for queue in range(check_queue):\n self.verify(\"Queue= %d -> TX Port\"\n % (queue) in out,\n \"Queue %d no traffic\" % queue)\n", "prefixes": [ "V1", "3/6" ] }{ "id": 97586, "url": "