Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/119574/?format=api
https://patches.dpdk.org/api/patches/119574/?format=api", "web_url": "https://patches.dpdk.org/project/dts/patch/20221109020543.1204144-1-weix.ling@intel.com/", "project": { "id": 3, "url": "https://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": "<20221109020543.1204144-1-weix.ling@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/20221109020543.1204144-1-weix.ling@intel.com", "date": "2022-11-09T02:05:43", "name": "[V1,3/3] tests/vhost_event_idx_interrupt_cbdma: add new testsuite", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "8085c300fbbc7f02efa60382b8b39db1f86b2b39", "submitter": { "id": 1828, "url": "https://patches.dpdk.org/api/people/1828/?format=api", "name": "Ling, WeiX", "email": "weix.ling@intel.com" }, "delegate": null, "mbox": "https://patches.dpdk.org/project/dts/patch/20221109020543.1204144-1-weix.ling@intel.com/mbox/", "series": [ { "id": 25635, "url": "https://patches.dpdk.org/api/series/25635/?format=api", "web_url": "https://patches.dpdk.org/project/dts/list/?series=25635", "date": "2022-11-09T02:04:40", "name": "add vhost_event_idx_interrupt_cbdma", "version": 1, "mbox": "https://patches.dpdk.org/series/25635/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/119574/comments/", "check": "warning", "checks": "https://patches.dpdk.org/api/patches/119574/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 9EC02A0093;\n\tWed, 9 Nov 2022 03:12:08 +0100 (CET)", "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 8C90742D2B;\n\tWed, 9 Nov 2022 03:12:08 +0100 (CET)", "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n by mails.dpdk.org (Postfix) with ESMTP id AD880400D4\n for <dts@dpdk.org>; Wed, 9 Nov 2022 03:12:06 +0100 (CET)", "from fmsmga007.fm.intel.com ([10.253.24.52])\n by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 08 Nov 2022 18:12:05 -0800", "from unknown (HELO localhost.localdomain) ([10.239.252.222])\n by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 08 Nov 2022 18:12:04 -0800" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1667959926; x=1699495926;\n h=from:to:cc:subject:date:message-id:mime-version:\n content-transfer-encoding;\n bh=82djDKThSRMVYskS9WFoq275jFJCQ/g3FFVu2HCUlwA=;\n b=Mp8EwVZI7puGCvNImQ4etNTPxnNmesJhzm2+PJ2Bf1zwwCJLfMxVasR7\n gOSXk9yoGiUdUBgsa6l40giKLXWnGj7jiwIkHmvEvv1NVjZUIhE7J43hd\n jN8Z0XbCZcW/YgYzU7FxkwDDXK1XTduawNibIZp5iBmaweYzohRzwPLOo\n H63aj37d8E54UHsI8sgwMqiwkYP5SpCszqQIZ7vFERNmEw9SUg1/hZjCP\n 3/HUOIUGzE+nYdJMtGQlf+/4mLoxn5LHpmPQDXLLUE4JGpVM8B5zvXn4v\n Ix+HcBW/f1RCOnh98uKMbqFz/4Fh5HOPdrTKX6k992713fOga5KHlEllG w==;", "X-IronPort-AV": [ "E=McAfee;i=\"6500,9779,10525\"; a=\"310861360\"", "E=Sophos;i=\"5.96,149,1665471600\"; d=\"scan'208\";a=\"310861360\"", "E=McAfee;i=\"6500,9779,10525\"; a=\"639020837\"", "E=Sophos;i=\"5.96,149,1665471600\"; d=\"scan'208\";a=\"639020837\"" ], "From": "Wei Ling <weix.ling@intel.com>", "To": "dts@dpdk.org", "Cc": "Wei Ling <weix.ling@intel.com>", "Subject": "[dts][PATCH V1 3/3] tests/vhost_event_idx_interrupt_cbdma: add new\n testsuite", "Date": "Wed, 9 Nov 2022 10:05:43 +0800", "Message-Id": "<20221109020543.1204144-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 TestSuite_vhost_event_idx_interrupt_cbdma.py in tests to test\nthe virtio enqueue with split ring and packed ring path and CBDMA.\n\nSigned-off-by: Wei Ling <weix.ling@intel.com>\n---\n ...stSuite_vhost_event_idx_interrupt_cbdma.py | 426 ++++++++++++++++++\n 1 file changed, 426 insertions(+)\n create mode 100644 tests/TestSuite_vhost_event_idx_interrupt_cbdma.py", "diff": "diff --git a/tests/TestSuite_vhost_event_idx_interrupt_cbdma.py b/tests/TestSuite_vhost_event_idx_interrupt_cbdma.py\nnew file mode 100644\nindex 00000000..564d1ef6\n--- /dev/null\n+++ b/tests/TestSuite_vhost_event_idx_interrupt_cbdma.py\n@@ -0,0 +1,426 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2022 Intel Corporation\n+#\n+\n+\"\"\"\n+DPDK Test suite.\n+Vhost event idx interrupt need test with l3fwd-power sample\n+\"\"\"\n+\n+import re\n+import time\n+\n+from framework.test_case import TestCase\n+from framework.virt_common import VM\n+\n+\n+class TestVhostEventIdxInterruptCbdma(TestCase):\n+ def set_up_all(self):\n+ \"\"\"\n+ Run at the start of each test suite.\n+\n+ \"\"\"\n+ self.vm_num = 1\n+ self.queues = 1\n+ self.cores_num = len([n for n in self.dut.cores if int(n[\"socket\"]) == 0])\n+ self.prepare_l3fwd_power()\n+ self.pci_info = self.dut.ports_info[0][\"pci\"]\n+ self.base_dir = self.dut.base_dir.replace(\"~\", \"/root\")\n+ self.app_l3fwd_power_path = self.dut.apps_name[\"l3fwd-power\"]\n+ self.l3fwdpower_name = self.app_l3fwd_power_path.split(\"/\")[-1]\n+ self.dut_ports = self.dut.get_ports()\n+ self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])\n+ self.cbdma_dev_infos = []\n+ self.device_str = 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(f\"killall {self.l3fwdpower_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+ self.vhost = self.dut.new_session(suite=\"vhost-l3fwd\")\n+ self.vm_dut = []\n+ self.vm = []\n+ self.nopci = True\n+\n+ def get_core_mask(self):\n+ self.core_config = \"1S/%dC/1T\" % (self.vm_num * self.queues)\n+ self.verify(\n+ self.cores_num >= self.queues * self.vm_num,\n+ \"There has not enought cores to test this case %s\" % self.running_case,\n+ )\n+ self.core_list_l3fwd = self.dut.get_core_list(self.core_config)\n+\n+ def prepare_l3fwd_power(self):\n+ out = self.dut.build_dpdk_apps(\"examples/l3fwd-power\")\n+ self.verify(\"Error\" not in out, \"compilation l3fwd-power error\")\n+\n+ def list_split(self, items, n):\n+ return [items[i : i + n] for i in range(0, len(items), n)]\n+\n+ def lanuch_l3fwd_power(self):\n+ \"\"\"\n+ launch l3fwd-power with a virtual vhost device\n+ \"\"\"\n+ res = True\n+ self.logger.info(\"Launch l3fwd_sample sample:\")\n+ config_info = \"\"\n+ core_index = 0\n+ # config the interrupt cores info\n+ for port in range(self.vm_num):\n+ for queue in range(self.queues):\n+ if config_info != \"\":\n+ config_info += \",\"\n+ config_info += \"(%d,%d,%s)\" % (\n+ port,\n+ queue,\n+ self.core_list_l3fwd[core_index],\n+ )\n+ info = {\n+ \"core\": self.core_list_l3fwd[core_index],\n+ \"port\": port,\n+ \"queue\": queue,\n+ }\n+ self.verify_info.append(info)\n+ core_index = core_index + 1\n+ # config the vdev info, if have 2 vms, it shoule have 2 vdev info\n+ vdev_info = \"\"\n+ self.cbdma_dev_infos_list = []\n+ if self.vm_num >= 2:\n+ self.cbdma_dev_infos_list = self.list_split(\n+ self.cbdma_dev_infos, int(len(self.cbdma_dev_infos) / self.vm_num)\n+ )\n+ for i in range(self.vm_num):\n+ dmas = \"\"\n+ if self.vm_num == 1:\n+ for queue in range(self.queues):\n+ dmas += f\"txq{queue}@{self.cbdma_dev_infos[queue]};\"\n+\n+ else:\n+ cbdma_dev_infos = self.cbdma_dev_infos_list[i]\n+ for index, q in enumerate(cbdma_dev_infos):\n+ dmas += f\"txq{index}@{q};\"\n+ vdev_info += (\n+ f\"--vdev 'net_vhost%d,iface=%s/vhost-net%d,dmas=[{dmas}],queues=%d,client=1' \"\n+ % (i, self.base_dir, i, self.queues)\n+ )\n+\n+ port_info = \"0x1\" if self.vm_num == 1 else \"0x3\"\n+\n+ example_para = self.app_l3fwd_power_path + \" \"\n+ para = (\n+ \" --log-level=9 %s -- -p %s --parse-ptype 1 --config '%s' --interrupt-only\"\n+ % (vdev_info, port_info, config_info)\n+ )\n+ eal_params = self.dut.create_eal_parameters(\n+ cores=self.core_list_l3fwd,\n+ no_pci=self.nopci,\n+ ports=self.used_cbdma,\n+ )\n+ command_line_client = example_para + eal_params + para\n+ self.vhost.get_session_before(timeout=2)\n+ self.vhost.send_expect(command_line_client, \"POWER\", 40)\n+ time.sleep(10)\n+ out = self.vhost.get_session_before()\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 relanuch_l3fwd_power(self):\n+ \"\"\"\n+ relauch l3fwd-power sample for port up\n+ \"\"\"\n+ self.dut.send_expect(\"killall -s INT %s\" % self.l3fwdpower_name, \"#\")\n+ # make sure l3fwd-power be killed\n+ pid = self.dut.send_expect(\n+ \"ps -ef |grep l3|grep -v grep |awk '{print $2}'\", \"#\"\n+ )\n+ if pid:\n+ self.dut.send_expect(\"kill -9 %s\" % pid, \"#\")\n+ self.lanuch_l3fwd_power()\n+\n+ def set_vm_cpu_number(self, vm_config):\n+ # config the vcpu numbers when queue number greater than 1\n+ if self.queues == 1:\n+ return\n+ params_number = len(vm_config.params)\n+ for i in range(params_number):\n+ if list(vm_config.params[i].keys())[0] == \"cpu\":\n+ vm_config.params[i][\"cpu\"][0][\"number\"] = self.queues\n+\n+ def check_qemu_version(self, vm_config):\n+ \"\"\"\n+ in this suite, the qemu version should greater 2.7\n+ \"\"\"\n+ self.vm_qemu_version = vm_config.qemu_emulator\n+ params_number = len(vm_config.params)\n+ for i in range(params_number):\n+ if list(vm_config.params[i].keys())[0] == \"qemu\":\n+ self.vm_qemu_version = vm_config.params[i][\"qemu\"][0][\"path\"]\n+\n+ out = self.dut.send_expect(\"%s --version\" % self.vm_qemu_version, \"#\")\n+ result = re.search(\"QEMU\\s*emulator\\s*version\\s*(\\d*.\\d*)\", out)\n+ self.verify(\n+ result is not None,\n+ \"the qemu path may be not right: %s\" % self.vm_qemu_version,\n+ )\n+ version = result.group(1)\n+ index = version.find(\".\")\n+ self.verify(\n+ int(version[:index]) > 2\n+ or (int(version[:index]) == 2 and int(version[index + 1 :]) >= 7),\n+ \"This qemu version should greater than 2.7 \"\n+ + \"in this suite, please config it in vhost_sample.cfg file\",\n+ )\n+\n+ def start_vms(self, vm_num=1, packed=False):\n+ \"\"\"\n+ start qemus\n+ \"\"\"\n+ for i in range(vm_num):\n+ vm_info = VM(self.dut, \"vm%d\" % i, \"vhost_sample_copy\")\n+ vm_info.load_config()\n+ vm_params = {}\n+ vm_params[\"driver\"] = \"vhost-user\"\n+ vm_params[\"opt_path\"] = self.base_dir + \"/vhost-net%d\" % i\n+ vm_params[\"opt_mac\"] = \"00:11:22:33:44:5%d\" % i\n+ vm_params[\"opt_server\"] = \"server\"\n+ if self.queues > 1:\n+ vm_params[\"opt_queue\"] = self.queues\n+ opt_args = \"csum=on,mq=on,vectors=%d\" % (2 * self.queues + 2)\n+ else:\n+ opt_args = \"csum=on\"\n+ if packed:\n+ opt_args = opt_args + \",packed=on\"\n+ vm_params[\"opt_settings\"] = opt_args\n+ vm_info.set_vm_device(**vm_params)\n+ self.set_vm_cpu_number(vm_info)\n+ self.check_qemu_version(vm_info)\n+ vm_dut = None\n+ try:\n+ vm_dut = vm_info.start(load_config=False, set_target=False)\n+ if 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+ self.vm_dut.append(vm_dut)\n+ self.vm.append(vm_info)\n+\n+ def config_virito_net_in_vm(self):\n+ \"\"\"\n+ set vitio-net with 2 quques enable\n+ \"\"\"\n+ for i in range(len(self.vm_dut)):\n+ vm_intf = self.vm_dut[i].ports_info[0][\"intf\"]\n+ self.vm_dut[i].send_expect(\n+ \"ethtool -L %s combined %d\" % (vm_intf, self.queues), \"#\", 20\n+ )\n+\n+ def check_vhost_core_status(self, vm_index, status):\n+ \"\"\"\n+ check the cpu status\n+ \"\"\"\n+ out = self.vhost.get_session_before()\n+ for i in range(self.queues):\n+ # because of the verify_info include all config(vm0 and vm1)\n+ # so current index shoule vm_index + queue_index\n+ verify_index = i + vm_index\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[verify_index][\"core\"],\n+ self.verify_info[verify_index][\"port\"],\n+ self.verify_info[verify_index][\"queue\"],\n+ )\n+ elif status == \"sleeps\":\n+ info = (\n+ \"lcore %s sleeps until interrupt triggers\"\n+ % self.verify_info[verify_index][\"core\"]\n+ )\n+ self.logger.info(info)\n+ self.verify(info in out, \"The CPU status not right for %s\" % info)\n+\n+ def send_and_verify(self):\n+ \"\"\"\n+ start to send packets and check the cpu status\n+ stop and restart to send packets and check the cpu status\n+ \"\"\"\n+ ping_ip = 3\n+ for vm_index in range(self.vm_num):\n+ session_info = []\n+ vm_intf = self.vm_dut[vm_index].ports_info[0][\"intf\"]\n+ self.vm_dut[vm_index].send_expect(\n+ \"ifconfig %s 1.1.1.%d\" % (vm_intf, ping_ip), \"#\"\n+ )\n+ ping_ip = ping_ip + 1\n+ self.vm_dut[vm_index].send_expect(\"ifconfig %s up\" % vm_intf, \"#\")\n+ for queue in range(self.queues):\n+ session = self.vm_dut[vm_index].new_session(\n+ suite=\"ping_info_%d\" % queue\n+ )\n+ session.send_expect(\n+ \"taskset -c %d ping 1.1.1.%d\" % (queue, ping_ip), \"PING\", 30\n+ )\n+ session_info.append(session)\n+ ping_ip = ping_ip + 1\n+ time.sleep(3)\n+ self.check_vhost_core_status(vm_index=vm_index, status=\"waked up\")\n+ # close all sessions of ping in vm\n+ for sess_index in range(len(session_info)):\n+ session_info[sess_index].send_expect(\"^c\", \"#\")\n+ self.vm_dut[vm_index].close_session(session_info[sess_index])\n+\n+ def get_cbdma_ports_info_and_bind_to_dpdk(self):\n+ \"\"\"\n+ get all cbdma ports\n+ \"\"\"\n+ self.cbdma_dev_infos = []\n+ self.used_cbdma = []\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\n+ # on same socket with nic dev\n+ self.cbdma_dev_infos.append(pci_info.group(1))\n+ self.verify(\n+ len(self.cbdma_dev_infos) >= self.queues,\n+ \"There no enough cbdma device to run this suite\",\n+ )\n+ if self.queues == 1:\n+ self.cbdma_dev_infos = [self.cbdma_dev_infos[0], self.cbdma_dev_infos[-1]]\n+ self.used_cbdma = self.cbdma_dev_infos[0 : self.queues * self.vm_num]\n+ self.device_str = \" \".join(self.used_cbdma)\n+ self.dut.send_expect(\n+ \"./usertools/dpdk-devbind.py --force --bind=%s %s\"\n+ % (self.drivername, self.device_str),\n+ \"# \",\n+ 60,\n+ )\n+\n+ def bind_cbdma_device_to_kernel(self):\n+ if self.device_str is not None:\n+ self.dut.send_expect(\"modprobe ioatdma\", \"# \")\n+ self.dut.send_expect(\n+ \"./usertools/dpdk-devbind.py -u %s\" % self.device_str, \"# \", 30\n+ )\n+ self.dut.send_expect(\n+ \"./usertools/dpdk-devbind.py --force --bind=ioatdma %s\"\n+ % self.device_str,\n+ \"# \",\n+ 60,\n+ )\n+\n+ def stop_all_apps(self):\n+ \"\"\"\n+ close all vms\n+ \"\"\"\n+ for i in range(len(self.vm)):\n+ self.vm[i].stop()\n+ self.dut.send_expect(\"killall %s\" % self.l3fwdpower_name, \"#\", timeout=2)\n+\n+ def test_wake_up_split_ring_vhost_user_cores_with_event_idx_interrupt_mode_16_queues_with_cbdma(\n+ self,\n+ ):\n+ \"\"\"\n+ Test Case 1: wake up split ring vhost-user cores with event idx interrupt mode and cbdma enabled 16 queues test\n+ \"\"\"\n+ self.vm_num = 1\n+ self.bind_nic_driver(self.dut_ports)\n+ self.queues = 16\n+ self.get_core_mask()\n+ self.nopci = False\n+ self.get_cbdma_ports_info_and_bind_to_dpdk()\n+ self.lanuch_l3fwd_power()\n+ self.start_vms(\n+ vm_num=self.vm_num,\n+ )\n+ self.relanuch_l3fwd_power()\n+ self.config_virito_net_in_vm()\n+ self.send_and_verify()\n+ self.stop_all_apps()\n+\n+ def test_wake_up_split_ring_vhost_user_cores_by_multi_virtio_net_in_vms_with_event_idx_interrupt_with_cbdma(\n+ self,\n+ ):\n+ \"\"\"\n+ Test Case 2: wake up split ring vhost-user cores by multi virtio-net in VMs with event idx interrupt mode and cbdma enabled test\n+ \"\"\"\n+ self.vm_num = 2\n+ self.bind_nic_driver(self.dut_ports)\n+ self.queues = 1\n+ self.get_core_mask()\n+ self.nopci = False\n+ self.get_cbdma_ports_info_and_bind_to_dpdk()\n+ self.lanuch_l3fwd_power()\n+ self.start_vms(\n+ vm_num=self.vm_num,\n+ )\n+ self.relanuch_l3fwd_power()\n+ self.config_virito_net_in_vm()\n+ self.send_and_verify()\n+ self.stop_all_apps()\n+\n+ def test_wake_up_packed_ring_vhost_user_cores_with_event_idx_interrupt_mode_16_queues_with_cbdma(\n+ self,\n+ ):\n+ \"\"\"\n+ Test Case 3: wake up packed ring vhost-user cores with event idx interrupt mode and cbdma enabled 16 queues test\n+ \"\"\"\n+ self.vm_num = 1\n+ self.bind_nic_driver(self.dut_ports)\n+ self.queues = 16\n+ self.get_core_mask()\n+ self.nopci = False\n+ self.get_cbdma_ports_info_and_bind_to_dpdk()\n+ self.lanuch_l3fwd_power()\n+ self.start_vms(vm_num=self.vm_num, packed=True)\n+ self.relanuch_l3fwd_power()\n+ self.config_virito_net_in_vm()\n+ self.send_and_verify()\n+ self.stop_all_apps()\n+\n+ def test_wake_up_packed_ring_vhost_user_cores_by_multi_virtio_net_in_vms_with_event_idx_interrupt_with_cbdma(\n+ self,\n+ ):\n+ \"\"\"\n+ Test Case 4: wake up packed ring vhost-user cores by multi virtio-net in VMs with event idx interrupt mode and cbdma enabled test\n+ \"\"\"\n+ self.vm_num = 2\n+ self.bind_nic_driver(self.dut_ports)\n+ self.queues = 1\n+ self.get_core_mask()\n+ self.nopci = False\n+ self.get_cbdma_ports_info_and_bind_to_dpdk()\n+ self.lanuch_l3fwd_power()\n+ self.start_vms(vm_num=self.vm_num, packed=True)\n+ self.relanuch_l3fwd_power()\n+ self.config_virito_net_in_vm()\n+ self.send_and_verify()\n+ self.stop_all_apps()\n+\n+ def tear_down(self):\n+ \"\"\"\n+ Run after each test case.\n+ \"\"\"\n+ self.dut.close_session(self.vhost)\n+ self.dut.send_expect(f\"killall {self.l3fwdpower_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+ pass\n", "prefixes": [ "V1", "3/3" ] }{ "id": 119574, "url": "