From patchwork Tue Aug 2 07:07:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ling, WeiX" X-Patchwork-Id: 114520 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 9725DA0543; Tue, 2 Aug 2022 09:12:50 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8DA0340141; Tue, 2 Aug 2022 09:12:50 +0200 (CEST) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id A3709400D7 for ; Tue, 2 Aug 2022 09:12:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1659424368; x=1690960368; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=DHf1m904m+SZc2HErE9sCQ7o9VZwpk5BWj+PKE+XWfk=; b=gNu1x+FBlI+CU9xoccBmrz1kx/OQN87APUOx6FA+I/tPRr21LFcGqHa/ 21Y1Z3tRo3C2Om5dXCseDzFFgs5fqDa9LgQK27V4X/lu8zHsATsTOU/aN Brl7Nojwv0bbOni4I/awtNXSVq9w4Y6shxwx9iXgn+92i1UQ3jBzMCDdc eAG3K7XAJch3tBkjy5DjZL9uZ+UXOywPXZN7Hj4F0NE78DaZ4trI7cuQ8 xnUD+cyoktAwvaWlZI/StUpPcNQnXBeBR1QSxh4KWNiOVxEJrMSYi/X4n gZaTL3ElD0zlSypmTufqcS6vtkqiTffWklBIrDqyygwgLroQPEzCR68gM Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10426"; a="351050215" X-IronPort-AV: E=Sophos;i="5.93,210,1654585200"; d="scan'208";a="351050215" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Aug 2022 00:12:47 -0700 X-IronPort-AV: E=Sophos;i="5.93,210,1654585200"; d="scan'208";a="630591202" Received: from unknown (HELO localhost.localdomain) ([10.239.252.222]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Aug 2022 00:12:38 -0700 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V3 2/2] tests/vhost_pmd_xstats: modify testsuite by DPDK changed Date: Tue, 2 Aug 2022 03:07:01 -0400 Message-Id: <20220802070701.1101972-1-weix.ling@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 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 According to DPDK commit be75dc99ea(vhost: support per-virtqueue statistics), the return output of `show port xstats 1` command have changed, so modify the testsuite to send different IP packets to verify the different queues can receive the packets. Signed-off-by: Wei Ling --- tests/TestSuite_vhost_pmd_xstats.py | 226 ++++++++++++++++------------ 1 file changed, 128 insertions(+), 98 deletions(-) diff --git a/tests/TestSuite_vhost_pmd_xstats.py b/tests/TestSuite_vhost_pmd_xstats.py index ec95b7f1..b2a44971 100644 --- a/tests/TestSuite_vhost_pmd_xstats.py +++ b/tests/TestSuite_vhost_pmd_xstats.py @@ -7,17 +7,13 @@ DPDK Test suite. vhost pmd xstats test suite. """ -import copy import datetime import re -import time -import framework.utils as utils from framework.packet import Packet from framework.pmd_output import PmdOutput -from framework.qemu_kvm import QEMUKvm -from framework.settings import HEADER_SIZE from framework.test_case import TestCase +from framework.utils import convert_int2ip, convert_ip2int ETHER_JUMBO_FRAME_MTU = 9000 DEFAULT_JUMBO_FRAME_MTU = 1500 @@ -32,6 +28,7 @@ class TestVhostPmdXstats(TestCase): txport = self.tester.get_local_port(self.dut_ports[0]) self.txItf = self.tester.get_interface(txport) self.scapy_num = 0 + self.queues = 2 self.dmac = self.dut.get_mac_address(self.dut_ports[0]) self.virtio1_mac = "52:54:00:00:00:01" self.core_config = "1S/6C/1T" @@ -73,31 +70,63 @@ class TestVhostPmdXstats(TestCase): Send a packet to port """ self.scapy_num += 1 - pkt = Packet(pkt_type="TCP", pkt_len=pktsize) - pkt.config_layer("ether", {"dst": dmac}) - pkt.send_pkt(self.tester, tx_port=self.txItf, count=num) + options = { + "ip": {"src": "192.168.0.1", "dst": "192.168.1.1"}, + "layers_config": [], + } + # give a default value to ip + try: + src_ip_num = convert_ip2int(options["ip"]["src"]) + except: + src_ip_num = 0 + try: + dst_ip_num = convert_ip2int(options["ip"]["dst"]) + except: + dst_ip_num = 0 + if num == 1: + count = 1 + group = num + else: + count = 1000 + group = int(num / count) + for _ in range(group): + srcip = convert_int2ip(src_ip_num, ip_type=4) + dstip = convert_int2ip(dst_ip_num, ip_type=4) + pkt = Packet(pkt_type="IP_RAW", pkt_len=pktsize) + pkt.config_layer("ether", {"dst": dmac}) + pkt.config_layer("ipv4", {"src": srcip, "dst": dstip}) + dst_ip_num += 1 + pkt.send_pkt(self.tester, tx_port=self.txItf, count=count) - def send_verify(self, scope, mun): + def send_verify(self, scope, num): """ according the scope to check results """ out = self.vhost_user_pmd.execute_cmd("show port xstats 1") - packet_rx = re.search("rx_%s_packets:\s*(\d*)" % scope, out) - sum_packet_rx = packet_rx.group(1) - packet_tx = re.search("tx_%s_packets:\s*(\d*)" % scope, out) - sum_packet_tx = packet_tx.group(1) + rx_pattern = re.compile("rx_q\d+_%s_packets:\s*(\d+)" % scope) + packet_rx = rx_pattern.findall(out) + sum_packet_rx = 0 + for item in packet_rx: + sum_packet_rx += int(item) + + tx_pattern = re.compile("tx_q\d+_%s_packets:\s*(\d+)" % scope) + packet_tx = tx_pattern.findall(out) + sum_packet_tx = 0 + for item in packet_tx: + sum_packet_tx += int(item) + self.verify( - int(sum_packet_rx) >= mun, "Insufficient the received packets from nic" + int(sum_packet_rx) == num, "Insufficient the received packets from nic" ) self.verify( - int(sum_packet_tx) >= mun, "Insufficient the received packets from virtio" + int(sum_packet_tx) == num, "Insufficient the received packets from virtio" ) def start_vhost_testpmd(self): """ start testpmd on vhost """ - vdevs = ["net_vhost0,iface=vhost-net,queues=2,client=0"] + vdevs = ["net_vhost0,iface=vhost-net,queues=%d,client=0" % self.queues] param = "--nb-cores=2 --rxq=2 --txq=2" self.vhost_user_pmd.start_testpmd( cores=self.core_list_host, @@ -117,8 +146,8 @@ class TestVhostPmdXstats(TestCase): if self.check_2M_env: eal_param += " --single-file-segments" vdevs = [ - "net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,queues=2,%s" - % args["version"] + "net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,queues=%d,%s" + % (self.queues, args["version"]) ] param = "%s --rss-ip --nb-cores=2 --rxq=2 --txq=2" % args["path"] self.virtio_user0_pmd.start_testpmd( @@ -137,7 +166,7 @@ class TestVhostPmdXstats(TestCase): Verify receiving and transmitting packets correctly in the Vhost PMD xstats """ out = self.vhost_user_pmd.execute_cmd("show port xstats 1") - p = re.compile(r"rx_size_[0-9]+_[to_\w+]*packets") + p = re.compile(r"rx_q0_size_[0-9]+_[\w+]*packets") categories = p.findall(out) categories = categories[:-1] self.verify( @@ -145,7 +174,7 @@ class TestVhostPmdXstats(TestCase): ) for cat in categories: scope = re.search(r"(?<=rx_)\w+(?=_packets)", cat).group(0) - pktsize = int(re.search(r"(?<=rx_size_)\d+", cat).group(0)) + pktsize = int(re.search(r"(?<=rx_q0_size_)\d+", cat).group(0)) if pktsize > 1518: self.tester.send_expect( "ifconfig %s mtu %d" % (self.txItf, ETHER_JUMBO_FRAME_MTU), "# " @@ -165,38 +194,25 @@ class TestVhostPmdXstats(TestCase): "ifconfig %s mtu %d" % (self.txItf, DEFAULT_JUMBO_FRAME_MTU), "# " ) - def test_vhost_xstats_virtio11_mergeable(self): + def test_vhost_xstats_split_ring_inorder_mergeable_path(self): """ - performance for Vhost PVP virtio1.1 Mergeable Path. + Test Case 1: Vhost pmd xstats stability test with split ring inorder mergeable path """ - self.scapy_num = 0 virtio_pmd_arg = { - "version": "in_order=0,packed_vq=1,mrg_rxbuf=1", + "version": "in_order=1,mrg_rxbuf=1", "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() self.start_virtio_testpmd(virtio_pmd_arg) self.xstats_number_and_type_verify() - # stability test with basic packets number check - self.scapy_num = 0 - date_old = datetime.datetime.now() - date_new = date_old + datetime.timedelta(minutes=2) - while 1: - date_now = datetime.datetime.now() - scope = "multicast" - self.dmac = "01:00:00:33:00:01" - self.scapy_send_packet(64, self.dmac, 1) - if date_now >= date_new: - break - self.send_verify(scope, self.scapy_num) self.close_all_testpmd() - def test_vhost_xstats_virtio11_no_mergeable(self): + def test_vhost_xstats_split_ring_inorder_no_mergeable_path(self): """ - performance for Vhost PVP virtio1.1 no_mergeable Path. + Test Case 2: Vhost pmd xstats test with split ring inorder non-mergeable path """ virtio_pmd_arg = { - "version": "in_order=0,packed_vq=1,mrg_rxbuf=0", + "version": "in_order=1,mrg_rxbuf=0", "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() @@ -204,12 +220,12 @@ class TestVhostPmdXstats(TestCase): self.xstats_number_and_type_verify() self.close_all_testpmd() - def test_vhost_xstats_virtio11_inorder_mergeable(self): + def test_vhost_xstats_split_ring_mergeable_path(self): """ - performance for Vhost PVP virtio1.1 inorder Mergeable Path. + Test Case 3: Vhost pmd xstats test with split ring mergeable path """ virtio_pmd_arg = { - "version": "in_order=1,packed_vq=1,mrg_rxbuf=1", + "version": "in_order=0,mrg_rxbuf=1", "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() @@ -217,101 +233,90 @@ class TestVhostPmdXstats(TestCase): self.xstats_number_and_type_verify() self.close_all_testpmd() - def test_vhost_xstats_virtio11_inorder_no_mergeable(self): + def test_vhost_xstats_split_ring_no_mergeable_path(self): """ - performance for Vhost PVP virtio1.1 inorder no_mergeable Path. + Test Case 4: Vhost pmd xstats test with split ring non-mergeable path """ virtio_pmd_arg = { - "version": "in_order=1,packed_vq=1,mrg_rxbuf=0,vectorized=1", - "path": "--rx-offloads=0x10 --enable-hw-vlan-strip --rss-ip", + "version": "in_order=0,mrg_rxbuf=0,vectorized=1", + "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() self.start_virtio_testpmd(virtio_pmd_arg) self.xstats_number_and_type_verify() self.close_all_testpmd() - def test_vhost_xstats_virtio11_vector(self): + def test_vhost_xstats_split_ring_vector_rx_path(self): """ - performance for Vhost PVP virtio1.1 inorder no_mergeable Path. + Test Case 5: Vhost pmd xstats test with split ring vector_rx path """ virtio_pmd_arg = { - "version": "in_order=1,packed_vq=1,mrg_rxbuf=0,vectorized=1", - "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", + "version": "in_order=0,mrg_rxbuf=0,vectorized=1", + "path": "--tx-offloads=0x0", } self.start_vhost_testpmd() self.start_virtio_testpmd(virtio_pmd_arg) self.xstats_number_and_type_verify() - # stability test with basic packets number check - self.scapy_num = 0 - date_old = datetime.datetime.now() - date_new = date_old + datetime.timedelta(minutes=2) - while 1: - date_now = datetime.datetime.now() - scope = "broadcast" - self.dmac = "ff:ff:ff:ff:ff:ff" - self.scapy_send_packet(64, self.dmac, 1) - if date_now >= date_new: - break - self.send_verify(scope, self.scapy_num) self.close_all_testpmd() - def test_vhost_xstats_virtio11_vector_ringsize_not_powerof_2(self): + def test_vhost_xstats_packed_ring_inorder_mergeable_path(self): """ - performance for Vhost PVP virtio1.1 inorder no_mergeable Path. + Test Case 6: Vhost pmd xstats test with packed ring inorder mergeable path """ virtio_pmd_arg = { - "version": "in_order=1,packed_vq=1,mrg_rxbuf=0,vectorized=1,queue_size=1221", - "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip --rxd=1221 --txd=1221", + "version": "in_order=1,mrg_rxbuf=1,packed_vq=1", + "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() self.start_virtio_testpmd(virtio_pmd_arg) self.xstats_number_and_type_verify() - # stability test with basic packets number check - self.scapy_num = 0 - date_old = datetime.datetime.now() - date_new = date_old + datetime.timedelta(minutes=2) - while 1: - date_now = datetime.datetime.now() - scope = "broadcast" - self.dmac = "ff:ff:ff:ff:ff:ff" - self.scapy_send_packet(64, self.dmac, 1) - if date_now >= date_new: - break - self.send_verify(scope, self.scapy_num) self.close_all_testpmd() - def test_vhost_xstats_inorder_mergeable(self): + def test_vhost_xstats_packed_ring_inorder_no_mergeable_path(self): """ - performance for Vhost PVP In_order mergeable Path. + Test Case 7: Vhost pmd xstats test with packed ring inorder non-mergeable path """ virtio_pmd_arg = { - "version": "packed_vq=0,in_order=1,mrg_rxbuf=1", - "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", + "version": "in_order=1,mrg_rxbuf=0,vectorized=1,packed_vq=1", + "path": "--rx-offloads=0x10 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() self.start_virtio_testpmd(virtio_pmd_arg) self.xstats_number_and_type_verify() self.close_all_testpmd() - def test_vhost_xstats_inorder_no_mergeable(self): + def test_vhost_xstats_packed_ring_mergeable_path(self): """ - performance for Vhost PVP In_order no_mergeable Path. + Test Case 8: Vhost pmd xstats test with packed ring mergeable path """ + self.scapy_num = 0 virtio_pmd_arg = { - "version": "packed_vq=0,in_order=1,mrg_rxbuf=0", + "version": "in_order=0,mrg_rxbuf=1,packed_vq=1", "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() self.start_virtio_testpmd(virtio_pmd_arg) self.xstats_number_and_type_verify() + # stability test with basic packets number check + self.scapy_num = 0 + date_old = datetime.datetime.now() + date_new = date_old + datetime.timedelta(minutes=2) + while 1: + date_now = datetime.datetime.now() + scope = "multicast" + self.dmac = "01:00:00:33:00:01" + self.scapy_send_packet(64, self.dmac, 1) + if date_now >= date_new: + break + self.send_verify(scope, self.scapy_num) self.close_all_testpmd() - def test_vhost_xstats_mergeable(self): + def test_vhost_xstats_packed_ring_no_mergeable_path(self): """ - performance for Vhost PVP Mergeable Path. + Test Case 9: Vhost pmd xstats test with packed ring non-mergeable path """ virtio_pmd_arg = { - "version": "packed_vq=0,in_order=0,mrg_rxbuf=1", + "version": "in_order=0,mrg_rxbuf=0,packed_vq=1", "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() @@ -319,30 +324,54 @@ class TestVhostPmdXstats(TestCase): self.xstats_number_and_type_verify() self.close_all_testpmd() - def test_vhost_xstats_no_mergeable(self): + def test_vhost_xstats_packed_ring_vectorized_path(self): """ - performance for Vhost PVP no_mergeable Path. + Test Case 10: Vhost pmd xstats test with packed ring vectorized path """ virtio_pmd_arg = { - "version": "packed_vq=0,in_order=0,mrg_rxbuf=0,vectorized=1", + "version": "in_order=1,mrg_rxbuf=0,vectorized=1,packed_vq=1", "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip", } self.start_vhost_testpmd() self.start_virtio_testpmd(virtio_pmd_arg) self.xstats_number_and_type_verify() + # stability test with basic packets number check + self.scapy_num = 0 + date_old = datetime.datetime.now() + date_new = date_old + datetime.timedelta(minutes=2) + while 1: + date_now = datetime.datetime.now() + scope = "broadcast" + self.dmac = "ff:ff:ff:ff:ff:ff" + self.scapy_send_packet(64, self.dmac, 1) + if date_now >= date_new: + break + self.send_verify(scope, self.scapy_num) self.close_all_testpmd() - def test_vhost_xstats_vector_rx(self): + def test_vhost_xstats_packed_ring_vectorized_path_ringsize_not_powerof_2(self): """ - performance for Vhost PVP Vector_RX Path + Test Case 11: Vhost pmd xstats test with packed ring vectorized path with ring size is not power of 2 """ virtio_pmd_arg = { - "version": "packed_vq=0,in_order=0,mrg_rxbuf=0,vectorized=1", - "path": "--tx-offloads=0x0", + "version": "in_order=1,mrg_rxbuf=0,vectorized=1,queue_size=1221,packed_vq=1", + "path": "--tx-offloads=0x0 --enable-hw-vlan-strip --rss-ip --rxd=1221 --txd=1221", } self.start_vhost_testpmd() self.start_virtio_testpmd(virtio_pmd_arg) self.xstats_number_and_type_verify() + # stability test with basic packets number check + self.scapy_num = 0 + date_old = datetime.datetime.now() + date_new = date_old + datetime.timedelta(minutes=2) + while 1: + date_now = datetime.datetime.now() + scope = "broadcast" + self.dmac = "ff:ff:ff:ff:ff:ff" + self.scapy_send_packet(64, self.dmac, 1) + if date_now >= date_new: + break + self.send_verify(scope, self.scapy_num) self.close_all_testpmd() def close_all_testpmd(self): @@ -356,9 +385,10 @@ class TestVhostPmdXstats(TestCase): self.vhost_user_pmd.execute_cmd("clear port xstats 1") out = self.vhost_user_pmd.execute_cmd("show port xstats 1") - packet = re.search("rx_%s_packets:\s*(\d*)" % scope, out) - sum_packet = packet.group(1) - self.verify(int(sum_packet) == 0, "Insufficient the received package") + rx_pattern = re.compile("rx_q\d+_%s_packets:\s*(\d+)" % scope) + rx_packet_list = rx_pattern.findall(out) + for rx_packet in rx_packet_list: + self.verify(int(rx_packet) == 0, "Insufficient the received package") def tear_down(self): """