Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/110957/?format=api
http://patches.dpdk.org/api/patches/110957/?format=api", "web_url": "http://patches.dpdk.org/project/dts/patch/20220510031555.340931-1-weix.ling@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": "<20220510031555.340931-1-weix.ling@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/20220510031555.340931-1-weix.ling@intel.com", "date": "2022-05-10T03:15:55", "name": "[V2,3/3] tests/vhost_virtio_pmd_interrupt_cbdma: add vhost_virtio_pmd_interrupt_cbdma testsuite", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "1748a15c0995eccf07806ee5277fcdb9e4719a12", "submitter": { "id": 1828, "url": "http://patches.dpdk.org/api/people/1828/?format=api", "name": "Ling, WeiX", "email": "weix.ling@intel.com" }, "delegate": null, "mbox": "http://patches.dpdk.org/project/dts/patch/20220510031555.340931-1-weix.ling@intel.com/mbox/", "series": [ { "id": 22860, "url": "http://patches.dpdk.org/api/series/22860/?format=api", "web_url": "http://patches.dpdk.org/project/dts/list/?series=22860", "date": "2022-05-10T03:15:26", "name": "add vhost_virtio_pmd_interrupt_cbdma", "version": 2, "mbox": "http://patches.dpdk.org/series/22860/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/110957/comments/", "check": "warning", "checks": "http://patches.dpdk.org/api/patches/110957/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 4C1A5A034C;\n\tTue, 10 May 2022 05:16:46 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 43D254281D;\n\tTue, 10 May 2022 05:16:46 +0200 (CEST)", "from mga07.intel.com (mga07.intel.com [134.134.136.100])\n by mails.dpdk.org (Postfix) with ESMTP id 06BFE410F2\n for <dts@dpdk.org>; Tue, 10 May 2022 05:16:44 +0200 (CEST)", "from orsmga008.jf.intel.com ([10.7.209.65])\n by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 09 May 2022 20:16:44 -0700", "from unknown (HELO localhost.localdomain) ([10.239.251.222])\n by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 09 May 2022 20:16:42 -0700" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1652152605; x=1683688605;\n h=from:to:cc:subject:date:message-id:mime-version:\n content-transfer-encoding;\n bh=4XBo2h/4zKN+6418IMELhOncD0+ekTjRZI8iWlu4/hQ=;\n b=mASODuhbtGo/XnQe3qu2cBZvtN6Ms+2ye8UD/jxTAbRPdthK0x75Od1d\n x+xLL9p5MFij13O5Ld+jf9+5AA/TkC/zXh6du38MVJSYJe7oSbmMpeqQs\n e7OU3LwA9fYpMwTKuJZ+wnJ54K3Vct7pt5izUKN1hq5kxZUPBp3ixHvf1\n A/UD1VCPoaNJnqsM2T784uWtbWUr6ipE398YN1aOe+zXLDf6E63SwfI7u\n Wi0Bgz02bVQRNmSOz9BbnZOuEzhAVntqBGocw4Sun1dUVv3MR19K/H/be\n cUpMmaZakbgn1EKJWctKKw2uYBSVAOolU6E4zIHqVrgh41PgJFGeUBAWl g==;", "X-IronPort-AV": [ "E=McAfee;i=\"6400,9594,10342\"; a=\"332280237\"", "E=Sophos;i=\"5.91,213,1647327600\"; d=\"scan'208\";a=\"332280237\"", "E=Sophos;i=\"5.91,213,1647327600\"; d=\"scan'208\";a=\"593229847\"" ], "From": "Wei Ling <weix.ling@intel.com>", "To": "dts@dpdk.org", "Cc": "Wei Ling <weix.ling@intel.com>", "Subject": "[dts][PATCH V2 3/3] tests/vhost_virtio_pmd_interrupt_cbdma: add\n vhost_virtio_pmd_interrupt_cbdma testsuite", "Date": "Mon, 9 May 2022 23:15:55 -0400", "Message-Id": "<20220510031555.340931-1-weix.ling@intel.com>", "X-Mailer": "git-send-email 2.25.1", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "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" }, "content": "Add new testsuite tests/TestSuite_vhost_virtio_pmd_interrupt_cbdma.py.\n\nSigned-off-by: Wei Ling <weix.ling@intel.com>\n---\n ...tSuite_vhost_virtio_pmd_interrupt_cbdma.py | 470 ++++++++++++++++++\n 1 file changed, 470 insertions(+)\n create mode 100644 tests/TestSuite_vhost_virtio_pmd_interrupt_cbdma.py", "diff": "diff --git a/tests/TestSuite_vhost_virtio_pmd_interrupt_cbdma.py b/tests/TestSuite_vhost_virtio_pmd_interrupt_cbdma.py\nnew file mode 100644\nindex 00000000..76c10aef\n--- /dev/null\n+++ b/tests/TestSuite_vhost_virtio_pmd_interrupt_cbdma.py\n@@ -0,0 +1,470 @@\n+# BSD LICENSE\n+#\n+# Copyright(c) <2022> Intel Corporation.\n+# All rights reserved.\n+#\n+# Redistribution and use in source and binary forms, with or without\n+# modification, are permitted provided that the following conditions\n+# are met:\n+#\n+# * Redistributions of source code must retain the above copyright\n+# notice, this list of conditions and the following disclaimer.\n+# * Redistributions in binary form must reproduce the above copyright\n+# notice, this list of conditions and the following disclaimer in\n+# the documentation and/or other materials provided with the\n+# distribution.\n+# * Neither the name of Intel Corporation nor the names of its\n+# contributors may be used to endorse or promote products derived\n+# from this software without specific prior written permission.\n+#\n+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+\n+\"\"\"\n+DPDK Test suite.\n+vhost virtio pmd interrupt need test with l3fwd-power sample\n+\"\"\"\n+\n+import re\n+import time\n+\n+import framework.utils as utils\n+from framework.packet import Packet\n+from framework.pktgen import PacketGeneratorHelper\n+from framework.pmd_output import PmdOutput\n+from framework.test_case import TestCase\n+from framework.virt_common import VM\n+\n+\n+class TestVhostVirtioPmdInterruptCbdma(TestCase):\n+ def set_up_all(self):\n+ \"\"\"\n+ Run at the start of each test suite.\n+ \"\"\"\n+ self.fix_ip = False\n+ self.nb_cores = 4\n+ self.queues = 4\n+ self.dut_ports = self.dut.get_ports()\n+ self.verify(len(self.dut_ports) >= 1, \"Insufficient ports for testing\")\n+ self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])\n+ self.cores_num = len(\n+ [n for n in self.dut.cores if int(n[\"socket\"]) == self.ports_socket]\n+ )\n+ self.core_list = self.dut.get_core_list(\"all\", socket=self.ports_socket)\n+ self.core_list_vhost = self.core_list[0:17]\n+ self.tx_port = self.tester.get_local_port(self.dut_ports[0])\n+ self.dst_mac = self.dut.get_mac_address(self.dut_ports[0])\n+ self.logger.info(\n+ \"Please comfirm the kernel of vm greater than 4.8.0 and enable vfio-noiommu in kernel\"\n+ )\n+ self.out_path = \"/tmp\"\n+ out = self.tester.send_expect(\"ls -d %s\" % self.out_path, \"# \")\n+ if \"No such file or directory\" in out:\n+ self.tester.send_expect(\"mkdir -p %s\" % self.out_path, \"# \")\n+ # create an instance to set stream field setting\n+ self.pktgen_helper = PacketGeneratorHelper()\n+ self.base_dir = self.dut.base_dir.replace(\"~\", \"/root\")\n+ self.app_l3fwd_power_path = self.dut.apps_name[\"l3fwd-power\"]\n+ self.app_testpmd_path = self.dut.apps_name[\"test-pmd\"]\n+ self.testpmd_name = self.app_testpmd_path.split(\"/\")[-1]\n+ self.l3fwdpower_name = self.app_l3fwd_power_path.split(\"/\")[-1]\n+ self.vhost_user = self.dut.new_session(suite=\"vhost-user\")\n+ self.vhost_pmd = PmdOutput(self.dut, self.vhost_user)\n+ self.vm_dut = None\n+\n+ def set_up(self):\n+ \"\"\"\n+ Run before each test case.\n+ \"\"\"\n+ # Clean the execution ENV\n+ self.verify_info = []\n+ self.dut.send_expect(\"killall -s INT %s\" % self.testpmd_name, \"#\")\n+ self.dut.send_expect(\"killall -s INT qemu-system-x86_64\", \"#\")\n+ self.dut.send_expect(\"rm -rf %s/vhost-net*\" % self.base_dir, \"#\")\n+\n+ def prepare_vm_env(self):\n+ \"\"\"\n+ rebuild l3fwd-power in vm and set the virtio-net driver\n+ \"\"\"\n+ out = self.vm_dut.build_dpdk_apps(\"examples/l3fwd-power\")\n+ self.verify(\"Error\" not in out, \"compilation l3fwd-power error\")\n+ self.vm_dut.send_expect(\"modprobe vfio enable_unsafe_noiommu_mode=1\", \"#\")\n+ self.vm_dut.send_expect(\"modprobe vfio-pci\", \"#\")\n+ self.vm_dut.ports_info[0][\"port\"].bind_driver(\"vfio-pci\")\n+\n+ def launch_l3fwd_power_in_vm(self):\n+ \"\"\"\n+ launch l3fwd-power with a virtual vhost device\n+ \"\"\"\n+ self.verify(\n+ len(self.vm_dut.cores) >= self.nb_cores,\n+ \"The vm done not has enought cores to use, please config it\",\n+ )\n+ core_config = \"1S/%dC/1T\" % self.nb_cores\n+ core_list_l3fwd = self.vm_dut.get_core_list(core_config)\n+ core_mask_l3fwd = utils.create_mask(core_list_l3fwd)\n+\n+ res = True\n+ self.logger.info(\"Launch l3fwd_sample sample:\")\n+ config_info = \"\"\n+ for queue in range(self.queues):\n+ if config_info != \"\":\n+ config_info += \",\"\n+ config_info += \"(%d,%d,%s)\" % (0, queue, core_list_l3fwd[queue])\n+ info = {\"core\": core_list_l3fwd[queue], \"port\": 0, \"queue\": queue}\n+ self.verify_info.append(info)\n+\n+ command_client = (\n+ \"./%s \" % self.app_l3fwd_power_path\n+ + \"-c %s -n 4 --log-level='user1,7' -- -p 1 -P \"\n+ + \"--config '%s' --no-numa --parse-ptype --interrupt-only\"\n+ )\n+ command_line_client = command_client % (core_mask_l3fwd, config_info)\n+ self.vm_dut.get_session_output(timeout=2)\n+ self.vm_dut.send_expect(command_line_client, \"POWER\", 40)\n+ time.sleep(10)\n+ out = self.vm_dut.get_session_output()\n+ if \"Error\" in out and \"Error opening\" not in out:\n+ self.logger.error(\"Launch l3fwd-power sample error\")\n+ res = False\n+ else:\n+ self.logger.info(\"Launch l3fwd-power sample finished\")\n+ self.verify(res is True, \"Lanuch l3fwd failed\")\n+\n+ def set_vm_vcpu_number(self):\n+ # config the vcpu numbers\n+ params_number = len(self.vm.params)\n+ for i in range(params_number):\n+ if list(self.vm.params[i].keys())[0] == \"cpu\":\n+ self.vm.params[i][\"cpu\"][0][\"number\"] = self.queues\n+\n+ def start_vms(self, mode=0, packed=False):\n+ \"\"\"\n+ start qemus\n+ \"\"\"\n+ self.vm = VM(self.dut, \"vm0\", \"vhost_sample\")\n+ self.vm.load_config()\n+ vm_params = {}\n+ vm_params[\"driver\"] = \"vhost-user\"\n+ vm_params[\"opt_path\"] = \"%s/vhost-net\" % self.base_dir\n+ vm_params[\"opt_mac\"] = \"00:11:22:33:44:55\"\n+ vm_params[\"opt_queue\"] = self.queues\n+ if not packed:\n+ opt_param = \"mrg_rxbuf=on,csum=on,mq=on,vectors=%d\" % (2 * self.queues + 2)\n+ else:\n+ opt_param = \"mrg_rxbuf=on,csum=on,mq=on,vectors=%d,packed=on\" % (\n+ 2 * self.queues + 2\n+ )\n+ if mode == 0:\n+ vm_params[\"opt_settings\"] = \"disable-modern=true,\" + opt_param\n+ elif mode == 1:\n+ vm_params[\"opt_settings\"] = \"disable-modern=false,\" + opt_param\n+ self.vm.set_vm_device(**vm_params)\n+ self.set_vm_vcpu_number()\n+ try:\n+ # Due to we have change the params info before,\n+ # so need to start vm with load_config=False\n+ self.vm_dut = self.vm.start(load_config=False)\n+ if self.vm_dut is None:\n+ raise Exception(\"Set up VM ENV failed\")\n+ except Exception as e:\n+ self.logger.error(\"ERROR: Failure for %s\" % str(e))\n+\n+ def check_related_cores_status_in_l3fwd(self, out_result, status, fix_ip):\n+ \"\"\"\n+ check the vcpu status\n+ when tester send fix_ip packet, the cores in l3fwd only one can change the status\n+ when tester send not fix_ip packets, all the cores in l3fwd will change the status\n+ \"\"\"\n+ change = 0\n+ for i in range(len(self.verify_info)):\n+ if status == \"waked up\":\n+ info = \"lcore %s is waked up from rx interrupt on port %d queue %d\"\n+ info = info % (\n+ self.verify_info[i][\"core\"],\n+ self.verify_info[i][\"port\"],\n+ self.verify_info[i][\"queue\"],\n+ )\n+ elif status == \"sleeps\":\n+ info = (\n+ \"lcore %s sleeps until interrupt triggers\"\n+ % self.verify_info[i][\"core\"]\n+ )\n+ if info in out_result:\n+ change = change + 1\n+ self.logger.info(info)\n+ # if use fix ip, only one cores can waked up/sleep\n+ # if use dynamic ip, all the cores will waked up/sleep\n+ if fix_ip is True:\n+ self.verify(change == 1, \"There has other cores change the status\")\n+ else:\n+ self.verify(change == self.queues, \"There has cores not change the status\")\n+\n+ def set_fields(self):\n+ \"\"\"\n+ set ip protocol field behavior\n+ \"\"\"\n+ fields_config = {\n+ \"ip\": {\n+ \"dst\": {\"action\": \"random\"},\n+ },\n+ }\n+ return fields_config\n+\n+ def send_packets(self):\n+ tgen_input = []\n+ if self.fix_ip is True:\n+ pkt = Packet(pkt_type=\"UDP\")\n+ else:\n+ pkt = Packet(pkt_type=\"IP_RAW\")\n+ pkt.config_layer(\"ether\", {\"dst\": \"%s\" % self.dst_mac})\n+ pkt.save_pcapfile(self.tester, \"%s/interrupt.pcap\" % self.out_path)\n+ tgen_input.append(\n+ (self.tx_port, self.tx_port, \"%s/interrupt.pcap\" % self.out_path)\n+ )\n+ self.tester.pktgen.clear_streams()\n+ vm_config = self.set_fields()\n+ if self.fix_ip is True:\n+ vm_config = None\n+ streams = self.pktgen_helper.prepare_stream_from_tginput(\n+ tgen_input, 100, vm_config, self.tester.pktgen\n+ )\n+ # set traffic option\n+ traffic_opt = {\"delay\": 5, \"duration\": 20}\n+ _, pps = self.tester.pktgen.measure_throughput(\n+ stream_ids=streams, options=traffic_opt\n+ )\n+\n+ def send_and_verify(self):\n+ \"\"\"\n+ start to send packets and check the cpu status\n+ stop to send packets and check the cpu status\n+ \"\"\"\n+ # Send random dest ip address packets to host nic\n+ # packets will distribute to all queues\n+ self.fix_ip = False\n+ self.send_packets()\n+ out = self.vm_dut.get_session_output(timeout=5)\n+ self.check_related_cores_status_in_l3fwd(out, \"waked up\", fix_ip=False)\n+ self.check_related_cores_status_in_l3fwd(out, \"sleeps\", fix_ip=False)\n+\n+ # Send fixed dest ip address packets to host nic\n+ # packets will distribute to 1 queue\n+ self.fix_ip = True\n+ self.send_packets()\n+ out = self.vm_dut.get_session_output(timeout=5)\n+ self.check_related_cores_status_in_l3fwd(out, \"waked up\", fix_ip=True)\n+ self.check_related_cores_status_in_l3fwd(out, \"sleeps\", fix_ip=True)\n+\n+ def get_cbdma_ports_info_and_bind_to_dpdk(self, cbdma_num, allow_diff_socket=False):\n+ \"\"\"\n+ get all cbdma ports\n+ \"\"\"\n+ self.all_cbdma_list = []\n+ self.cbdma_list = []\n+ self.cbdma_str = \"\"\n+ out = self.dut.send_expect(\n+ \"./usertools/dpdk-devbind.py --status-dev dma\", \"# \", 30\n+ )\n+ device_info = out.split(\"\\n\")\n+ for device in device_info:\n+ pci_info = re.search(\"\\s*(0000:\\S*:\\d*.\\d*)\", device)\n+ if pci_info is not None:\n+ dev_info = pci_info.group(1)\n+ # the numa id of ioat dev, only add the device which on same socket with nic dev\n+ bus = int(dev_info[5:7], base=16)\n+ if bus >= 128:\n+ cur_socket = 1\n+ else:\n+ cur_socket = 0\n+ if allow_diff_socket:\n+ self.all_cbdma_list.append(pci_info.group(1))\n+ else:\n+ if self.ports_socket == cur_socket:\n+ self.all_cbdma_list.append(pci_info.group(1))\n+ self.verify(\n+ len(self.all_cbdma_list) >= cbdma_num, \"There no enough cbdma device\"\n+ )\n+ self.cbdma_list = self.all_cbdma_list[0:cbdma_num]\n+ self.cbdma_str = \" \".join(self.cbdma_list)\n+ self.dut.send_expect(\n+ \"./usertools/dpdk-devbind.py --force --bind=%s %s\"\n+ % (self.drivername, self.cbdma_str),\n+ \"# \",\n+ 60,\n+ )\n+\n+ def bind_cbdma_device_to_kernel(self):\n+ self.dut.send_expect(\"modprobe ioatdma\", \"# \")\n+ self.dut.send_expect(\n+ \"./usertools/dpdk-devbind.py -u %s\" % self.cbdma_str, \"# \", 30\n+ )\n+ self.dut.send_expect(\n+ \"./usertools/dpdk-devbind.py --force --bind=ioatdma %s\" % self.cbdma_str,\n+ \"# \",\n+ 60,\n+ )\n+\n+ def stop_all_apps(self):\n+ \"\"\"\n+ close all vms\n+ \"\"\"\n+ if self.vm_dut is not None:\n+ vm_dut2 = self.vm_dut.create_session(name=\"vm_dut2\")\n+ vm_dut2.send_expect(\"killall %s\" % self.l3fwdpower_name, \"# \", 10)\n+ # self.vm_dut.send_expect(\"killall l3fwd-power\", \"# \", 60, alt_session=True)\n+ self.vm_dut.send_expect(\"cp /tmp/main.c ./examples/l3fwd-power/\", \"#\", 15)\n+ out = self.vm_dut.build_dpdk_apps(\"examples/l3fwd-power\")\n+ self.vm.stop()\n+ self.dut.close_session(vm_dut2)\n+ self.vhost_pmd.quit()\n+\n+ def test_perf_virtio_interrupt_with_16_queues_and_cbdma_enabled(self):\n+ \"\"\"\n+ Test Case1: Basic virtio interrupt test with 16 queues and cbdma enabled\n+ \"\"\"\n+ self.get_cbdma_ports_info_and_bind_to_dpdk(16, allow_diff_socket=True)\n+ lcore_dma = (\n+ f\"[lcore{self.core_list_vhost[1]}@{self.cbdma_list[0]},\"\n+ f\"lcore{self.core_list[2]}@{self.cbdma_list[0]},\"\n+ f\"lcore{self.core_list[3]}@{self.cbdma_list[1]},\"\n+ f\"lcore{self.core_list[3]}@{self.cbdma_list[2]},\"\n+ f\"lcore{self.core_list[4]}@{self.cbdma_list[3]},\"\n+ f\"lcore{self.core_list[5]}@{self.cbdma_list[4]},\"\n+ f\"lcore{self.core_list[6]}@{self.cbdma_list[5]},\"\n+ f\"lcore{self.core_list[7]}@{self.cbdma_list[6]},\"\n+ f\"lcore{self.core_list[8]}@{self.cbdma_list[7]},\"\n+ f\"lcore{self.core_list[9]}@{self.cbdma_list[8]},\"\n+ f\"lcore{self.core_list[10]}@{self.cbdma_list[9]},\"\n+ f\"lcore{self.core_list[11]}@{self.cbdma_list[10]},\"\n+ f\"lcore{self.core_list[12]}@{self.cbdma_list[11]},\"\n+ f\"lcore{self.core_list[13]}@{self.cbdma_list[12]},\"\n+ f\"lcore{self.core_list[14]}@{self.cbdma_list[13]},\"\n+ f\"lcore{self.core_list[15]}@{self.cbdma_list[14]},\"\n+ f\"lcore{self.core_list[16]}@{self.cbdma_list[15]}]\"\n+ )\n+ vhost_param = \"--nb-cores=16 --rxq=16 --txq=16 --rss-ip --lcore-dma={}\".format(\n+ lcore_dma\n+ )\n+ vhost_eal_param = \"--vdev 'eth_vhost0,iface=vhost-net,queues=16,dmas=[txq0;txq1;txq2;txq3;txq4;txq5;txq6;txq7;txq8;txq9;txq10;txq11;txq12;txq13;txq14;txq15]'\"\n+ ports = self.cbdma_list\n+ ports.append(self.dut.ports_info[0][\"pci\"])\n+ self.vhost_pmd.start_testpmd(\n+ cores=self.core_list_vhost,\n+ ports=ports,\n+ prefix=\"vhost\",\n+ eal_param=vhost_eal_param,\n+ param=vhost_param,\n+ )\n+ self.vhost_pmd.execute_cmd(\"start\")\n+ self.queues = 16\n+ self.start_vms(mode=0, packed=False)\n+ self.prepare_vm_env()\n+ self.nb_cores = 16\n+ self.launch_l3fwd_power_in_vm()\n+ self.send_and_verify()\n+\n+ def test_perf_virtio10_interrupt_with_4_queues_and_cbdma_enabled(self):\n+ \"\"\"\n+ Test Case2: Basic virtio-1.0 interrupt test with 4 queues and cbdma enabled\n+ \"\"\"\n+ self.get_cbdma_ports_info_and_bind_to_dpdk(4)\n+ lcore_dma = (\n+ f\"[lcore{self.core_list_vhost[1]}@{self.cbdma_list[0]},\"\n+ f\"lcore{self.core_list_vhost[2]}@{self.cbdma_list[0]},\"\n+ f\"lcore{self.core_list_vhost[3]}@{self.cbdma_list[0]},\"\n+ f\"lcore{self.core_list_vhost[3]}@{self.cbdma_list[1]},\"\n+ f\"lcore{self.core_list_vhost[4]}@{self.cbdma_list[1]}]\"\n+ )\n+ vhost_param = \"--nb-cores=4 --rxq=4 --txq=4 --rss-ip --lcore-dma={}\".format(\n+ lcore_dma\n+ )\n+ vhost_eal_param = (\n+ \"--vdev 'net_vhost0,iface=vhost-net,queues=4,dmas=[txq0;txq1;txq2;txq3]'\"\n+ )\n+ ports = self.cbdma_list\n+ ports.append(self.dut.ports_info[0][\"pci\"])\n+ self.vhost_pmd.start_testpmd(\n+ cores=self.core_list_vhost,\n+ ports=ports,\n+ prefix=\"vhost\",\n+ eal_param=vhost_eal_param,\n+ param=vhost_param,\n+ )\n+ self.vhost_pmd.execute_cmd(\"start\")\n+ self.queues = 4\n+ self.start_vms(mode=1, packed=False)\n+ self.prepare_vm_env()\n+ self.nb_cores = 4\n+ self.launch_l3fwd_power_in_vm()\n+ self.send_and_verify()\n+\n+ def test_perf_packed_ring_virtio_interrupt_with_16_queues_and_cbdma_enabled(self):\n+ \"\"\"\n+ Test Case3: Packed ring virtio interrupt test with 16 queues and cbdma enabled\n+ \"\"\"\n+ self.get_cbdma_ports_info_and_bind_to_dpdk(16, allow_diff_socket=True)\n+ lcore_dma = (\n+ f\"[lcore{self.core_list_vhost[1]}@{self.cbdma_list[0]},\"\n+ f\"lcore{self.core_list[2]}@{self.cbdma_list[0]},\"\n+ f\"lcore{self.core_list[3]}@{self.cbdma_list[1]},\"\n+ f\"lcore{self.core_list[3]}@{self.cbdma_list[2]},\"\n+ f\"lcore{self.core_list[4]}@{self.cbdma_list[3]},\"\n+ f\"lcore{self.core_list[5]}@{self.cbdma_list[4]},\"\n+ f\"lcore{self.core_list[6]}@{self.cbdma_list[5]},\"\n+ f\"lcore{self.core_list[7]}@{self.cbdma_list[6]},\"\n+ f\"lcore{self.core_list[8]}@{self.cbdma_list[7]},\"\n+ f\"lcore{self.core_list[9]}@{self.cbdma_list[8]},\"\n+ f\"lcore{self.core_list[10]}@{self.cbdma_list[9]},\"\n+ f\"lcore{self.core_list[11]}@{self.cbdma_list[10]},\"\n+ f\"lcore{self.core_list[12]}@{self.cbdma_list[11]},\"\n+ f\"lcore{self.core_list[13]}@{self.cbdma_list[12]},\"\n+ f\"lcore{self.core_list[14]}@{self.cbdma_list[13]},\"\n+ f\"lcore{self.core_list[15]}@{self.cbdma_list[14]},\"\n+ f\"lcore{self.core_list[16]}@{self.cbdma_list[15]}]\"\n+ )\n+ vhost_param = \"--nb-cores=16 --rxq=16 --txq=16 --rss-ip --lcore-dma={}\".format(\n+ lcore_dma\n+ )\n+ vhost_eal_param = \"--vdev 'eth_vhost0,iface=vhost-net,queues=16,dmas=[txq0;txq1;txq2;txq3;txq4;txq5;txq6;txq7;txq8;txq9;txq10;txq11;txq12;txq13;txq14;txq15]'\"\n+ ports = self.cbdma_list\n+ ports.append(self.dut.ports_info[0][\"pci\"])\n+ self.vhost_pmd.start_testpmd(\n+ cores=self.core_list_vhost,\n+ ports=ports,\n+ prefix=\"vhost\",\n+ eal_param=vhost_eal_param,\n+ param=vhost_param,\n+ )\n+ self.vhost_pmd.execute_cmd(\"start\")\n+ self.queues = 16\n+ self.start_vms(mode=0, packed=True)\n+ self.prepare_vm_env()\n+ self.nb_cores = 16\n+ self.launch_l3fwd_power_in_vm()\n+ self.send_and_verify()\n+\n+ def tear_down(self):\n+ \"\"\"\n+ Run after each test case.\n+ \"\"\"\n+ self.stop_all_apps()\n+ self.dut.kill_all()\n+ self.dut.send_expect(\"killall -s INT %s\" % self.testpmd_name, \"#\")\n+ self.dut.send_expect(\"killall -s INT qemu-system-x86_64\", \"#\")\n+ self.bind_cbdma_device_to_kernel()\n+\n+ def tear_down_all(self):\n+ \"\"\"\n+ Run after each test suite.\n+ \"\"\"\n+ self.dut.close_session(self.vhost_user)\n", "prefixes": [ "V2", "3/3" ] }{ "id": 110957, "url": "