From patchwork Tue Nov 22 06:52:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ling, WeiX" X-Patchwork-Id: 120037 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 32E38A057E; Tue, 22 Nov 2022 07:58:23 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2ED5D42D48; Tue, 22 Nov 2022 07:58:23 +0100 (CET) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id EDC52427EB for ; Tue, 22 Nov 2022 07:58:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669100302; x=1700636302; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=WOkInPMltwoVu4T6AIiMRElpLgzA4K3aEhfxAni3aZs=; b=as5H4Ud/egJoJltSSllCOKUJD0owuVW7GHOcoV2QOVjHMLkqTI2M0PhL 5wFVLM9HjETGIwY2Ex0k16e5tGq8Vvdwf8Bc6a3aRZtemGCIUJa5q9HnI XiwoxIKUnwg2PiXJ0pXmkOI74oImoxvVdwcLfYFHNx5qwK7DSpdBuQe9s cFEQ/aHEbVrkvrHr3xYLZB5H6+l0yBVqbaMISA688vG8Wgzrc2AjfVwSS JmAiQTnwt07sxu+hbvMF4en1vkyEtQPCWRwh9WXT0J9RjxvhhO+pSbUL/ HLJwnSK+YV2UxP1wPvoJ0H3XBKqHsTsmDl/GX07fNS9FJiCD4PmOmOYA8 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="375892999" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="375892999" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:58:21 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="672383547" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="672383547" Received: from unknown (HELO localhost.localdomain) ([10.239.252.222]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:58:18 -0800 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V3 1/3] test_plans/index: add vhost_user_interrupt_cbdma_test_plan Date: Tue, 22 Nov 2022 14:52:32 +0800 Message-Id: <20221122065232.2894015-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 Add vhost_user_interrupt_cbdma_test_plan config in index.rst. Signed-off-by: Wei Ling --- test_plans/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/test_plans/index.rst b/test_plans/index.rst index 68739dd8..86357e69 100644 --- a/test_plans/index.rst +++ b/test_plans/index.rst @@ -149,6 +149,7 @@ The following are the test plans for the DPDK DTS automated test system. speed_capabilities_test_plan vhost_cbdma_test_plan vhost_user_interrupt_test_plan + vhost_user_interrupt_cbdma_test_plan sriov_kvm_test_plan stats_checks_test_plan eventdev_pipeline_test_plan From patchwork Tue Nov 22 06:52:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Ling, WeiX" X-Patchwork-Id: 120038 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 55429A057E; Tue, 22 Nov 2022 07:58:32 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5102B42D4B; Tue, 22 Nov 2022 07:58:32 +0100 (CET) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 94492427EB for ; Tue, 22 Nov 2022 07:58:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669100311; x=1700636311; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=FA9UDWBaUrubrqFjaxlqFPreSkM5UAKwGmkbrdIQKvI=; b=B3+G53w+ogd2IwCsy4B/LYKbVns8G9nE5bDUc+LMFBfv9C3hJLQyPOrA nl9JhvmltLxbBKellLfM1nSGeyV5KfQd7K2kqlpHK/b3RQY01Fa1a3sBw p7JBmULBP9PU0isnGLGMrxWXCeDoL50vcMESmafoPhlL0Ng0nKm3nQ5gi ogvt4phmCQ0jWsQh1+iWzPnWigYvX5qbAk/kBKGEYx4k4gZQvoaOE/0vh miJjUyPA1QxFdifXKRJbnZsO7LhdyWQ8ZcrCoQ0LhOWpVFfBHRsdpgsv5 jfp72UKyyGC86dsceNZwz4Iw62tn+w88mL56TR4c4cPB5ym5dsgsZfO6f g==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="375893011" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="375893011" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:58:30 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="970371844" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="970371844" Received: from unknown (HELO localhost.localdomain) ([10.239.252.222]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:58:28 -0800 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V3 2/3] test_plans/vhost_user_interrupt_cbdma_test_plan: add new testplan Date: Tue, 22 Nov 2022 14:52:42 +0800 Message-Id: <20221122065242.2894075-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 Add new vhost_user_interrupt_cbdma testplan to test the virtio enqueue and dequeue use l3fwd-power with split ring and packed ring path and CBDMA. Signed-off-by: Wei Ling --- .../vhost_user_interrupt_cbdma_test_plan.rst | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 test_plans/vhost_user_interrupt_cbdma_test_plan.rst diff --git a/test_plans/vhost_user_interrupt_cbdma_test_plan.rst b/test_plans/vhost_user_interrupt_cbdma_test_plan.rst new file mode 100644 index 00000000..3eab4797 --- /dev/null +++ b/test_plans/vhost_user_interrupt_cbdma_test_plan.rst @@ -0,0 +1,84 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright(c) 2022 Intel Corporation + +============================================== +vhost-user interrupt mode with CBDMA test plan +============================================== + +Description +=========== + +Vhost-user interrupt need test with l3fwd-power sample with CBDMA channel, +small packets send from virtio-user to vhost side, check vhost-user cores +can be wakeup,and vhost-user cores should be back to sleep after stop +sending packets from virtio side. + +.. note:: + + 1.For packed virtqueue virtio-net test, need qemu version > 4.2.0 and VM kernel version > 5.1, and packed ring multi-queues not support reconnect in qemu yet. + 2.For split virtqueue virtio-net with multi-queues server mode test, better to use qemu version >= 5.2.0, dut to qemu(v4.2.0~v5.1.0) exist split ring multi-queues reconnection issue. + 3.Kernel version > 4.8.0, mostly linux distribution don't support vfio-noiommu mode by default, + so testing this case need rebuild kernel to enable vfio-noiommu. + 4.When DMA devices are bound to vfio driver, VA mode is the default and recommended. For PA mode, page by page mapping may exceed IOMMU's max capability, better to use 1G guest hugepage. + 5.DPDK local patch that about vhost pmd is needed when testing Vhost asynchronous data path with testpmd. + +Prerequisites +============= +Topology +-------- +Test flow: Virtio-user --> Vhost-user + +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 + +Test case +========= + +Test Case 1: Wake up split ring vhost-user cores with l3fwd-power sample when multi queues and cbdma are enabled +---------------------------------------------------------------------------------------------------------------- + +1. Launch virtio-user with server mode:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 1-5 -n 4 --no-pci --file-prefix=virtio \ + --vdev=net_virtio_user0,mac=00:11:22:33:44:10,path=/tmp/sock0,server=1,queues=4 -- -i --rxq=4 --txq=4 --rss-ip + +2. Bind 4 cbdma ports to vfio-pci driver, then launch l3fwd-power with a virtual vhost device:: + + ./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -l 9-12 -n 4 --log-level=9 \ + --vdev 'eth_vhost0,iface=/tmp/sock0,queues=4,client=1,dmas=[txq0@0000:80:04.0;txq1@0000:80:04.1;txq2@0000:80:04.2;txq3@0000:80:04.3;rxq0@0000:80:04.0;rxq1@0000:80:04.1;rxq2@0000:80:04.2;rxq3@0000:80:04.3]' -- -p 0x1 --parse-ptype 1 \ + --config "(0,0,9),(0,1,10),(0,2,11),(0,3,12)" + +3. Send packet by testpmd, check vhost-user multi-cores will keep wakeup status:: + + testpmd>set fwd txonly + testpmd>start + +4. Stop and restart testpmd again, check vhost-user cores will sleep and wakeup again. + +Test Case 2: Wake up packed ring vhost-user cores with l3fwd-power sample when multi queues and cbdma are enabled +----------------------------------------------------------------------------------------------------------------- + +1. Launch virtio-user with server mode:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 1-5 -n 4 --no-pci --file-prefix=virtio \ + --vdev=net_virtio_user0,mac=00:11:22:33:44:10,path=/tmp/sock0,server=1,queues=4,packed_vq=1 -- -i --rxq=4 --txq=4 --rss-ip + +2. Bind 4 cbdma ports to vfio-pci driver, then launch l3fwd-power with a virtual vhost device:: + + ./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -l 9-12 -n 4 --log-level=9 \ + --vdev 'eth_vhost0,iface=/tmp/sock0,queues=4,client=1,dmas=[txq0@0000:80:04.0;txq1@0000:80:04.1;txq2@0000:80:04.2;txq3@0000:80:04.3;rxq0@0000:80:04.0;rxq1@0000:80:04.1;rxq2@0000:80:04.2;rxq3@0000:80:04.3]' -- -p 0x1 --parse-ptype 1 \ + --config "(0,0,9),(0,1,10),(0,2,11),(0,3,12)" + +3. Send packet by testpmd, check vhost-user multi-cores will keep wakeup status:: + + testpmd>set fwd txonly + testpmd>start + +4. Stop and restart testpmd again, check vhost-user cores will sleep and wakeup again. From patchwork Tue Nov 22 06:52:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ling, WeiX" X-Patchwork-Id: 120039 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 79201A057E; Tue, 22 Nov 2022 07:58:42 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7219342D4C; Tue, 22 Nov 2022 07:58:42 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 707F0427EB for ; Tue, 22 Nov 2022 07:58:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669100320; x=1700636320; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=P2uc5TSECGn01EIDBoq/B5uzloV4RAO5r257x627Arw=; b=AE3rFj31xT6Csz+vi9hwWGi4IQ4GSkJeHEnHZ32ozh8ynOuAnH7igk5Q doWAfKE6UovWzqg0jL2UYqP+ltR7DSc7SmNwK1pORTww9QVrhY++vFTnA musg6/djqm26m5/X+BbdTztxBo52kQmTDFMEfAfVeCyW2C/SDotlSwRBA f7aXpDCeLQAT+6HtW2paBXBcuZdJagig7ATCJwoej2aXHwDn2t+WjZ0aB txM2md7Glj6fRoI3y9w9yCfdFtFKUCynoIJyfb7TXbUtsi+mn0NEQgZKf 97Pjy7pC7pJ/wMfZl8KAg9c249amGl4mqF5LSBrRA1gQmDY/ikNOPGUET w==; X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="315569286" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="315569286" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:58:39 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10538"; a="970371851" X-IronPort-AV: E=Sophos;i="5.96,183,1665471600"; d="scan'208";a="970371851" Received: from unknown (HELO localhost.localdomain) ([10.239.252.222]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Nov 2022 22:58:37 -0800 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V3 3/3] tests/vhost_user_interrupt_cbdma: add new testsuite Date: Tue, 22 Nov 2022 14:52:51 +0800 Message-Id: <20221122065251.2894138-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 Add new vhost_user_interrupt_cbdma testsuite to test the virtio enqueue and dequeue use l3fwd-power with split ring and packed ring path and CBDMA. Signed-off-by: Wei Ling --- tests/TestSuite_vhost_user_interrupt_cbdma.py | 275 ++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 tests/TestSuite_vhost_user_interrupt_cbdma.py diff --git a/tests/TestSuite_vhost_user_interrupt_cbdma.py b/tests/TestSuite_vhost_user_interrupt_cbdma.py new file mode 100644 index 00000000..ce95e94b --- /dev/null +++ b/tests/TestSuite_vhost_user_interrupt_cbdma.py @@ -0,0 +1,275 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2022 Intel Corporation +# + +""" +DPDK Test suite. +Vhost enqueue interrupt need test with l3fwd-power sample +""" + +import re +import time + +import framework.utils as utils +from framework.test_case import TestCase + + +class TestVhostUserInterruptCbdma(TestCase): + def set_up_all(self): + """ + Run at the start of each test suite. + + """ + self.queues = 1 + self.cores_num = len([n for n in self.dut.cores if int(n["socket"]) == 0]) + self.vmac = "00:11:22:33:44:10" + self.pci_info = self.dut.ports_info[0]["pci"] + self.prepare_l3fwd_power() + self.app_l3fwd_power_path = self.dut.apps_name["l3fwd-power"] + self.app_testpmd_path = self.dut.apps_name["test-pmd"] + self.testpmd_name = self.app_testpmd_path.split("/")[-1] + self.l3fwdpower_name = self.app_l3fwd_power_path.split("/")[-1] + + self.dut_ports = self.dut.get_ports() + self.ports_socket = self.dut.get_numa_id(self.dut_ports[0]) + # get cbdma device + self.cbdma_dev_infos = [] + self.dmas_info = None + self.device_str = None + + def set_up(self): + """ + Run before each test case. + """ + # Clean the execution ENV + self.verify_info = [] + self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#") + self.dut.send_expect("killall %s" % self.l3fwdpower_name, "#") + self.dut.send_expect("rm -rf ./vhost-net*", "#") + self.vhost = self.dut.new_session(suite="vhost-l3fwd") + self.virtio_user = self.dut.new_session(suite="virtio-user") + + def prepare_l3fwd_power(self): + out = self.dut.build_dpdk_apps("examples/l3fwd-power") + self.verify("Error" not in out, "compilation l3fwd-power error") + + def get_core_list(self): + """ + get core list depend on the core number + """ + need_num = 2 * self.queues + 1 + self.core_config = "1S/%dC/1T" % need_num + self.verify( + self.cores_num >= need_num, "There has not enought cores to test this case" + ) + core_list = self.dut.get_core_list(self.core_config) + self.core_list_virtio = core_list[0 : self.queues + 1] + self.core_list_l3fwd = core_list[self.queues + 1 : need_num] + + def lanuch_virtio_user(self, packed=False): + """ + launch virtio-user with server mode + """ + vdev = ( + "net_virtio_user0,mac=%s,path=./vhost-net,server=1,queues=%d" + % (self.vmac, self.queues) + if not packed + else "net_virtio_user0,mac=%s,path=./vhost-net,server=1,queues=%d,packed_vq=1" + % (self.vmac, self.queues) + ) + eal_params = self.dut.create_eal_parameters( + cores=self.core_list_virtio, prefix="virtio", no_pci=True, vdevs=[vdev] + ) + + if self.check_2M_env: + eal_params += " --single-file-segments" + para = " -- -i --rxq=%d --txq=%d --rss-ip" % (self.queues, self.queues) + command_line_client = self.app_testpmd_path + " " + eal_params + para + self.virtio_user.send_expect( + command_line_client, "waiting for client connection...", 120 + ) + + def get_cbdma_ports_info_and_bind_to_dpdk(self, cbdma_num): + """ + get all cbdma ports + """ + out = self.dut.send_expect( + "./usertools/dpdk-devbind.py --status-dev dma", "# ", 30 + ) + device_info = out.split("\n") + for device in device_info: + pci_info = re.search("\s*(0000:\S*:\d*.\d*)", device) + if pci_info is not None: + dev_info = pci_info.group(1) + # the numa id of ioat dev, only add the device which + # on same socket with nic dev + bus = int(dev_info[5:7], base=16) + if bus >= 128: + cur_socket = 1 + else: + cur_socket = 0 + if self.ports_socket == cur_socket: + self.cbdma_dev_infos.append(pci_info.group(1)) + self.verify( + len(self.cbdma_dev_infos) >= cbdma_num, + "There no enough cbdma device to run this suite", + ) + used_cbdma = self.cbdma_dev_infos[0:cbdma_num] + tx_dmas_info = "" + for dmas in used_cbdma: + number = used_cbdma.index(dmas) + dmas = "txq{}@{};".format(number, dmas) + tx_dmas_info += dmas + rx_dmas_info = "" + for dmas in used_cbdma: + number = used_cbdma.index(dmas) + dmas = "rxq{}@{};".format(number, dmas) + rx_dmas_info += dmas + dmas_info = tx_dmas_info + rx_dmas_info + self.dmas_info = dmas_info[:-1] + self.device_str = " ".join(used_cbdma) + self.dut.send_expect( + "./usertools/dpdk-devbind.py --force --bind=%s %s" + % (self.drivername, self.device_str), + "# ", + 60, + ) + + def bind_cbdma_device_to_kernel(self): + if self.device_str is not None: + self.dut.send_expect("modprobe ioatdma", "# ") + self.dut.send_expect( + "./usertools/dpdk-devbind.py -u %s" % self.device_str, "# ", 30 + ) + self.dut.send_expect( + "./usertools/dpdk-devbind.py --force --bind=ioatdma %s" + % self.device_str, + "# ", + 60, + ) + + @property + def check_2M_env(self): + out = self.dut.send_expect( + "cat /proc/meminfo |grep Hugepagesize|awk '{print($2)}'", "# " + ) + return True if out == "2048" else False + + def lanuch_l3fwd_power(self): + """ + launch l3fwd-power with a virtual vhost device + """ + self.logger.info("Launch l3fwd_sample sample:") + # config the interrupt cores + config_info = "" + for i in range(self.queues): + if config_info != "": + config_info += "," + config_info += "(0,%d,%s)" % (i, self.core_list_l3fwd[i]) + info = {"core": self.core_list_l3fwd[i], "port": 0, "queue": i} + self.verify_info.append(info) + + example_cmd = self.app_l3fwd_power_path + " " + example_cmd += " --log-level=9 " + self.get_cbdma_ports_info_and_bind_to_dpdk(4) + vdev = "'net_vhost0,iface=vhost-net,queues=%d,client=1,dmas=[%s]'" % ( + self.queues, + self.dmas_info, + ) + eal_params = self.dut.create_eal_parameters( + cores=self.core_list_l3fwd, + ports=self.cbdma_dev_infos[0:4], + vdevs=[vdev], + ) + para = " -- -p 0x1 --parse-ptype 1 --config '%s' --interrupt-only" % config_info + command_line_client = example_cmd + eal_params + para + self.vhost.get_session_before(timeout=2) + self.vhost.send_expect(command_line_client, "POWER", 40) + time.sleep(10) + out = self.vhost.get_session_before() + if "Error" in out and "Error opening" not in out: + self.logger.error("Launch l3fwd-power sample error") + else: + self.logger.info("Launch l3fwd-power sample finished") + + def check_vhost_core_status(self, status): + """ + check the cpu status + """ + out = self.vhost.get_session_before() + for i in range(len(self.verify_info)): + if status == "waked up": + info = "lcore %s is waked up from rx interrupt on port %d queue %d" + info = info % ( + self.verify_info[i]["core"], + self.verify_info[i]["port"], + self.verify_info[i]["queue"], + ) + elif status == "sleeps": + info = ( + "lcore %s sleeps until interrupt triggers" + % self.verify_info[i]["core"] + ) + self.verify(info in out, "The CPU status not right for %s" % info) + self.logger.info(info) + + def send_and_verify(self): + """ + start to send packets and check the cpu status + stop and restart to send packets and check the cpu status + """ + self.virtio_user.send_expect("start", "testpmd> ", 20) + self.check_vhost_core_status("waked up") + + self.virtio_user.send_expect("stop", "testpmd> ", 20) + self.check_vhost_core_status("sleeps") + + self.virtio_user.send_expect("start", "testpmd> ", 20) + self.check_vhost_core_status("waked up") + + def close_testpmd_and_session(self): + self.virtio_user.send_expect("quit", "#", 20) + self.dut.close_session(self.vhost) + self.dut.close_session(self.virtio_user) + + def test_wake_up_split_ring_vhost_user_core_with_l3fwd_power_sample_when_multi_queues_enabled_and_cbdma_enabled( + self, + ): + """ + Test Case1: Wake up split ring vhost-user cores with l3fwd-power sample when multi queues and cbdma are enabled + """ + self.queues = 4 + self.get_core_list() + self.lanuch_virtio_user(packed=False) + self.lanuch_l3fwd_power() + self.virtio_user.send_expect("set fwd txonly", "testpmd> ", 20) + self.send_and_verify() + + def test_wake_up_packed_ring_vhost_user_core_with_l3fwd_power_sample_when_multi_queues_enabled_and_cbdma_enabled( + self, + ): + """ + Test Case2: Wake up packed ring vhost-user cores with l3fwd-power sample when multi queues and cbdma are enabled + """ + self.queues = 4 + self.get_core_list() + self.lanuch_virtio_user(packed=True) + self.lanuch_l3fwd_power() + self.virtio_user.send_expect("set fwd txonly", "testpmd> ", 20) + self.send_and_verify() + + def tear_down(self): + """ + Run after each test case. + """ + self.close_testpmd_and_session() + self.dut.send_expect("killall %s" % self.l3fwdpower_name, "#") + self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#") + self.dut.kill_all() + self.bind_cbdma_device_to_kernel() + + def tear_down_all(self): + """ + Run after each test suite. + """ + pass