From patchwork Tue Nov 22 06:13:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ling, WeiX" X-Patchwork-Id: 120027 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 7082FA057D; Tue, 22 Nov 2022 07:19:16 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 68BEE42D43; Tue, 22 Nov 2022 07:19:16 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 98BF6427EB for ; Tue, 22 Nov 2022 07:19:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669097954; x=1700633954; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=QafC6s3ZOTIcS0WAywmuDxhK0Yx6BaZSUEkBGLOZsEI=; b=EMbidUpkaveX3eBye9mkd7tt3jlMdDMFwebzqUd/Ewc1SDHcMQm5CIkr SDvzwxDTxFEcIBDsOQZ99dWl70ewXrQxOmoqPhC06MXI2swEx/54Uly9z rJIDb3sLZpxjzqGeHugiHZNS1dh1EeEdoaWc+y8fW3XGRB3qtT1CQKKYd hNKnzxaaBPRruew6uFWCT0glVGEw2tcynxABNW6fVN5HNHmE+bPlwq+sc vJG8c7bf9xDbQlW54sBMqwOIYUxTLOy5cQykQndVGY7UQE87L1X120AJO knSyd2YF7/CsHn3yTcecIhK7SwarSY24oMenCsKrsRebzoXrUSJshN5N3 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="311373171" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="311373171" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:19:13 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="641303289" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="641303289" Received: from unknown (HELO localhost.localdomain) ([10.239.252.222]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:19:10 -0800 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V2 1/2] test_plans/vhost_virtio_user_interrupt_cbdma_test_plan: modify testplan by DPDK changed Date: Tue, 22 Nov 2022 14:13:23 +0800 Message-Id: <20221122061323.2891897-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 1.From DPDK-22.11, the dmas parameter have changed, so modify the dmas parameter in the testplan. 2.Add new testcase 4 and 5 to test split and packed ring path with multi-queues scene. Signed-off-by: Wei Ling --- ..._virtio_user_interrupt_cbdma_test_plan.rst | 192 ++++++++++++------ 1 file changed, 126 insertions(+), 66 deletions(-) diff --git a/test_plans/vhost_virtio_user_interrupt_cbdma_test_plan.rst b/test_plans/vhost_virtio_user_interrupt_cbdma_test_plan.rst index 3b74a152..bc4064a1 100644 --- a/test_plans/vhost_virtio_user_interrupt_cbdma_test_plan.rst +++ b/test_plans/vhost_virtio_user_interrupt_cbdma_test_plan.rst @@ -13,87 +13,93 @@ to virtio side, check virtio-user cores can be wakeup status, and virtio-user co status after stop sending packets from traffic generator. This test plan tests virtio-user Rx interrupt and LSC interrupt with vhost-user as the backend when cbdma enable. -..Note: +.. note:: -DPDK local patch that about vhost pmd is needed when testing Vhost asynchronous data path with testpmd. + DPDK local patch that about vhost pmd is needed when testing Vhost asynchronous data path with testpmd. Prerequisites ============= Software -------- - Trex:http://trex-tgn.cisco.com/trex/release/v2.26.tar.gz + + Scapy General set up -------------- 1. Compile DPDK:: - # CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib -Dexamples=all --default-library=static - # ninja -C -j 110 - For example: - CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib -Dexamples=all --default-library=static x86_64-native-linuxapp-gcc - ninja -C x86_64-native-linuxapp-gcc -j 110 + # CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib -Dexamples=all --default-library=static + # ninja -C -j 110 + For example: + CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib -Dexamples=all --default-library=static x86_64-native-linuxapp-gcc + ninja -C x86_64-native-linuxapp-gcc -j 110 2. Get the PCI device ID and DMA device ID of DUT, for example, 0000:18:00.0 is PCI device ID, 0000:00:04.0, 0000:00:04.1 is DMA device ID:: - # ./usertools/dpdk-devbind.py -s + # ./usertools/dpdk-devbind.py -s - Network devices using kernel driver - =================================== - 0000:18:00.0 'Device 159b' if=ens785f0 drv=ice unused=vfio-pci + Network devices using kernel driver + =================================== + 0000:18:00.0 'Device 159b' if=ens785f0 drv=ice unused=vfio-pci - DMA devices using kernel driver - =============================== - 0000:00:04.0 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=vfio-pci - 0000:00:04.1 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=vfio-pci + DMA devices using kernel driver + =============================== + 0000:00:04.0 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=vfio-pci + 0000:00:04.1 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=vfio-pci Test case ========= -Test Case1: Split ring LSC event between vhost-user and virtio-user with cbdma enable -------------------------------------------------------------------------------------- -This case tests the LSC interrupt of split ring virtio-user with vhost-user as the back-end -when vhost uses the asynchronous operations with CBDMA channels. +Test Case 1: Split ring LSC event between vhost-user and virtio-user with cbdma enable +-------------------------------------------------------------------------------------- +This case tests the LSC interrupt of split ring virtio-user with vhost-user as the +back-end when vhost uses the asynchronous operations with CBDMA channels. Flow: Vhost <--> Virtio -1. Bind 1 CBDMA channel to vfio-pci driver, then start vhost-user side:: +1. Bind 1 CBDMA port to vfio-pci driver, then start vhost-user side:: - ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x3000 -n 4 -a 00:04.0 --file-prefix=vhost --vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[txq0;rxq0]' \ - -- -i --lcore-dma=[lcore13@0000:00:04.0] - testpmd> set fwd mac - testpmd> start + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x3000 -n 4 -a 0000:00:04.0 --file-prefix=vhost \ + --vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0]' \ + -- -i + testpmd> set fwd mac + testpmd> start 2. Start virtio-user side:: - ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xc000 -n 4 --no-pci --file-prefix=virtio --vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net -- -i --tx-offloads=0x00 - testpmd> set fwd mac - testpmd> start + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xc000 -n 4 --no-pci --file-prefix=virtio \ + --vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net \ + -- -i --tx-offloads=0x00 + testpmd> set fwd mac + testpmd> start 3. Check the virtio-user side link status:: - testpmd> show port info 0 - #it should show "up" + testpmd> show port info 0 + #it should show "up" 4. Quit the vhost-user side with testpmd, then check the virtio-user side link status:: - testpmd> show port info 0 - #it should show "down" + testpmd> show port info 0 + #it should show "down" -Test Case2: Split ring virtio-user interrupt test with vhost-user as backend and cbdma enable ---------------------------------------------------------------------------------------------- -This case tests Rx interrupt of split ring virtio-user with vhost-user as the back-end when vhost uses the asynchronous operations with CBDMA channels. +Test Case 2: Split ring virtio-user interrupt test with vhost-user as backend and cbdma enable +---------------------------------------------------------------------------------------------- +This case tests Rx interrupt of split ring virtio-user with vhost-user as the back-end when +vhost uses the asynchronous operations with CBDMA channels. Flow: TG --> NIC --> Vhost --> Virtio -1. Bind 1 CBDMA channel and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:: +1. Bind 1 CBDMA port and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:: - ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 --vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[txq0;rxq0]' \ - -- -i --rxq=1 --txq=1 --lcore-dma=[lcore3@0000:00:04.0,lcore3@0000:00:04.1] - testpmd> start + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 -a 0000:af:00.0 -a 0000:00:04.0 \ + --vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0]' \ + -- -i --rxq=1 --txq=1 + testpmd> start 2. Start l3fwd-power with a virtio-user device:: - ./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ - --vdev=virtio_user0,path=./vhost-net -- -p 1 --config="(0,0,14)" --parse-ptype --interrupt-only + ./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ + --vdev=virtio_user0,path=./vhost-net -- -p 1 --config="(0,0,14)" --parse-ptype --interrupt-only 3. Send packets with packet generator, check the virtio-user related core can be wakeup status. @@ -101,51 +107,56 @@ Flow: TG --> NIC --> Vhost --> Virtio 5. Restart sending packets with packet generator, check virtio-user related core change to wakeup status again. -Test Case3: Packed ring LSC event between vhost-user and virtio-user with cbdma enable --------------------------------------------------------------------------------------- -This case tests the LSC interrupt of packed ring virtio-user with vhost-user as the back-end -when vhost uses the asynchronous operations with CBDMA channels. +Test Case 3: Packed ring LSC event between vhost-user and virtio-user with cbdma enable +--------------------------------------------------------------------------------------- +This case tests the LSC interrupt of packed ring virtio-user with vhost-user as the +back-end when vhost uses the asynchronous operations with CBDMA channels. Flow: Vhost <--> Virtio -1. Bind one cbdma port to vfio-pci driver, then start vhost-user side:: +1. Bind 1 CBDMA port to vfio-pci driver, then start vhost-user side:: - ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x3000 -n 4 -a 00:04.0 --file-prefix=vhost --vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[txq0;rxq0]' \ - -- -i --lcore-dma=[lcore13@0000:00:04.0,lcore13@0000:00:04.1] - testpmd> set fwd mac - testpmd> start + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x3000 -n 4 -a 0000:00:04.0 --file-prefix=vhost \ + --vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0]' \ + -- -i + testpmd> set fwd mac + testpmd> start 2. Start virtio-user side:: - ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xc000 -n 4 --no-pci --file-prefix=virtio --vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,packed_vq=1 -- -i --tx-offloads=0x00 - testpmd> set fwd mac - testpmd> start + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xc000 -n 4 --no-pci --file-prefix=virtio \ + --vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,packed_vq=1 \ + -- -i --tx-offloads=0x00 + testpmd> set fwd mac + testpmd> start 3. Check the virtio-user side link status:: - testpmd> show port info 0 - #it should show "up" + testpmd> show port info 0 + #it should show "up" 4. Quit the vhost-user side with testpmd, then check the virtio-user side link status:: - testpmd> show port info 0 - #it should show "down" + testpmd> show port info 0 + #it should show "down" -Test Case4: Packed ring virtio-user interrupt test with vhost-user as backend and cbdma enable ----------------------------------------------------------------------------------------------- -This case tests Rx interrupt of packed ring virtio-user with vhost-user as the back-end when vhost uses the asynchronous operations with CBDMA channels. +Test Case 4: Packed ring virtio-user interrupt test with vhost-user as backend and cbdma enable +----------------------------------------------------------------------------------------------- +This case tests Rx interrupt of packed ring virtio-user with vhost-user as the back-end when +vhost uses the asynchronous operations with CBDMA channels. flow: TG --> NIC --> Vhost --> Virtio -1. Bind one cbdma port and one NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:: +1. Bind 1 CBDMA port and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:: - ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 --vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[txq0;rxq0]' \ - -- -i --rxq=1 --txq=1 --lcore-dma=[lcore3@0000:00:04.0] - testpmd> start + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 -a 0000:af:00.0 -a 0000:00:04.0 \ + --vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0]' \ + -- -i --rxq=1 --txq=1 + testpmd> start 2. Start l3fwd-power with a virtio-user device:: - ./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ - --vdev=virtio_user0,path=./vhost-net,packed_vq=1 -- -p 1 --config="(0,0,14)" --parse-ptype --interrupt-only + ./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ + --vdev=virtio_user0,path=./vhost-net,packed_vq=1 -- -p 1 --config="(0,0,14)" --parse-ptype --interrupt-only 3. Send packets with packet generator, check the virtio-user related core can be wakeup status. @@ -153,3 +164,52 @@ flow: TG --> NIC --> Vhost --> Virtio 5. Restart sending packets with packet generator, check virtio-user related core change to wakeup status again. +Test Case 5: Split ring multi-queues virtio-user interrupt test with vhost-user as backend and cbdma enable +----------------------------------------------------------------------------------------------------------- +This case tests Rx interrupt of split ring virtio-user with multi-queues and vhost-user as the back-end when +vhost uses the asynchronous operations with CBDMA channels. + +flow: TG --> NIC --> Vhost --> Virtio + +1. Bind 1 CBDMA port and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 -a 0000:af:00.0 -a 0000:00:04.0 \ + --vdev 'net_vhost0,iface=vhost-net,queues=2,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0;txq1@0000:00:04.0;rxq1@0000:00:04.0]' \ + -- -i --rxq=2 --txq=2 + testpmd> start + +2. Start l3fwd-power with a virtio-user device:: + + ./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ + --vdev=virtio_user0,path=./vhost-net,queues=2 -- -p 1 --config="(0,0,14),(0,1,15)" --parse-ptype --interrupt-only + +3. Send packets with random ip from packet generator, check packets can forward back and both 2 queues exist packets, check the virtio-user related core can be wakeup status. + +4. Stop sending packets with packet generator, check virtio-user related core change to sleep status. + +5. Restart sending packets with packet generator, check virtio-user related core change to wakeup status again. + +Test Case 6: Packed ring multi-queues virtio-user interrupt test with vhost-user as backend and cbdma enable +------------------------------------------------------------------------------------------------------------ +This case tests Rx interrupt of packed ring virtio-user with multi-queues and vhost-user as the back-end when +vhost uses the asynchronous operations with CBDMA channels. + +flow: TG --> NIC --> Vhost --> Virtio + +1. Bind 1 CBDMA port and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 -a 0000:af:00.0 -a 0000:00:04.0 \ + --vdev 'net_vhost0,iface=vhost-net,queues=2,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0;txq1@0000:00:04.0;rxq1@0000:00:04.0]' \ + -- -i --rxq=2 --txq=2 + testpmd> start + +2. Start l3fwd-power with a virtio-user device:: + + ./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ + --vdev=virtio_user0,path=./vhost-net,queues=2,packed_vq=1 -- -p 1 --config="(0,0,14),(0,1,15)" --parse-ptype --interrupt-only + +3. Send packets with random ip from packet generator, check packets can forward back and both 2 queues exist packets, check the virtio-user related core can be wakeup status. + +4. Stop sending packets with packet generator, check virtio-user related core change to sleep status. + +5. Restart sending packets with packet generator, check virtio-user related core change to wakeup status again. \ No newline at end of file From patchwork Tue Nov 22 06:13:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ling, WeiX" X-Patchwork-Id: 120028 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 982BAA057D; Tue, 22 Nov 2022 07:19:29 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9333942D3E; Tue, 22 Nov 2022 07:19:29 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id E664D427EB for ; Tue, 22 Nov 2022 07:19:27 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669097968; x=1700633968; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=XgQiJKTOiT47rfz9ba4LyNeoxFG6HkHf34yxg53zLeU=; b=Qz9vwvk83qt7AHmPknWQRP/wqgdR9kOhBamkSMz1x+XOUYO+gI2LQvnl BQylt0HdaWOgH0Q9aSMgrBGU0sWjDsduDmrN4PxtM2QuxUENsITmKLFBK 8vuXnCYZSXS8hHO/IC3Pswu8z0VjLeZms9odFLssnaVPFWKQ+Emhqcxj/ sQM9pt67tysNeXQY284SL6iJ8laUE2rtIb/02n9jgpkF5hgkXIHuDCUYy W5PhzKBJ9Wsm7BI+T0DoSHLjUA7iQyKlB+P/fF8d2zFJN1OzfCrrlQl2q 8/iw0P7l5Ox5XqFaDKluxrplMMEzGjob2iX90jRZFko1SyOlUjCGZqCJu g==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="297099562" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="297099562" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:19:27 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="641303368" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="641303368" Received: from unknown (HELO localhost.localdomain) ([10.239.252.222]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:19:24 -0800 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V2 2/2] tests/vhost_virtio_user_interrupt_cbdma: modify testsuite by DPDK changed Date: Tue, 22 Nov 2022 14:13:37 +0800 Message-Id: <20221122061337.2891957-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 1.From DPDK-22.11, the dmas parameter have changed, so modify the dmas parameter in the testuite. 2.Add new testcase 4 and 5 to test split and packed ring path with multi-queues scene. Signed-off-by: Wei Ling --- ...Suite_vhost_virtio_user_interrupt_cbdma.py | 207 +++++++++++++----- 1 file changed, 151 insertions(+), 56 deletions(-) diff --git a/tests/TestSuite_vhost_virtio_user_interrupt_cbdma.py b/tests/TestSuite_vhost_virtio_user_interrupt_cbdma.py index e3dc51a9..19a45589 100644 --- a/tests/TestSuite_vhost_virtio_user_interrupt_cbdma.py +++ b/tests/TestSuite_vhost_virtio_user_interrupt_cbdma.py @@ -10,6 +10,7 @@ Virtio-user interrupt need test with l3fwd-power sample import re import time +import framework.packet as packet import framework.utils as utils from framework.pmd_output import PmdOutput from framework.test_case import TestCase @@ -77,21 +78,29 @@ class TestVirtioUserInterruptCbdma(TestCase): ) return True if out == "2048" else False - def launch_l3fwd(self, path, packed=False): - self.core_interrupt = self.l3fwd_core_list[0] + def launch_l3fwd(self, path, packed=False, multi_queue=False): + if multi_queue: + queues = 2 + else: + queues = 1 example_para = "./%s " % self.app_l3fwd_power_path if not packed: - vdev = "virtio_user0,path=%s,cq=1" % path + vdev = "virtio_user0,path=%s,queues=%d" % (path, queues) else: - vdev = "virtio_user0,path=%s,cq=1,packed_vq=1" % path + vdev = "virtio_user0,path=%s,queues=%d,packed_vq=1" % (path, queues) eal_params = self.dut.create_eal_parameters( cores=self.l3fwd_core_list, prefix="l3fwd-pwd", no_pci=True, vdevs=[vdev] ) if self.check_2M_env: eal_params += " --single-file-segments" - para = ( - " --config='(0,0,%s)' --parse-ptype --interrupt-only" % self.core_interrupt - ) + if not multi_queue: + config = " --config='(0,0,%s)'" % self.l3fwd_core_list[0] + else: + config = " --config='(0,0,%s),(0,1,%s)'" % ( + self.l3fwd_core_list[0], + self.l3fwd_core_list[1], + ) + para = config + " --parse-ptype --interrupt-only" cmd_l3fwd = example_para + eal_params + " --log-level='user1,7' -- -p 1 " + para self.l3fwd.get_session_before(timeout=2) self.l3fwd.send_expect(cmd_l3fwd, "POWER", 40) @@ -102,13 +111,19 @@ class TestVirtioUserInterruptCbdma(TestCase): else: self.logger.info("Launch l3fwd-power sample finished") - def check_interrupt_log(self, status, out): + def check_interrupt_log(self, status, out, multi_queue=False): if status == "waked up": info = "lcore %s is waked up from rx interrupt on port 0 queue 0" elif status == "sleeps": info = "lcore %s sleeps until interrupt triggers" - info = info % self.core_interrupt - self.verify(info in out, "The CPU status not right for %s" % info) + if not multi_queue: + info = info % self.l3fwd_core_list[0] + self.verify(info in out, "The CPU status not right for %s" % info) + else: + info1 = info % self.l3fwd_core_list[0] + self.verify(info1 in out, "The CPU status not right for %s" % info) + info2 = info % self.l3fwd_core_list[0] + self.verify(info2 in out, "The CPU status not right for %s" % info) def check_virtio_side_link_status(self, status): out = self.virtio_pmd.execute_cmd("show port info 0") @@ -168,6 +183,24 @@ class TestVirtioUserInterruptCbdma(TestCase): 60, ) + def send_packet(self, multi_queue=False): + pkt_count = 100 + pkt = packet.Packet() + if not multi_queue: + scapy_pkt = 'Ether(dst="52:54:00:00:00:01")/IP(src="192.168.0.1")/("X"*64)' + pkt.update_pkt(scapy_pkt) + pkt.send_pkt(crb=self.tester, tx_port=self.tx_interface, count=pkt_count) + else: + pkt_list = [] + for i in range(pkt_count): + scapy_pkt = ( + 'Ether(dst="52:54:00:00:00:01")/IP(src="192.168.0.%d")/("X"*64)' + % (i + 1) + ) + pkt_list.append(scapy_pkt) + pkt.update_pkt(pkt_list) + pkt.send_pkt(crb=self.tester, tx_port=self.tx_interface) + def test_split_ring_lsc_event_between_vhost_user_and_virtio_user_with_cbdma_enable( self, ): @@ -175,10 +208,13 @@ class TestVirtioUserInterruptCbdma(TestCase): Test Case1: Split ring LSC event between vhost-user and virtio-user with cbdma enable """ self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=1) - lcore_dma = "lcore%s@%s" % (self.vhost_core_list[1], self.cbdma_list[0]) - vhost_param = "--lcore-dma=[%s]" % lcore_dma + dmas = "txq0@%s;" "rxq0@%s" % ( + self.cbdma_list[0], + self.cbdma_list[0], + ) + vhost_param = "" vhost_eal_param = ( - "--vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[txq0;rxq0]'" + "--vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[%s]'" % dmas ) ports = self.cbdma_list self.vhost_pmd.start_testpmd( @@ -213,16 +249,14 @@ class TestVirtioUserInterruptCbdma(TestCase): """ Test Case2: Split ring virtio-user interrupt test with vhost-user as backend and cbdma enable """ - self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=2) - lcore_dma = "lcore%s@%s,lcore%s@%s" % ( - self.vhost_core_list[1], + self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=1) + dmas = "txq0@%s;" "rxq0@%s" % ( + self.cbdma_list[0], self.cbdma_list[0], - self.vhost_core_list[1], - self.cbdma_list[1], ) - vhost_param = "--rxq=1 --txq=1 --lcore-dma=[%s]" % lcore_dma + vhost_param = "--rxq=1 --txq=1" vhost_eal_param = ( - "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[txq0;rxq0]'" + "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas ) ports = self.cbdma_list ports.append(self.dut.ports_info[0]["pci"]) @@ -236,20 +270,10 @@ class TestVirtioUserInterruptCbdma(TestCase): ) self.vhost_pmd.execute_cmd("start") self.launch_l3fwd(path="./vhost-net") - # double check the status of interrupt core - for _ in range(2): - self.tester.scapy_append( - 'pk=[Ether(dst="52:54:00:00:00:01")/IP()/("X"*64)]' - ) - self.tester.scapy_append( - 'sendp(pk, iface="%s", count=100)' % self.tx_interface - ) - self.tester.scapy_execute() - time.sleep(3) - out = self.l3fwd.get_session_before() - self.logger.info(out) - self.check_interrupt_log(status="waked up", out=out) - self.check_interrupt_log(status="sleeps", out=out) + self.send_packet() + out = self.l3fwd.get_session_before() + self.check_interrupt_log(status="waked up", out=out) + self.check_interrupt_log(status="sleeps", out=out) def test_packed_ring_lsc_event_between_vhost_user_and_virtio_user_with_cbdma_enable( self, @@ -258,10 +282,13 @@ class TestVirtioUserInterruptCbdma(TestCase): Test Case3: Packed ring LSC event between vhost-user and virtio-user with cbdma enable """ self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=1) - lcore_dma = "lcore%s@%s" % (self.vhost_core_list[1], self.cbdma_list[0]) - vhost_param = "--lcore-dma=[%s]" % lcore_dma + dmas = "txq0@%s;" "rxq0@%s" % ( + self.cbdma_list[0], + self.cbdma_list[0], + ) + vhost_param = "--tx-offloads=0x00" vhost_eal_param = ( - "--vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[txq0;rxq0]'" + "--vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[%s]'" % dmas ) ports = self.cbdma_list self.vhost_pmd.start_testpmd( @@ -296,16 +323,14 @@ class TestVirtioUserInterruptCbdma(TestCase): """ Test Case4: Packed ring virtio-user interrupt test with vhost-user as backend and cbdma enable """ - self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=2) - lcore_dma = "lcore%s@%s,lcore%s@%s" % ( - self.vhost_core_list[1], + self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=1) + dmas = "txq0@%s;" "rxq0@%s" % ( + self.cbdma_list[0], self.cbdma_list[0], - self.vhost_core_list[1], - self.cbdma_list[1], ) - vhost_param = "--rxq=1 --txq=1 --lcore-dma=[%s]" % lcore_dma + vhost_param = "--rxq=1 --txq=1" vhost_eal_param = ( - "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[txq0;rxq0]'" + "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas ) ports = self.cbdma_list ports.append(self.dut.ports_info[0]["pci"]) @@ -318,20 +343,90 @@ class TestVirtioUserInterruptCbdma(TestCase): ) self.vhost_pmd.execute_cmd("start") self.launch_l3fwd(path="./vhost-net", packed=True) - # double check the status of interrupt core - for _ in range(2): - self.tester.scapy_append( - 'pk=[Ether(dst="52:54:00:00:00:01")/IP()/("X"*64)]' + self.send_packet() + out = self.l3fwd.get_session_before() + self.check_interrupt_log(status="waked up", out=out) + self.check_interrupt_log(status="sleeps", out=out) + + def test_split_ring_multi_queues_virtio_user_interrupt_test_with_vhost_user_as_backend_and_cbdma_enable( + self, + ): + """ + Test Case 5: Split ring multi-queues virtio-user interrupt test with vhost-user as backend and cbdma enable + """ + self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=1) + dmas = ( + "txq0@%s;" + "rxq0@%s;" + "txq1@%s;" + "rxq1@%s" + % ( + self.cbdma_list[0], + self.cbdma_list[0], + self.cbdma_list[0], + self.cbdma_list[0], ) - self.tester.scapy_append( - 'sendp(pk, iface="%s", count=100)' % self.tx_interface + ) + vhost_param = "--rxq=2 --txq=2" + vhost_eal_param = ( + "--vdev 'net_vhost0,iface=vhost-net,queues=2,dmas=[%s]'" % dmas + ) + ports = self.cbdma_list + ports.append(self.dut.ports_info[0]["pci"]) + self.logger.info(ports) + self.vhost_pmd.start_testpmd( + cores=self.vhost_core_list, + ports=ports, + prefix="vhost", + eal_param=vhost_eal_param, + param=vhost_param, + ) + self.vhost_pmd.execute_cmd("start") + self.launch_l3fwd(path="./vhost-net", multi_queue=True) + self.send_packet(multi_queue=True) + out = self.l3fwd.get_session_before() + self.check_interrupt_log(status="waked up", out=out) + self.check_interrupt_log(status="sleeps", out=out) + + def test_packed_ring_multi_queues_virtio_user_interrupt_test_with_vhost_user_as_backend_and_cbdma_enable( + self, + ): + """ + Test Case 6: Packed ring multi-queues virtio-user interrupt test with vhost-user as backend and cbdma enable + """ + self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num=1) + dmas = ( + "txq0@%s;" + "rxq0@%s;" + "txq1@%s;" + "rxq1@%s" + % ( + self.cbdma_list[0], + self.cbdma_list[0], + self.cbdma_list[0], + self.cbdma_list[0], ) - self.tester.scapy_execute() - time.sleep(3) - out = self.l3fwd.get_session_before() - self.logger.info(out) - self.check_interrupt_log(status="waked up", out=out) - self.check_interrupt_log(status="sleeps", out=out) + ) + vhost_param = "--rxq=2 --txq=2" + vhost_eal_param = ( + "--vdev 'net_vhost0,iface=vhost-net,queues=2,dmas=[%s]'" % dmas + ) + ports = self.cbdma_list + ports.append(self.dut.ports_info[0]["pci"]) + self.logger.info(ports) + self.vhost_pmd.start_testpmd( + cores=self.vhost_core_list, + ports=ports, + prefix="vhost", + eal_param=vhost_eal_param, + param=vhost_param, + ) + self.vhost_pmd.execute_cmd("start") + self.launch_l3fwd(path="./vhost-net", packed=True, multi_queue=True) + self.send_packet(multi_queue=True) + out = self.l3fwd.get_session_before() + self.check_interrupt_log(status="waked up", out=out) + self.check_interrupt_log(status="sleeps", out=out) def tear_down(self): """