get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/110135/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 110135,
    "url": "https://patches.dpdk.org/api/patches/110135/?format=api",
    "web_url": "https://patches.dpdk.org/project/dts/patch/20220422100212.1565366-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": "<20220422100212.1565366-1-weix.ling@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20220422100212.1565366-1-weix.ling@intel.com",
    "date": "2022-04-22T10:02:12",
    "name": "[V1,2/3] tests/vhost_cbdma: modify testsuite by DPDK command change",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "1cbb5109f1f98a1c066fa4e3acb6a3072e46dc88",
    "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/20220422100212.1565366-1-weix.ling@intel.com/mbox/",
    "series": [
        {
            "id": 22629,
            "url": "https://patches.dpdk.org/api/series/22629/?format=api",
            "web_url": "https://patches.dpdk.org/project/dts/list/?series=22629",
            "date": "2022-04-22T10:01:47",
            "name": "Modify vhost_cbdma testplan testsuite and",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/22629/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/110135/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/110135/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 7B158A0032;\n\tFri, 22 Apr 2022 12:02:23 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 730BE410E7;\n\tFri, 22 Apr 2022 12:02:23 +0200 (CEST)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n by mails.dpdk.org (Postfix) with ESMTP id 7909240042\n for <dts@dpdk.org>; Fri, 22 Apr 2022 12:02:20 +0200 (CEST)",
            "from fmsmga001.fm.intel.com ([10.253.24.23])\n by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 22 Apr 2022 03:02:19 -0700",
            "from unknown (HELO localhost.localdomain) ([10.239.251.222])\n by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 22 Apr 2022 03:02:16 -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=1650621740; x=1682157740;\n h=from:to:cc:subject:date:message-id:mime-version:\n content-transfer-encoding;\n bh=xjfaunSg+aVcm0RA0X3g7lQNEKTE9RRaKZjwgc7hHaY=;\n b=ax5CNg46KzQtBe2JV4t7aA9+bZyQ1ps5ZXNWHUpsxYnUfxtIrrTcFugM\n E+302ETc2ZazFmG1jrGC+cPnsR54CQ6KCkrA6Z9NHrmzT/56/37Fej33C\n oNwKwQv9spFhJvd9m+l3haEDjo8LhawFTG3ZAhQSXxRJAl6pxxQFG3ext\n 0eAct08cjuJ8cpLe8/NyVQw2hu1XB7qcjFsTB+l82vzVGaymR+5IP++TE\n 3UaZ/PBjUhF0lj2C4xzhEXuAx2fnjAQYqiYsaefw2kqq27+xZVjAdIryj\n UGqVEVlBqYSJBtUdNiMi5m7w0JyE30ket/epcnxF7hRphnWfyCwCfTWHS A==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6400,9594,10324\"; a=\"251964553\"",
            "E=Sophos;i=\"5.90,281,1643702400\"; d=\"scan'208\";a=\"251964553\"",
            "E=Sophos;i=\"5.90,281,1643702400\"; d=\"scan'208\";a=\"703492326\""
        ],
        "From": "Wei Ling <weix.ling@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "Wei Ling <weix.ling@intel.com>",
        "Subject": "[dts][PATCH V1 2/3] tests/vhost_cbdma: modify testsuite by DPDK\n command change",
        "Date": "Fri, 22 Apr 2022 18:02:12 +0800",
        "Message-Id": "<20220422100212.1565366-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": "As commit 53d3f4778c(vhost: integrate dmadev in asynchronous data-path),\nmodify vhost_cbdma testsuite by DPDK22.03 Lib change.\n\nSigned-off-by: Wei Ling <weix.ling@intel.com>\n---\n tests/TestSuite_vhost_cbdma.py | 2567 +++++++++++++++++++++++---------\n 1 file changed, 1887 insertions(+), 680 deletions(-)",
    "diff": "diff --git a/tests/TestSuite_vhost_cbdma.py b/tests/TestSuite_vhost_cbdma.py\nindex f08d7cc3..fd546584 100644\n--- a/tests/TestSuite_vhost_cbdma.py\n+++ b/tests/TestSuite_vhost_cbdma.py\n@@ -1,6 +1,6 @@\n # BSD LICENSE\n #\n-# Copyright(c) <2019> Intel Corporation.\n+# Copyright(c) <2022> Intel Corporation.\n # All rights reserved.\n #\n # Redistribution and use in source and binary forms, with or without\n@@ -29,21 +29,10 @@\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-We introduce a new vdev parameter to enable DMA acceleration for Tx\n-operations of queues:\n- - dmas: This parameter is used to specify the assigned DMA device of\n-   a queue.\n-\n-Here is an example:\n- $ ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c f -n 4 \\\n-   --vdev 'net_vhost0,iface=/tmp/s0,queues=1,dmas=[txq0@80:04.0]'\n-\"\"\"\n+\n import json\n import os\n import re\n-import time\n from copy import deepcopy\n \n import framework.rst as rst\n@@ -53,23 +42,40 @@ from framework.pmd_output import PmdOutput\n from framework.settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting\n from framework.test_case import TestCase\n \n+SPLIT_RING_PATH = {\n+    \"inorder_mergeable_path\": \"mrg_rxbuf=1,in_order=1\",\n+    \"mergeable_path\": \"mrg_rxbuf=1,in_order=0\",\n+    \"inorder_non_mergeable_path\": \"mrg_rxbuf=0,in_order=1\",\n+    \"non_mergeable_path\": \"mrg_rxbuf=0,in_order=0\",\n+    \"vectorized_path\": \"mrg_rxbuf=0,in_order=0,vectorized=1\",\n+}\n+\n+PACKED_RING_PATH = {\n+    \"inorder_mergeable_path\": \"mrg_rxbuf=1,in_order=1,packed_vq=1\",\n+    \"mergeable_path\": \"mrg_rxbuf=1,in_order=0,packed_vq=1\",\n+    \"inorder_non_mergeable_path\": \"mrg_rxbuf=0,in_order=1,packed_vq=1\",\n+    \"non_mergeable_path\": \"mrg_rxbuf=0,in_order=0,packed_vq=1\",\n+    \"vectorized_path\": \"mrg_rxbuf=0,in_order=0,vectorized=1,packed_vq=1\",\n+    \"vectorized_path_not_power_of_2\": \"mrg_rxbuf=0,in_order=0,vectorized=1,packed_vq=1\",\n+}\n+\n+\n+class TestVhostCbdma(TestCase):\n \n-class TestVirTioVhostCbdma(TestCase):\n     def set_up_all(self):\n         self.dut_ports = self.dut.get_ports()\n         self.number_of_ports = 1\n         self.vhost_user = self.dut.new_session(suite=\"vhost-user\")\n         self.virtio_user = self.dut.new_session(suite=\"virtio-user\")\n-        self.virtio_user1 = self.dut.new_session(suite=\"virtio-user1\")\n-        self.pmdout_vhost_user = PmdOutput(self.dut, self.vhost_user)\n-        self.pmdout_virtio_user = PmdOutput(self.dut, self.virtio_user)\n+        self.vhost_user_pmd = PmdOutput(self.dut, self.vhost_user)\n+        self.virtio_user_pmd = PmdOutput(self.dut, self.virtio_user)\n         self.virtio_mac = \"00:01:02:03:04:05\"\n         self.headers_size = HEADER_SIZE[\"eth\"] + HEADER_SIZE[\"ip\"]\n         self.pci_info = self.dut.ports_info[0][\"pci\"]\n-        self.socket = self.dut.get_numa_id(self.dut_ports[0])\n-        self.cores = self.dut.get_core_list(\"all\", socket=self.socket)\n-        self.cbdma_dev_infos = []\n         self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])\n+        self.cores_list = self.dut.get_core_list(config=\"all\", socket=self.ports_socket)\n+        self.vhost_core_list = self.cores_list[0:9]\n+        self.virtio_core_list = self.cores_list[9:11]\n         self.out_path = \"/tmp/%s\" % self.suite_name\n         out = self.tester.send_expect(\"ls -d %s\" % self.out_path, \"# \")\n         if \"No such file or directory\" in out:\n@@ -84,11 +90,7 @@ class TestVirTioVhostCbdma(TestCase):\n         \"\"\"\n         Run before each test case.\n         \"\"\"\n-        self.table_header = [\"Frame\"]\n-        self.table_header.append(\"Mode/RXD-TXD\")\n-        self.used_cbdma = []\n-        self.table_header.append(\"Mpps\")\n-        self.table_header.append(\"% linerate\")\n+        self.table_header = [\"Frame\", \"Mode/RXD-TXD\", \"Mpps\", \"% linerate\"]\n         self.result_table_create(self.table_header)\n         self.test_parameters = self.get_suite_cfg()[\"test_parameters\"]\n         self.test_duration = self.get_suite_cfg()[\"test_duration\"]\n@@ -101,10 +103,13 @@ class TestVirTioVhostCbdma(TestCase):\n         self.dut.send_expect(\"rm -rf /tmp/s0\", \"#\")\n         self.mode_list = []\n \n-    def get_cbdma_ports_info_and_bind_to_dpdk(self, cbdma_num):\n+    def get_cbdma_ports_info_and_bind_to_dpdk(self, cbdma_num, allow_diff_socket=False):\n         \"\"\"\n-        get all cbdma ports\n+        get and bind cbdma ports into DPDK driver\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@@ -119,62 +124,91 @@ class TestVirTioVhostCbdma(TestCase):\n                     cur_socket = 1\n                 else:\n                     cur_socket = 0\n-                if self.ports_socket == cur_socket:\n-                    self.cbdma_dev_infos.append(pci_info.group(1))\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.cbdma_dev_infos) >= cbdma_num,\n-            \"There no enough cbdma device to run this suite\",\n+            len(self.all_cbdma_list) >= cbdma_num, \"There no enough cbdma device\"\n         )\n-        self.used_cbdma = self.cbdma_dev_infos[0:cbdma_num]\n-        self.device_str = \" \".join(self.used_cbdma)\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.device_str),\n+            % (self.drivername, self.cbdma_str),\n             \"# \",\n             60,\n         )\n \n+    @staticmethod\n+    def generate_dmas_param(queues):\n+        das_list = []\n+        for i in range(queues):\n+            das_list.append(\"txq{}\".format(i))\n+        das_param = \"[{}]\".format(\";\".join(das_list))\n+        return das_param\n+\n+    @staticmethod\n+    def generate_lcore_dma_param(cbdma_list, core_list):\n+        group_num = int(len(cbdma_list) / len(core_list))\n+        lcore_dma_list = []\n+        if len(cbdma_list) == 1:\n+            for core in core_list:\n+                lcore_dma_list.append(\"lcore{}@{}\".format(core, cbdma_list[0]))\n+        elif len(core_list) == 1:\n+            for cbdma in cbdma_list:\n+                lcore_dma_list.append(\"lcore{}@{}\".format(core_list[0], cbdma))\n+        else:\n+            for cbdma in cbdma_list:\n+                core_list_index = int(cbdma_list.index(cbdma) / group_num)\n+                lcore_dma_list.append(\n+                    \"lcore{}@{}\".format(core_list[core_list_index], cbdma)\n+                )\n+        lcore_dma_param = \"[{}]\".format(\",\".join(lcore_dma_list))\n+        return lcore_dma_param\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+        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 get_vhost_port_num(self):\n+        out = self.vhost_user.send_expect(\"show port summary all\", \"testpmd> \", 60)\n+        port_num = re.search(\"Number of available ports:\\s*(\\d*)\", out)\n+        return int(port_num.group(1))\n \n-    def check_packets_of_each_queue(self, queue_list):\n+    def check_each_queue_of_port_packets(self, queues=0):\n         \"\"\"\n-        check each queue has receive packets\n+        check each queue of each port has receive packets\n         \"\"\"\n-        out = self.vhost_user.send_expect(\"stop\", \"testpmd> \", 60)\n-        for queue_index in queue_list:\n-            queue = \"Queue= %d\" % queue_index\n-            index = out.find(queue)\n-            rx = re.search(\"RX-packets:\\s*(\\d*)\", out[index:])\n-            tx = re.search(\"TX-packets:\\s*(\\d*)\", out[index:])\n-            rx_packets = int(rx.group(1))\n-            tx_packets = int(tx.group(1))\n-            self.verify(\n-                rx_packets > 0 and tx_packets > 0,\n-                \"The queue %d rx-packets or tx-packets is 0 about \" % queue_index\n-                + \"rx-packets:%d, tx-packets:%d\" % (rx_packets, tx_packets),\n-            )\n-        self.vhost_user.send_expect(\"clear port stats all\", \"testpmd> \", 30)\n-        self.vhost_user.send_expect(\"start\", \"testpmd> \", 30)\n-\n-    def check_port_stats_result(self, session):\n-        out = session.send_expect(\"show port stats all\", \"testpmd> \", 30)\n-        self.result_first = re.findall(r\"RX-packets: (\\w+)\", out)\n-        self.result_secondary = re.findall(r\"TX-packets: (\\w+)\", out)\n-        self.verify(\n-            int(self.result_first[0]) > 1 and int(self.result_secondary[0]) > 1,\n-            \"forward packets no correctly\",\n-        )\n+        out = self.vhost_user_pmd.execute_cmd(\"stop\")\n+        port_num = self.get_vhost_port_num()\n+        for port in range(port_num):\n+            for queue in range(queues):\n+                if queues > 0:\n+                    reg = \"Port= %d/Queue= %d\" % (port, queue)\n+                else:\n+                    reg = \"Forward statistics for port {}\".format(port)\n+                index = out.find(reg)\n+                rx = re.search(\"RX-packets:\\s*(\\d*)\", out[index:])\n+                tx = re.search(\"TX-packets:\\s*(\\d*)\", out[index:])\n+                rx_packets = int(rx.group(1))\n+                tx_packets = int(tx.group(1))\n+                self.verify(\n+                    rx_packets > 0 and tx_packets > 0,\n+                    \"The port {}/queue {} rx-packets or tx-packets is 0 about \".format(\n+                        port, queue\n+                    )\n+                    + \"rx-packets: {}, tx-packets: {}\".format(rx_packets, tx_packets),\n+                )\n+        self.vhost_user_pmd.execute_cmd(\"start\")\n \n     @property\n     def check_2M_env(self):\n@@ -183,650 +217,1900 @@ class TestVirTioVhostCbdma(TestCase):\n         )\n         return True if out == \"2048\" else False\n \n-    def launch_testpmd_as_vhost_user(\n-        self,\n-        command,\n-        cores=\"Default\",\n-        dev=\"\",\n-        ports=\"\",\n-        iova_mode=\"pa\",\n-        set_pmd_param=True,\n-    ):\n-        if iova_mode:\n-            iova_parm = \"--iova=\" + iova_mode\n-        else:\n-            iova_parm = \"\"\n-        self.pmdout_vhost_user.start_testpmd(\n-            cores=cores,\n-            param=command,\n-            vdevs=[dev],\n-            ports=ports,\n-            prefix=\"vhost\",\n-            eal_param=iova_parm,\n-        )\n-        if set_pmd_param:\n-            self.vhost_user.send_expect(\"set fwd mac\", \"testpmd> \", 30)\n-            self.vhost_user.send_expect(\"start\", \"testpmd> \", 30)\n-\n-    def launch_testpmd_as_virtio_user(\n-        self, command, cores=\"Default\", dev=\"\", set_pmd_param=True, eal_param=\"\"\n+    def start_vhost_testpmd(\n+        self, cores=\"Default\", param=\"\", eal_param=\"\", ports=\"\", iova_mode=\"va\"\n     ):\n+        eal_param += \" --iova=\" + iova_mode\n+        self.vhost_user_pmd.start_testpmd(\n+            cores=cores, param=param, eal_param=eal_param, ports=ports, prefix=\"vhost\"\n+        )\n+        self.vhost_user_pmd.execute_cmd(\"set fwd mac\")\n+        self.vhost_user_pmd.execute_cmd(\"start\")\n+\n+    def start_virtio_testpmd(self, cores=\"Default\", param=\"\", eal_param=\"\"):\n         if self.check_2M_env:\n             eal_param += \" --single-file-segments\"\n-        self.pmdout_virtio_user.start_testpmd(\n-            cores,\n-            command,\n-            vdevs=[dev],\n-            no_pci=True,\n-            prefix=\"virtio\",\n-            eal_param=eal_param,\n-        )\n-        if set_pmd_param:\n-            self.virtio_user.send_expect(\"set fwd mac\", \"testpmd> \", 30)\n-            self.virtio_user.send_expect(\"start\", \"testpmd> \", 30)\n-            self.virtio_user.send_expect(\"show port info all\", \"testpmd> \", 30)\n-\n-    def diff_param_launch_send_and_verify(\n-        self, mode, params, dev, cores, eal_param=\"\", is_quit=True, launch_virtio=True\n-    ):\n-        if launch_virtio:\n-            self.launch_testpmd_as_virtio_user(\n-                params, cores, dev=dev, eal_param=eal_param\n-            )\n-        self.send_and_verify(mode)\n-        if is_quit:\n-            self.virtio_user.send_expect(\"quit\", \"# \")\n-            time.sleep(3)\n+        self.virtio_user_pmd.start_testpmd(\n+            cores=cores, param=param, eal_param=eal_param, no_pci=True, prefix=\"virtio\"\n+        )\n+        self.virtio_user_pmd.execute_cmd(\"set fwd mac\")\n+        self.virtio_user_pmd.execute_cmd(\"start\")\n+        self.virtio_user_pmd.execute_cmd(\"show port info all\")\n \n-    def test_perf_pvp_spilt_ring_all_path_vhost_enqueue_operations_with_cbdma(self):\n+    def test_perf_pvp_split_all_path_vhost_txq_1_to_1_cbdma(self):\n         \"\"\"\n-        Test Case 1: PVP split ring all path vhost enqueue operations with cbdma\n+        Test Case 1: PVP split ring all path vhost enqueue operations with 1 to 1 mapping between vrings and CBDMA virtual channels\n         \"\"\"\n-        self.test_target = self.running_case\n-        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n-            self.test_target\n-        ]\n-        txd_rxd = 1024\n-        vhost_param = \" --nb-cores=%d --txd=%d --rxd=%d\"\n-        nb_cores = 1\n-        queues = 1\n-        self.get_cbdma_ports_info_and_bind_to_dpdk(1)\n-        vhost_vdevs = (\n-            f\"'net_vhost0,iface=/tmp/s0,queues=%d,dmas=[txq0@{self.device_str}]'\"\n-        )\n-        virtio_path_dict = {\n-            \"inorder_mergeable_path\": \"mrg_rxbuf=1,in_order=1\",\n-            \"mergeable_path\": \"mrg_rxbuf=1,in_order=0\",\n-            \"inorder_non_mergeable_path\": \"mrg_rxbuf=0,in_order=1\",\n-            \"non_mergeable_path\": \"mrg_rxbuf=0,in_order=0\",\n-            \"vector_rx_path\": \"mrg_rxbuf=0,in_order=0,vectorized=1\",\n-        }\n+        cbdma_num = 1\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(1)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:2]\n+        )\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=1,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        vhost_param = (\n+            \"--nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        virtio_param = \"--nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024\"\n         allow_pci = [self.dut.ports_info[0][\"pci\"]]\n-        for index in range(1):\n-            allow_pci.append(self.cbdma_dev_infos[index])\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores, txd_rxd, txd_rxd),\n-            self.cores[0:2],\n-            dev=vhost_vdevs % (nb_cores),\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n             ports=allow_pci,\n             iova_mode=\"va\",\n         )\n-        for key, path_mode in virtio_path_dict.items():\n-            if key == \"non_mergeable_path\":\n-                virtio_param = (\n-                    \" --enable-hw-vlan-strip --nb-cores=%d --txd=%d --rxd=%d\"\n-                    % (nb_cores, txd_rxd, txd_rxd)\n+        for key, path in SPLIT_RING_PATH.items():\n+            virtio_eal_param = (\n+                \"--vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=1'\".format(\n+                    self.virtio_mac, path\n                 )\n+            )\n+            if key == \"non_mergeable_path\":\n+                new_virtio_param = \"--enable-hw-vlan-strip  \" + virtio_param\n             else:\n-                virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d\" % (\n-                    nb_cores,\n-                    txd_rxd,\n-                    txd_rxd,\n-                )\n-            vdevs = (\n-                f\"'net_virtio_user0,mac={self.virtio_mac},path=/tmp/s0,{path_mode},queues=%d'\"\n-                % nb_cores\n+                new_virtio_param = virtio_param\n+\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n             )\n             mode = key + \"_VA\"\n             self.mode_list.append(mode)\n-            self.diff_param_launch_send_and_verify(\n-                mode,\n-                virtio_param,\n-                vdevs,\n-                self.cores[2:4],\n-                is_quit=False,\n-                launch_virtio=True,\n-            )\n-            self.vhost_user.send_expect(\"show port stats all\", \"testpmd> \", 10)\n-            self.vhost_user.send_expect(\"stop\", \"testpmd> \", 10)\n-            self.vhost_user.send_expect(\"start\", \"testpmd> \", 10)\n-            self.vhost_user.send_expect(\"show port info all\", \"testpmd> \", 30)\n-            self.vhost_user.send_expect(\"show port stats all\", \"testpmd> \", 10)\n-            mode += \"_RestartVhost\"\n-            self.mode_list.append(mode)\n-            self.diff_param_launch_send_and_verify(\n-                mode,\n-                virtio_param,\n-                vdevs,\n-                self.cores[2:4],\n-                is_quit=True,\n-                launch_virtio=False,\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=new_virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets()\n+\n+            self.logger.info(\n+                \"Restart vhost with {} path with {}\".format(key, path)\n             )\n+            mode += \"_RestartVhost\"\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets()\n+            self.virtio_user_pmd.quit()\n \n         if not self.check_2M_env:\n-            self.logger.info(\"Quit and relaunch vhost testpmd with PA mode\")\n-            self.vhost_user.send_expect(\"quit\", \"# \")\n-            self.launch_testpmd_as_vhost_user(\n-                vhost_param % (nb_cores, txd_rxd, txd_rxd),\n-                self.cores[0:2],\n-                dev=vhost_vdevs % (nb_cores),\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n                 ports=allow_pci,\n                 iova_mode=\"pa\",\n             )\n-            for key, path_mode in virtio_path_dict.items():\n-                if key == \"non_mergeable_path\":\n-                    virtio_param = (\n-                        \" --enable-hw-vlan-strip --nb-cores=%d --txd=%d --rxd=%d\"\n-                        % (nb_cores, txd_rxd, txd_rxd)\n+            for key, path in SPLIT_RING_PATH.items():\n+                virtio_eal_param = (\n+                    \"--vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=1'\".format(\n+                        self.virtio_mac, path\n                     )\n+                )\n+                if key == \"non_mergeable_path\":\n+                    new_virtio_param = \"--enable-hw-vlan-strip  \" + virtio_param\n                 else:\n-                    virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d\" % (\n-                        nb_cores,\n-                        txd_rxd,\n-                        txd_rxd,\n-                    )\n-                vdevs = (\n-                    f\"'net_virtio_user0,mac={self.virtio_mac},path=/tmp/s0,{path_mode},queues=%d'\"\n-                    % queues\n+                    new_virtio_param = virtio_param\n+\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n                 )\n                 mode = key + \"_PA\"\n                 self.mode_list.append(mode)\n-                self.diff_param_launch_send_and_verify(\n-                    mode,\n-                    virtio_param,\n-                    vdevs,\n-                    self.cores[2:4],\n-                    is_quit=False,\n-                    launch_virtio=True,\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=new_virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets()\n+\n+                self.logger.info(\n+                    \"Restart vhost with {} path with {}\".format(key, path)\n                 )\n-                self.vhost_user.send_expect(\"show port stats all\", \"testpmd> \", 10)\n-                self.vhost_user.send_expect(\"stop\", \"testpmd> \", 10)\n-                self.vhost_user.send_expect(\"start\", \"testpmd> \", 10)\n-                self.vhost_user.send_expect(\"show port info all\", \"testpmd> \", 30)\n-                self.vhost_user.send_expect(\"show port stats all\", \"testpmd> \", 10)\n                 mode += \"_RestartVhost\"\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n                 self.mode_list.append(mode)\n-                self.diff_param_launch_send_and_verify(\n-                    mode,\n-                    virtio_param,\n-                    vdevs,\n-                    self.cores[2:4],\n-                    is_quit=True,\n-                    launch_virtio=False,\n-                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets()\n+                self.virtio_user_pmd.quit()\n         self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n         self.handle_expected(mode_list=self.mode_list)\n         self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n \n-    def test_perf_pvp_spilt_ring_all_dynamic_queue_number_vhost_enqueue_operations_with_cbdma(\n-        self,\n-    ):\n+    def test_perf_pvp_split_all_path_multi_queues_vhost_txq_1_to_1_cbdma(self):\n         \"\"\"\n-        Test Case2: PVP split ring dynamic queue number vhost enqueue operations with cbdma\n+        Test Case 2: PVP split ring all path multi-queues vhost enqueue operations with 1 to 1 mapping between vrings and CBDMA virtual channels\n         \"\"\"\n-        self.test_target = self.running_case\n-        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n-            self.test_target\n-        ]\n-        nb_cores = 1\n-        txd_rxd = 1024\n-        queues = 8\n-        virtio_path = \"/tmp/s0\"\n-        path_mode = \"mrg_rxbuf=1,in_order=1\"\n-        self.get_cbdma_ports_info_and_bind_to_dpdk(8)\n-        vhost_param = \" --nb-cores=%d --txd=%d --rxd=%d --txq=%d --rxq=%d \"\n-        virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d --txq=%d --rxq=%d \"\n-        vhost_dev = f\"'net_vhost0,iface={virtio_path},queues=%d,client=1,%s'\"\n-        virtio_dev = f\"net_virtio_user0,mac={self.virtio_mac},path={virtio_path},{path_mode},queues={queues},server=1\"\n-        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n-        for index in range(8):\n-            allow_pci.append(self.cbdma_dev_infos[index])\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-            self.cores[0:2],\n-            dev=vhost_dev % (queues, \"\"),\n-            ports=[allow_pci[0]],\n-            iova_mode=\"va\",\n+        cbdma_num = 8\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(8)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:]\n         )\n-        self.mode_list.append(\"with_0_cbdma\")\n-        self.launch_testpmd_as_virtio_user(\n-            virtio_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-            self.cores[2:4],\n-            dev=virtio_dev,\n-        )\n-        self.send_and_verify(\"with_0_cbdma\", queue_list=range(queues))\n-\n-        self.vhost_user.send_expect(\"quit\", \"#\")\n-        vhost_dmas = f\"dmas=[txq0@{self.used_cbdma[0]};txq1@{self.used_cbdma[1]};txq2@{self.used_cbdma[2]};txq3@{self.used_cbdma[3]}]\"\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-            self.cores[0:2],\n-            dev=vhost_dev % (queues, vhost_dmas),\n-            ports=allow_pci[:5],\n-            iova_mode=\"va\",\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n         )\n-        self.mode_list.append(\"with_4_cbdma\")\n-        self.send_and_verify(\"with_4_cbdma\", queue_list=range(int(queues / 2)))\n-\n-        self.vhost_user.send_expect(\"quit\", \"#\")\n-        vhost_dmas = f\"dmas=[txq0@{self.used_cbdma[0]};txq1@{self.used_cbdma[1]};txq2@{self.used_cbdma[2]};txq3@{self.used_cbdma[3]};txq4@{self.used_cbdma[4]};txq5@{self.used_cbdma[5]};txq6@{self.used_cbdma[6]};txq7@{self.used_cbdma[7]}]\"\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-            self.cores[0:2],\n-            dev=vhost_dev % (queues, vhost_dmas),\n+        vhost_param = (\n+            \" --nb-cores=8 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n             ports=allow_pci,\n             iova_mode=\"va\",\n         )\n-        self.mode_list.append(\"with_8_cbdma\")\n-        self.send_and_verify(\"with_8_cbdma\", queue_list=range(queues))\n+        for key, path in SPLIT_RING_PATH.items():\n+            virtio_eal_param = (\n+                \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                    self.virtio_mac, path\n+                )\n+            )\n+            if key == \"non_mergeable_path\":\n+                new_virtio_param = \"--enable-hw-vlan-strip  \" + virtio_param\n+            else:\n+                new_virtio_param = virtio_param\n+\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n+            )\n+            mode = key + \"_VA\"\n+            self.mode_list.append(mode)\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=new_virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n+            )\n+            mode += \"_RestartVhost\"\n+            self.mode_list.append(mode)\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+            self.virtio_user_pmd.quit()\n \n         if not self.check_2M_env:\n-            self.logger.info(\"Quit and relaunch vhost testpmd with PA mode\")\n-            self.vhost_user.send_expect(\"quit\", \"#\")\n-            vhost_dmas = f\"dmas=[txq0@{self.used_cbdma[0]};txq1@{self.used_cbdma[1]};txq2@{self.used_cbdma[2]};txq3@{self.used_cbdma[3]};txq4@{self.used_cbdma[4]};txq5@{self.used_cbdma[5]}]\"\n-            self.launch_testpmd_as_vhost_user(\n-                vhost_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-                self.cores[0:2],\n-                dev=vhost_dev % (queues, vhost_dmas),\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n                 ports=allow_pci,\n                 iova_mode=\"pa\",\n             )\n-            self.mode_list.append(\"with_6_cbdma\")\n-            self.send_and_verify(\"with_6_cbdma\", queue_list=range(queues))\n+            for key, path in SPLIT_RING_PATH.items():\n+                if key == \"mergeable_path\":\n+                    virtio_eal_param = \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                        self.virtio_mac, path\n+                    )\n+\n+                    mode = key + \"_PA\"\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.mode_list.append(mode)\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+                    mode += \"_RestartVhost\"\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.mode_list.append(mode)\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+                    self.virtio_user_pmd.quit()\n \n-        self.virtio_user.send_expect(\"quit\", \"# \")\n-        self.vhost_user.send_expect(\"quit\", \"# \")\n         self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n         self.handle_expected(mode_list=self.mode_list)\n         self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n \n-    def test_perf_pvp_packed_ring_all_path_vhost_enqueue_operations_with_cbdma(self):\n+    def test_perf_pvp_split_all_path_multi_queues_vhost_txq_M_2_1_cbdma(self):\n         \"\"\"\n-        Test Case 3: PVP packed ring all path vhost enqueue operations with cbdma\n+        Test Case 3: PVP split ring all path multi-queues vhost enqueue operations with M to 1 mapping between vrings and CBDMA virtual channels\n         \"\"\"\n-        self.test_target = self.running_case\n-        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n-            self.test_target\n-        ]\n-        txd_rxd = 1024\n-        vhost_param = \" --nb-cores=%d --txd=%d --rxd=%d\"\n-        nb_cores = 1\n-        queues = 1\n-        self.get_cbdma_ports_info_and_bind_to_dpdk(1)\n-        vhost_vdevs = (\n-            f\"'net_vhost0,iface=/tmp/s0,queues=%d,dmas=[txq0@{self.device_str}]'\"\n-        )\n-        virtio_path_dict = {\n-            \"inorder_mergeable_path\": \"mrg_rxbuf=1,in_order=1,packed_vq=1\",\n-            \"mergeable_path\": \"mrg_rxbuf=1,in_order=0,packed_vq=1\",\n-            \"inorder_non_mergeable_path\": \"mrg_rxbuf=0,in_order=1,packed_vq=1\",\n-            \"non_mergeable_path\": \"mrg_rxbuf=0,in_order=0,packed_vq=1\",\n-            \"vector_rx_path\": \"mrg_rxbuf=0,in_order=1,vectorized=1,packed_vq=1\",\n-            \"vector_rx_path_not_power_of_2\": \"mrg_rxbuf=0,in_order=1,vectorized=1,packed_vq=1,queue_size=1025\",\n-        }\n+        cbdma_num = 1\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(8)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:2]\n+        )\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        vhost_param = (\n+            \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n         allow_pci = [self.dut.ports_info[0][\"pci\"]]\n-        for index in range(1):\n-            allow_pci.append(self.cbdma_dev_infos[index])\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores, txd_rxd, txd_rxd),\n-            self.cores[0:2],\n-            dev=vhost_vdevs % (nb_cores),\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n             ports=allow_pci,\n             iova_mode=\"va\",\n         )\n-        for key, path_mode in virtio_path_dict.items():\n-            if key == \"vector_rx_path_not_power_of_2\":\n-                virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d\" % (\n-                    nb_cores,\n-                    (txd_rxd + 1),\n-                    (txd_rxd + 1),\n-                )\n-            else:\n-                virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d\" % (\n-                    nb_cores,\n-                    txd_rxd,\n-                    txd_rxd,\n+        for key, path in SPLIT_RING_PATH.items():\n+            virtio_eal_param = (\n+                \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                    self.virtio_mac, path\n                 )\n-            if \"vector_rx_path\" in key:\n-                eal_param = \"--force-max-simd-bitwidth=512\"\n-            else:\n-                eal_param = \"\"\n-            vdevs = (\n-                f\"'net_virtio_user0,mac={self.virtio_mac},path=/tmp/s0,{path_mode},queues=%d'\"\n-                % queues\n             )\n-            mode = key + \"_VA\"\n+            if key == \"non_mergeable_path\":\n+                new_virtio_param = \"--enable-hw-vlan-strip  \" + virtio_param\n+            else:\n+                new_virtio_param = virtio_param\n+\n+            mode = key + \"_VA\" + \"_1_lcore\"\n             self.mode_list.append(mode)\n-            self.diff_param_launch_send_and_verify(\n-                mode,\n-                virtio_param,\n-                vdevs,\n-                self.cores[2:4],\n-                eal_param=eal_param,\n-                is_quit=False,\n-                launch_virtio=True,\n-            )\n-            self.vhost_user.send_expect(\"show port stats all\", \"testpmd> \", 10)\n-            self.vhost_user.send_expect(\"stop\", \"testpmd> \", 10)\n-            self.vhost_user.send_expect(\"start\", \"testpmd> \", 10)\n-            self.vhost_user.send_expect(\"show port info all\", \"testpmd> \", 30)\n-            self.vhost_user.send_expect(\"show port stats all\", \"testpmd> \", 10)\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n+            )\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=new_virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+\n             mode += \"_RestartVhost\"\n             self.mode_list.append(mode)\n-            self.diff_param_launch_send_and_verify(\n-                mode,\n-                virtio_param,\n-                vdevs,\n-                self.cores[2:4],\n-                is_quit=True,\n-                launch_virtio=False,\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n             )\n-        if not self.check_2M_env:\n-            self.logger.info(\"Quit and relaunch vhost testpmd with PA mode\")\n-            self.vhost_user.send_expect(\"quit\", \"# \")\n-            self.launch_testpmd_as_vhost_user(\n-                vhost_param % (queues, txd_rxd, txd_rxd),\n-                self.cores[0:2],\n-                dev=vhost_vdevs % (queues),\n-                ports=allow_pci,\n-                iova_mode=\"pa\",\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+            self.virtio_user_pmd.quit()\n+\n+        self.vhost_user_pmd.quit()\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:4]\n+        )\n+        vhost_param = (\n+            \" --nb-cores=3 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n             )\n-            for key, path_mode in virtio_path_dict.items():\n-                if key == \"vector_rx_path_not_power_of_2\":\n-                    virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d\" % (\n-                        nb_cores,\n-                        (txd_rxd + 1),\n-                        (txd_rxd + 1),\n-                    )\n-                else:\n-                    virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d\" % (\n-                        nb_cores,\n-                        txd_rxd,\n-                        txd_rxd,\n+        )\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in SPLIT_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+                virtio_eal_param = (\n+                    \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                        self.virtio_mac, path\n                     )\n-                if \"vector_rx_path\" in key:\n-                    eal_param = \"--force-max-simd-bitwidth=512\"\n-                else:\n-                    eal_param = \"\"\n-                vdevs = (\n-                    f\"'net_virtio_user0,mac={self.virtio_mac},path=/tmp/s0,{path_mode},queues=%d'\"\n-                    % queues\n                 )\n-                mode = key + \"_PA\"\n+\n+                mode = key + \"_VA\" + \"_3_lcore\"\n                 self.mode_list.append(mode)\n-                self.diff_param_launch_send_and_verify(\n-                    mode,\n-                    virtio_param,\n-                    vdevs,\n-                    self.cores[2:4],\n-                    eal_param=eal_param,\n-                    is_quit=False,\n-                    launch_virtio=True,\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n                 )\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n \n-                self.vhost_user.send_expect(\"show port stats all\", \"testpmd> \", 10)\n-                self.vhost_user.send_expect(\"stop\", \"testpmd> \", 10)\n-                self.vhost_user.send_expect(\"start\", \"testpmd> \", 10)\n-                self.vhost_user.send_expect(\"show port info all\", \"testpmd> \", 30)\n-                self.vhost_user.send_expect(\"show port stats all\", \"testpmd> \", 10)\n                 mode += \"_RestartVhost\"\n                 self.mode_list.append(mode)\n-                self.diff_param_launch_send_and_verify(\n-                    mode,\n-                    virtio_param,\n-                    vdevs,\n-                    self.cores[2:4],\n-                    is_quit=True,\n-                    launch_virtio=False,\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+                self.virtio_user_pmd.quit()\n+\n+        self.vhost_user_pmd.quit()\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:9]\n+        )\n+        vhost_param = (\n+            \" --nb-cores=8 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in SPLIT_RING_PATH.items():\n+            if key == \"mergeable_path\":\n+                virtio_eal_param = (\n+                    \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                        self.virtio_mac, path\n+                    )\n+                )\n+                mode = key + \"_VA\" + \"_8_lcore\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n                 )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+                self.virtio_user_pmd.quit()\n+\n+        if not self.check_2M_env:\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n+                ports=allow_pci,\n+                iova_mode=\"pa\",\n+            )\n+            for key, path in SPLIT_RING_PATH.items():\n+                if key == \"inorder_non_mergeable_path\":\n+                    virtio_eal_param = \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                        self.virtio_mac, path\n+                    )\n+\n+                    mode = key + \"_PA\" + \"_8_lcore\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+                    self.virtio_user_pmd.quit()\n \n         self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n         self.handle_expected(mode_list=self.mode_list)\n         self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n \n-    def test_perf_pvp_packed_ring_all_dynamic_queue_number_vhost_enqueue_operations_with_cbdma(\n-        self,\n-    ):\n+    def test_perf_pvp_split_all_path_vhost_txq_1_to_N_cbdma(self):\n         \"\"\"\n-        Test Case 4: PVP packed ring dynamic queue number vhost enqueue operations with cbdma\n+        Test Case 4: PVP split ring all path vhost enqueue operations with 1 to N mapping between vrings and CBDMA virtual channels\n         \"\"\"\n-        self.test_target = self.running_case\n-        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n-            self.test_target\n-        ]\n-        nb_cores = 1\n-        txd_rxd = 1024\n-        queues = 8\n-        virtio_path = \"/tmp/s0\"\n-        path_mode = \"mrg_rxbuf=1,in_order=1,packed_vq=1\"\n-        self.get_cbdma_ports_info_and_bind_to_dpdk(8)\n-        vhost_param = \" --nb-cores=%d --txd=%d --rxd=%d --txq=%d --rxq=%d \"\n-        virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d --txq=%d --rxq=%d \"\n-        vhost_dev = f\"'net_vhost0,iface={virtio_path},queues=%d,client=1,%s'\"\n-        virtio_dev = f\"net_virtio_user0,mac={self.virtio_mac},path={virtio_path},{path_mode},queues={queues},server=1\"\n-        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n-        for index in range(8):\n-            allow_pci.append(self.cbdma_dev_infos[index])\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-            self.cores[0:2],\n-            dev=vhost_dev % (queues, \"\"),\n-            ports=[allow_pci[0]],\n-            iova_mode=\"va\",\n+        cbdma_num = 8\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(1)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:2]\n         )\n-        self.mode_list.append(\"with_0_cbdma\")\n-        self.launch_testpmd_as_virtio_user(\n-            virtio_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-            self.cores[2:4],\n-            dev=virtio_dev,\n-        )\n-        self.send_and_verify(\"with_0_cbdma\", queue_list=range(queues))\n-\n-        self.vhost_user.send_expect(\"quit\", \"#\")\n-        vhost_dmas = f\"dmas=[txq0@{self.used_cbdma[0]};txq1@{self.used_cbdma[1]};txq2@{self.used_cbdma[2]};txq3@{self.used_cbdma[3]}]\"\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-            self.cores[0:2],\n-            dev=vhost_dev % (queues, vhost_dmas),\n-            ports=allow_pci[:5],\n-            iova_mode=\"va\",\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=1,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n         )\n-        self.mode_list.append(\"with_4_cbdma\")\n-        self.send_and_verify(\"with_4_cbdma\", queue_list=range(int(queues / 2)))\n-\n-        self.vhost_user.send_expect(\"quit\", \"#\")\n-        vhost_dmas = f\"dmas=[txq0@{self.used_cbdma[0]};txq1@{self.used_cbdma[1]};txq2@{self.used_cbdma[2]};txq3@{self.used_cbdma[3]};txq4@{self.used_cbdma[4]};txq5@{self.used_cbdma[5]};txq6@{self.used_cbdma[6]};txq7@{self.used_cbdma[7]}]\"\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-            self.cores[0:2],\n-            dev=vhost_dev % (queues, vhost_dmas),\n+        vhost_param = (\n+            \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        virtio_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024\"\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n             ports=allow_pci,\n             iova_mode=\"va\",\n         )\n-        self.mode_list.append(\"with_8_cbdma\")\n-        self.send_and_verify(\"with_8_cbdma\", queue_list=range(queues))\n+        for key, path in SPLIT_RING_PATH.items():\n+            virtio_eal_param = (\n+                \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=1\".format(\n+                    self.virtio_mac, path\n+                )\n+            )\n+            if key == \"non_mergeable_path\":\n+                new_virtio_param = \"--enable-hw-vlan-strip  \" + virtio_param\n+            else:\n+                new_virtio_param = virtio_param\n+\n+            mode = key + \"_VA\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n+            )\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=new_virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets()\n+\n+            mode += \"_RestartVhost\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n+            )\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets()\n+            self.virtio_user_pmd.quit()\n \n         if not self.check_2M_env:\n-            self.logger.info(\"Quit and relaunch vhost testpmd with PA mode\")\n-            self.vhost_user.send_expect(\"quit\", \"#\")\n-            vhost_dmas = f\"dmas=[txq0@{self.used_cbdma[0]};txq1@{self.used_cbdma[1]};txq2@{self.used_cbdma[2]};txq3@{self.used_cbdma[3]};txq4@{self.used_cbdma[4]};txq5@{self.used_cbdma[5]}]\"\n-            self.launch_testpmd_as_vhost_user(\n-                vhost_param % (nb_cores, txd_rxd, txd_rxd, queues, queues),\n-                self.cores[0:2],\n-                dev=vhost_dev % (queues, vhost_dmas),\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n                 ports=allow_pci,\n                 iova_mode=\"pa\",\n             )\n-            self.mode_list.append(\"with_6_cbdma\")\n-            self.send_and_verify(\"with_6_cbdma\", queue_list=range(queues))\n+            for key, path in SPLIT_RING_PATH.items():\n+                if key == \"non_mergeable_path\":\n+                    virtio_eal_param = \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=1\".format(\n+                        self.virtio_mac, path\n+                    )\n+\n+                    mode = key + \"_PA\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets()\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets()\n+                    self.virtio_user_pmd.quit()\n \n-        self.virtio_user.send_expect(\"quit\", \"# \")\n-        self.vhost_user.send_expect(\"quit\", \"# \")\n         self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n         self.handle_expected(mode_list=self.mode_list)\n         self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n \n-    def send_chain_packets_and_verify(self):\n-        self.pmdout_virtio_user.execute_cmd(\"clear port stats all\")\n-        self.pmdout_virtio_user.execute_cmd(\"start\")\n-        self.pmdout_vhost_user.execute_cmd(\"vhost enable tx all\")\n-        self.pmdout_vhost_user.execute_cmd(\"set txpkts 65535,65535,65535,65535,65535\")\n-        self.pmdout_vhost_user.execute_cmd(\"start tx_first 32\")\n-        self.pmdout_vhost_user.execute_cmd(\"show port stats all\")\n-        out = self.pmdout_virtio_user.execute_cmd(\"show port stats all\")\n-        rx_pkts = int(re.search(\"RX-packets: (\\d+)\", out).group(1))\n-        self.verify(rx_pkts > 0, \"virtio-user can not received packets\")\n-\n-    def test_loopback_split_ring_large_chain_packets_stress_test_with_cbdma_enqueue(\n-        self,\n-    ):\n+    def test_perf_pvp_split_all_path_multi_queues_vhost_txq_M_to_N_cbdma(self):\n         \"\"\"\n-        Test Case5: loopback split ring large chain packets stress test with cbdma enqueue\n+        Test Case 5: PVP split ring all path multi-queues vhost enqueue operations with M to N mapping between vrings and CBDMA virtual channels\n         \"\"\"\n-        nb_cores = 1\n-        queues = 1\n-        txd_rxd = 2048\n-        txq_rxq = 1\n-        virtio_path = \"/tmp/s0\"\n-        path_mode = \"mrg_rxbuf=1,in_order=0,vectorized=1,queue_size=2048\"\n-        self.get_cbdma_ports_info_and_bind_to_dpdk(1)\n-        vhost_param = \" --nb-cores=%d --mbuf-size=65535\"\n-        virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d --txq=%d --rxq=%d \"\n-        virtio_dev = f\"net_virtio_user0,mac={self.virtio_mac},path={virtio_path},{path_mode},queues=%d\"\n-        vhost_vdevs = (\n-            f\"'net_vhost0,iface=/tmp/s0,queues=%d,dmas=[txq0@{self.device_str}]'\"\n-        )\n-        allow_pci = []\n-        for index in range(1):\n-            allow_pci.append(self.cbdma_dev_infos[index])\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores),\n-            self.cores[0:2],\n-            dev=vhost_vdevs % (queues),\n+        cbdma_num = 8\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(3)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:2]\n+        )\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        vhost_param = (\n+            \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        virtio_param = \"--nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n             ports=allow_pci,\n             iova_mode=\"va\",\n-            set_pmd_param=False,\n-        )\n-        self.launch_testpmd_as_virtio_user(\n-            virtio_param % (nb_cores, txd_rxd, txd_rxd, txq_rxq, txq_rxq),\n-            self.cores[2:4],\n-            dev=virtio_dev % (queues),\n-            set_pmd_param=False,\n         )\n-        self.send_chain_packets_and_verify()\n+        for key, path in SPLIT_RING_PATH.items():\n+            virtio_eal_param = (\n+                \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                    self.virtio_mac, path\n+                )\n+            )\n+            if key == \"non_mergeable_path\":\n+                virtio_param = \"--enable-hw-vlan-strip  \" + virtio_param\n \n-        if not self.check_2M_env:\n-            self.logger.info(\"Quit and relaunch vhost testpmd with PA mode\")\n-            self.pmdout_virtio_user.execute_cmd(\"quit\", \"#\")\n-            self.pmdout_vhost_user.execute_cmd(\"quit\", \"#\")\n-            self.launch_testpmd_as_vhost_user(\n-                vhost_param % (nb_cores),\n-                self.cores[0:2],\n-                dev=vhost_vdevs % (queues),\n-                ports=allow_pci,\n-                iova_mode=\"pa\",\n-                set_pmd_param=False,\n+            mode = key + \"_VA\" + \"_3dmas\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n             )\n-            self.launch_testpmd_as_virtio_user(\n-                virtio_param % (nb_cores, txd_rxd, txd_rxd, txq_rxq, txq_rxq),\n-                self.cores[2:4],\n-                dev=virtio_dev % (queues),\n-                set_pmd_param=False,\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=virtio_param,\n+                eal_param=virtio_eal_param,\n             )\n-        self.send_chain_packets_and_verify()\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n \n-    def test_loopback_packed_ring_large_chain_packets_stress_test_with_cbdma_enqueue(\n-        self,\n-    ):\n-        \"\"\"\n-        Test Case6: loopback packed ring large chain packets stress test with cbdma enqueue\n-        \"\"\"\n-        nb_cores = 1\n-        queues = 1\n-        txd_rxd = 2048\n-        txq_rxq = 1\n-        virtio_path = \"/tmp/s0\"\n-        path_mode = \"mrg_rxbuf=1,in_order=0,vectorized=1,packed_vq=1,queue_size=2048\"\n-        self.get_cbdma_ports_info_and_bind_to_dpdk(1)\n-        vhost_param = \" --nb-cores=%d --mbuf-size=65535\"\n-        virtio_param = \" --nb-cores=%d --txd=%d --rxd=%d --txq=%d --rxq=%d \"\n-        virtio_dev = f\"net_virtio_user0,mac={self.virtio_mac},path={virtio_path},{path_mode},queues=%d\"\n-        vhost_vdevs = (\n-            f\"'net_vhost0,iface=/tmp/s0,queues=%d,dmas=[txq0@{self.device_str}]'\"\n-        )\n-        allow_pci = []\n-        for index in range(1):\n-            allow_pci.append(self.cbdma_dev_infos[index])\n-        self.launch_testpmd_as_vhost_user(\n-            vhost_param % (nb_cores),\n-            self.cores[0:2],\n-            dev=vhost_vdevs % (queues),\n+            mode += \"_RestartVhost\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n+            )\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+            self.virtio_user_pmd.quit()\n+\n+        self.vhost_user_pmd.quit()\n+        dmas = self.generate_dmas_param(8)\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n             ports=allow_pci,\n             iova_mode=\"va\",\n-            set_pmd_param=False,\n-        )\n-        self.launch_testpmd_as_virtio_user(\n-            virtio_param % (nb_cores, txd_rxd, txd_rxd, txq_rxq, txq_rxq),\n-            self.cores[2:4],\n-            dev=virtio_dev % (queues),\n-            set_pmd_param=False,\n         )\n-        self.send_chain_packets_and_verify()\n+        for key, path in SPLIT_RING_PATH.items():\n+            if key == \"inorder_non_mergeable_path\":\n+                virtio_eal_param = (\n+                    \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                        self.virtio_mac, path\n+                    )\n+                )\n+\n+                mode = key + \"_VA\" + \"_8dmas\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+                self.virtio_user_pmd.quit()\n \n         if not self.check_2M_env:\n-            self.logger.info(\"Quit and relaunch vhost testpmd with PA mode\")\n-            self.pmdout_virtio_user.execute_cmd(\"quit\", \"#\")\n-            self.pmdout_vhost_user.execute_cmd(\"quit\", \"#\")\n-            self.launch_testpmd_as_vhost_user(\n-                vhost_param % (nb_cores),\n-                self.cores[0:2],\n-                dev=vhost_vdevs % (queues),\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n                 ports=allow_pci,\n                 iova_mode=\"pa\",\n-                set_pmd_param=False,\n             )\n-            self.launch_testpmd_as_virtio_user(\n-                virtio_param % (nb_cores, txd_rxd, txd_rxd, txq_rxq, txq_rxq),\n-                self.cores[2:4],\n-                dev=virtio_dev % (queues),\n-                set_pmd_param=False,\n-            )\n-            self.send_chain_packets_and_verify()\n+            for key, path in SPLIT_RING_PATH.items():\n+                if key == \"vectorized_path\":\n+                    virtio_eal_param = \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                        self.virtio_mac, path\n+                    )\n+\n+                    mode = key + \"_PA\" + \"_8dmas\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+                    self.virtio_user_pmd.quit()\n+\n+        self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n+        self.handle_expected(mode_list=self.mode_list)\n+        self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n \n-    def send_imix_and_verify(self, mode, multiple_queue=True, queue_list=[]):\n+    def test_perf_pvp_split_dynamic_queues_vhost_txq_M_to_N_cbdma(self):\n         \"\"\"\n-        Send imix packet with packet generator and verify\n+        Test Case 6: PVP split ring dynamic queue number vhost enqueue operations with M to N mapping between vrings and CBDMA virtual channels\n         \"\"\"\n-        frame_sizes = [\n-            64,\n-            128,\n-            256,\n-            512,\n-            1024,\n-            1280,\n-            1518,\n-        ]\n-        tgenInput = []\n-        for frame_size in frame_sizes:\n-            payload_size = frame_size - self.headers_size\n-            port = self.tester.get_local_port(self.dut_ports[0])\n-            fields_config = {\n-                \"ip\": {\n-                    \"src\": {\"action\": \"random\"},\n-                },\n-            }\n-            if not multiple_queue:\n-                fields_config = None\n+        cbdma_num = 8\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=1,client=1'\"\n+        vhost_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024\"\n+        virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci[0:1],\n+            iova_mode=\"va\",\n+        )\n+        for key, path in SPLIT_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+                virtio_eal_param = \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8,server=1\".format(\n+                    self.virtio_mac, path\n+                )\n+\n+                mode = key + \"_VA\" + \"_without_cbdma\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets()\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets()\n+\n+        self.vhost_user_pmd.quit()\n+        dmas = self.generate_dmas_param(4)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list[0:4], core_list=self.vhost_core_list[1:5]\n+        )\n+        vhost_eal_param = (\n+            \"--vdev 'net_vhost0,iface=/tmp/s0,queues=4,client=1,dmas={}'\".format(dmas)\n+        )\n+        vhost_param = (\n+            \" --nb-cores=4 --txq=4 --rxq=4 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci[0:5],\n+            iova_mode=\"va\",\n+        )\n+\n+        for key, path in SPLIT_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+\n+                mode = key + \"_VA\" + \"_1:1\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=4)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=4)\n+\n+        self.vhost_user_pmd.quit()\n+        dmas = self.generate_dmas_param(queues=8)\n+        core1 = self.vhost_core_list[1]\n+        core2 = self.vhost_core_list[2]\n+        core3 = self.vhost_core_list[3]\n+        core4 = self.vhost_core_list[4]\n+        core5 = self.vhost_core_list[5]\n+        cbdma0 = self.cbdma_list[0]\n+        cbdma1 = self.cbdma_list[1]\n+        cbdma2 = self.cbdma_list[2]\n+        cbdma3 = self.cbdma_list[3]\n+        cbdma4 = self.cbdma_list[4]\n+        cbdma5 = self.cbdma_list[5]\n+        cbdma6 = self.cbdma_list[6]\n+        cbdma7 = self.cbdma_list[7]\n+        lcore_dma = (\n+            f\"[lcore{core1}@{cbdma0},lcore{core1}@{cbdma7},\"\n+            + f\"lcore{core2}@{cbdma1},lcore{core2}@{cbdma2},lcore{core2}@{cbdma3},\"\n+            + f\"lcore{core3}@{cbdma2},lcore{core3}@{cbdma3},lcore{core3}@{cbdma4},\"\n+            f\"lcore{core4}@{cbdma2},lcore{core4}@{cbdma3},lcore{core4}@{cbdma4},lcore{core4}@{cbdma5},\"\n+            f\"lcore{core5}@{cbdma0},lcore{core5}@{cbdma1},lcore{core5}@{cbdma2},lcore{core5}@{cbdma3},\"\n+            f\"lcore{core5}@{cbdma4},lcore{core5}@{cbdma5},lcore{core5}@{cbdma6},lcore{core5}@{cbdma7}]\"\n+        )\n+        vhost_eal_param = (\n+            \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,client=1,dmas={}'\".format(dmas)\n+        )\n+        vhost_param = (\n+            \" --nb-cores=5 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci[0:9],\n+            iova_mode=\"va\",\n+        )\n+\n+        for key, path in SPLIT_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+\n+                mode = key + \"_VA\" + \"_M<N\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+        self.vhost_user_pmd.quit()\n+        dmas = self.generate_dmas_param(7)\n+        lcore_dma = (\n+            f\"[lcore{core1}@{cbdma0},lcore{core2}@{cbdma0},lcore{core3}@{cbdma1},lcore{core3}@{cbdma2},\"\n+            f\"lcore{core4}@{cbdma1},lcore{core4}@{cbdma2},lcore{core5}@{cbdma1},lcore{core5}@{cbdma2}]\"\n+        )\n+        vhost_eal_param = (\n+            \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,client=1,dmas={}'\".format(dmas)\n+        )\n+        vhost_param = (\n+            \" --nb-cores=5 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci[0:5],\n+            iova_mode=\"va\",\n+        )\n+\n+        for key, path in SPLIT_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+\n+                mode = key + \"_VA\" + \"_M>N\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+        if not self.check_2M_env:\n+            self.vhost_user_pmd.quit()\n+            dmas = self.generate_dmas_param(queues=8)\n+\n+            vhost_eal_param = (\n+                \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,client=1,dmas={}'\".format(\n+                    dmas\n+                )\n+            )\n+            vhost_param = \" --nb-cores=5 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n+                ports=allow_pci[0:5],\n+                iova_mode=\"pa\",\n+            )\n+\n+            for key, path in SPLIT_RING_PATH.items():\n+                if key == \"inorder_mergeable_path\":\n+\n+                    mode = key + \"_PA\" + \"_M>N\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"ReLaunch host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+        self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n+        self.handle_expected(mode_list=self.mode_list)\n+        self.handle_results(mode_list=self.mode_list)\n+        self.virtio_user_pmd.quit()\n+        self.vhost_user_pmd.quit()\n+\n+    def test_perf_pvp_packed_all_path_vhost_txq_1_to_1_cbdma(self):\n+        \"\"\"\n+        Test Case 7: PVP packed ring all path vhost enqueue operations with 1 to 1 mapping between vrings and CBDMA virtual channels\n+        \"\"\"\n+        cbdma_num = 1\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(1)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:2]\n+        )\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=1,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        vhost_param = (\n+            \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            virtio_eal_param = (\n+                \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=1'\".format(\n+                    self.virtio_mac, path\n+                )\n+            )\n+            virtio_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024\"\n+            if key == \"vectorized_path_not_power_of_2\":\n+                virtio_eal_param += \",queue_size=1025\"\n+                virtio_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1025 --rxd=1025\"\n+            if \"vectorized\" in key:\n+                virtio_eal_param += \"  --force-max-simd-bitwidth=512\"\n+\n+            mode = key + \"_VA\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n+            )\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets()\n+\n+            mode += \"_RestartVhost\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n+            )\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets()\n+            self.virtio_user_pmd.quit()\n+\n+        if not self.check_2M_env:\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n+                ports=allow_pci,\n+                iova_mode=\"pa\",\n+            )\n+            for key, path in PACKED_RING_PATH.items():\n+                if key == \"inorder_mergeable_path\":\n+                    virtio_eal_param = \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=1'\".format(\n+                        self.virtio_mac, path\n+                    )\n+                    virtio_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024\"\n+\n+                    mode = key + \"_PA\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets()\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets()\n+                    self.virtio_user_pmd.quit()\n+\n+        self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n+        self.handle_expected(mode_list=self.mode_list)\n+        self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n+\n+    def test_perf_pvp_packed_all_path_multi_queues_vhost_txq_1_to_1_cbdma(self):\n+        \"\"\"\n+        Test Case 8: PVP packed ring all path multi-queues vhost enqueue operations with 1 to 1 mapping between vrings and CBDMA virtual channels\n+        \"\"\"\n+        cbdma_num = 8\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(8)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:]\n+        )\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        vhost_param = (\n+            \" --nb-cores=8 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            virtio_eal_param = (\n+                \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=8'\".format(\n+                    self.virtio_mac, path\n+                )\n+            )\n+            virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+            if key == \"vectorized_path_not_power_of_2\":\n+                virtio_eal_param += \",queue_size=1025\"\n+                virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1025 --rxd=1025\"\n+            if \"vectorized\" in key:\n+                virtio_eal_param += \"  --force-max-simd-bitwidth=512\"\n+\n+            mode = key + \"_VA\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n+            )\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+\n+            mode += \"_RestartVhost\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n+            )\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+            self.virtio_user_pmd.quit()\n+\n+        if not self.check_2M_env:\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n+                ports=allow_pci,\n+                iova_mode=\"pa\",\n+            )\n+            for key, path in PACKED_RING_PATH.items():\n+                if key == \"mergeable_path\":\n+                    virtio_param = (\n+                        \" --nb-cores=1  --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+                    )\n+                    virtio_eal_param = \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8\".format(\n+                        self.virtio_mac, path\n+                    )\n+\n+                    mode = key + \"_PA\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+                    self.virtio_user_pmd.quit()\n+\n+        self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n+        self.handle_expected(mode_list=self.mode_list)\n+        self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n+\n+    def test_perf_pvp_packed_all_path_multi_queues_vhost_txq_M_to_1_cbdma(self):\n+        \"\"\"\n+        Test Case 9: PVP packed ring all path multi-queues vhost enqueue operations with M to 1 mapping between vrings and CBDMA virtual channels\n+        \"\"\"\n+        cbdma_num = 1\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(8)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:2]\n+        )\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        vhost_param = (\n+            \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            virtio_eal_param = (\n+                \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=8'\".format(\n+                    self.virtio_mac, path\n+                )\n+            )\n+            virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+            if key == \"vectorized_path_not_power_of_2\":\n+                virtio_eal_param += \",queue_size=1025\"\n+                virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1025 --rxd=1025\"\n+\n+            mode = key + \"_VA\" + \"_1_lcore\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n+            )\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+\n+            mode += \"_RestartVhost\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n+            )\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets(queues=8)\n+            self.virtio_user_pmd.quit()\n+\n+        self.vhost_user_pmd.quit()\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:4]\n+        )\n+        vhost_param = (\n+            \" --nb-cores=3 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+                virtio_eal_param = (\n+                    \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=8'\".format(\n+                        self.virtio_mac, path\n+                    )\n+                )\n+                virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+\n+                mode = key + \"_VA\" + \"_3_lcore\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+                self.virtio_user_pmd.quit()\n+\n+        self.vhost_user_pmd.quit()\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:9]\n+        )\n+        vhost_param = (\n+            \" --nb-cores=8 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            if key == \"mergeable_path\":\n+                virtio_eal_param = (\n+                    \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=8'\".format(\n+                        self.virtio_mac, path\n+                    )\n+                )\n+                virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+\n+                mode = key + \"_VA\" + \"_8_lcore\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+                self.virtio_user_pmd.quit()\n+\n+        if not self.check_2M_env:\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n+                ports=allow_pci,\n+                iova_mode=\"pa\",\n+            )\n+            for key, path in PACKED_RING_PATH.items():\n+                if key == \"inorder_non_mergeable_path\":\n+                    virtio_eal_param = \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=8'\".format(\n+                        self.virtio_mac, path\n+                    )\n+                    virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+\n+                    mode = key + \"_PA\" + \"_8_lcore\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+                    self.virtio_user_pmd.quit()\n+\n+        self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n+        self.handle_expected(mode_list=self.mode_list)\n+        self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n+\n+    def test_perf_pvp_packed_all_path_vhost_txq_1_to_N_cbdma(self):\n+        \"\"\"\n+        Test Case 10: PVP packed ring all path vhost enqueue operations with 1 to N mapping between vrings and CBDMA virtual channels\n+        \"\"\"\n+        cbdma_num = 8\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(1)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:2]\n+        )\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=1,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        vhost_param = (\n+            \" --nb-cores=1 --txq=1 --rxq=1--txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            virtio_eal_param = (\n+                \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=1'\".format(\n+                    self.virtio_mac, path\n+                )\n+            )\n+            virtio_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024\"\n+            if key == \"vectorized_path_not_power_of_2\":\n+                virtio_eal_param += \",queue_size=1025\"\n+                virtio_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1025 --rxd=1025\"\n+\n+            mode = key + \"_VA\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n+            )\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets()\n+\n+            mode += \"_RestartVhost\"\n+            self.mode_list.append(mode)\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n+            )\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.check_each_queue_of_port_packets()\n+            self.virtio_user_pmd.quit()\n+\n+        if not self.check_2M_env:\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n+                ports=allow_pci,\n+                iova_mode=\"pa\",\n+            )\n+            for key, path in PACKED_RING_PATH.items():\n+                if key == \"non_mergeable_path\":\n+                    virtio_eal_param = \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=1'\".format(\n+                        self.virtio_mac, path\n+                    )\n+                    virtio_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024\"\n+\n+                    mode = key + \"_PA\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets()\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets()\n+                    self.virtio_user_pmd.quit()\n+\n+        self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n+        self.handle_expected(mode_list=self.mode_list)\n+        self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n+\n+    def test_perf_pvp_packed_all_path_multi_queues_vhost_txq_M_to_N_cbdma(self):\n+        \"\"\"\n+        Test Case 11: PVP packed ring all path vhost enqueue operations with M to N mapping between vrings and CBDMA virtual channels\n+        \"\"\"\n+        cbdma_num = 8\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        dmas = self.generate_dmas_param(3)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list, core_list=self.vhost_core_list[1:2]\n+        )\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        vhost_param = (\n+            \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            virtio_eal_param = (\n+                \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=8'\".format(\n+                    self.virtio_mac, path\n+                )\n+            )\n+            virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+            if key == \"vectorized_path_not_power_of_2\":\n+                virtio_eal_param += \",queue_size=1025\"\n+                virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1025 --rxd=1025\"\n+\n+            mode = key + \"_VA\" + \"_3dmas\"\n+            self.mode_list.append(mode)\n+            self.start_virtio_testpmd(\n+                cores=self.virtio_core_list,\n+                param=virtio_param,\n+                eal_param=virtio_eal_param,\n+            )\n+            self.send_imix_packets(mode=mode)\n+            self.logger.info(\n+                \"Start virtio-user with {} path with {}\".format(key, path)\n+            )\n+            self.check_each_queue_of_port_packets(queues=8)\n+\n+            mode += \"_RestartVhost\"\n+            self.mode_list.append(mode)\n+            self.vhost_user_pmd.execute_cmd(\"start\")\n+            self.send_imix_packets(mode=mode)\n+            self.logger.info(\n+                \"Restart host with {} path with {}\".format(key, path)\n+            )\n+            self.check_each_queue_of_port_packets(queues=8)\n+            self.virtio_user_pmd.quit()\n+\n+        self.vhost_user_pmd.quit()\n+        dmas = self.generate_dmas_param(queues=8)\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,dmas={},dma_ring_size=2048'\".format(\n+            dmas\n+        )\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci,\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            if key == \"inorder_non_mergeable_path\":\n+                virtio_eal_param = (\n+                    \" --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=8'\".format(\n+                        self.virtio_mac, path\n+                    )\n+                )\n+                virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+\n+                mode = key + \"_VA\" + \"_8dmas\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+                self.virtio_user_pmd.quit()\n+\n+        if not self.check_2M_env:\n+            self.vhost_user_pmd.quit()\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n+                ports=allow_pci,\n+                iova_mode=\"pa\",\n+            )\n+            for key, path in PACKED_RING_PATH.items():\n+                if key == \"vectorized_path\":\n+                    virtio_eal_param = \" --force-max-simd-bitwidth=512 --vdev 'net_virtio_user0,mac={},path=/tmp/s0,{},queues=8'\".format(\n+                        self.virtio_mac, path\n+                    )\n+                    virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+\n+                    mode = key + \"_PA\" + \"_8dmas\"\n+                    self.mode_list.append(mode)\n+                    self.start_virtio_testpmd(\n+                        cores=self.virtio_core_list,\n+                        param=virtio_param,\n+                        eal_param=virtio_eal_param,\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.check_each_queue_of_port_packets(queues=8)\n+                    self.virtio_user_pmd.quit()\n+\n+        self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n+        self.handle_expected(mode_list=self.mode_list)\n+        self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n+\n+    def test_perf_pvp_packed_dynamic_queues_vhost_txq_M_to_N_cbdma(self):\n+        \"\"\"\n+        Test Case 12: PVP packed ring dynamic queue number vhost enqueue operations with M to N mapping between vrings and CBDMA virtual channels\n+        \"\"\"\n+        cbdma_num = 8\n+        self.get_cbdma_ports_info_and_bind_to_dpdk(cbdma_num)\n+        vhost_eal_param = \"--vdev 'net_vhost0,iface=/tmp/s0,queues=1,client=1'\"\n+        vhost_param = \" --nb-cores=1 --txq=1 --rxq=1 --txd=1024 --rxd=1024\"\n+        virtio_param = \" --nb-cores=1 --txq=8 --rxq=8 --txd=1024 --rxd=1024\"\n+        allow_pci = [self.dut.ports_info[0][\"pci\"]]\n+        for i in range(cbdma_num):\n+            allow_pci.append(self.cbdma_list[i])\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci[0:1],\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+                virtio_eal_param = \"--vdev=net_virtio_user0,mac={},path=/tmp/s0,{},queues=8,server=1\".format(\n+                    self.virtio_mac, path\n+                )\n+\n+                mode = key + \"_VA\" + \"_without_cbdma\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.start_virtio_testpmd(\n+                    cores=self.virtio_core_list,\n+                    param=virtio_param,\n+                    eal_param=virtio_eal_param,\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets()\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets()\n+\n+        self.vhost_user_pmd.quit()\n+        dmas = self.generate_dmas_param(4)\n+        lcore_dma = self.generate_lcore_dma_param(\n+            cbdma_list=self.cbdma_list[0:4], core_list=self.vhost_core_list[1:5]\n+        )\n+        vhost_eal_param = (\n+            \"--vdev 'net_vhost0,iface=/tmp/s0,queues=4,client=1,dmas={}'\".format(dmas)\n+        )\n+        vhost_param = (\n+            \" --nb-cores=4 --txq=4 --rxq=4 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci[0:5],\n+            iova_mode=\"va\",\n+        )\n+        for key, path in PACKED_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+\n+                mode = key + \"_VA\" + \"_1:1\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=4)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=4)\n+\n+        self.vhost_user_pmd.quit()\n+        dmas = self.generate_dmas_param(8)\n+        core1 = self.vhost_core_list[1]\n+        core2 = self.vhost_core_list[2]\n+        core3 = self.vhost_core_list[3]\n+        core4 = self.vhost_core_list[4]\n+        core5 = self.vhost_core_list[5]\n+        cbdma0 = self.cbdma_list[0]\n+        cbdma1 = self.cbdma_list[1]\n+        cbdma2 = self.cbdma_list[2]\n+        cbdma3 = self.cbdma_list[3]\n+        cbdma4 = self.cbdma_list[4]\n+        cbdma5 = self.cbdma_list[5]\n+        cbdma6 = self.cbdma_list[6]\n+        cbdma7 = self.cbdma_list[7]\n+        lcore_dma = (\n+            f\"[lcore{core1}@{cbdma0},lcore{core1}@{cbdma7},\"\n+            + f\"lcore{core2}@{cbdma1},lcore{core2}@{cbdma2},lcore{core2}@{cbdma3},\"\n+            + f\"lcore{core3}@{cbdma2},lcore{core3}@{cbdma3},lcore{core3}@{cbdma4},\"\n+            f\"lcore{core4}@{cbdma2},lcore{core4}@{cbdma3},lcore{core4}@{cbdma4},lcore{core4}@{cbdma5},\"\n+            f\"lcore{core5}@{cbdma0},lcore{core5}@{cbdma1},lcore{core5}@{cbdma2},lcore{core5}@{cbdma3},\"\n+            f\"lcore{core5}@{cbdma4},lcore{core5}@{cbdma5},lcore{core5}@{cbdma6},lcore{core5}@{cbdma7}]\"\n+        )\n+        vhost_eal_param = (\n+            \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,client=1,dmas={}'\".format(dmas)\n+        )\n+        vhost_param = (\n+            \" --nb-cores=5 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci[0:9],\n+            iova_mode=\"va\",\n+        )\n+\n+        for key, path in PACKED_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+\n+                mode = key + \"_VA\" + \"_M<N\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+        self.vhost_user_pmd.quit()\n+        dmas = self.generate_dmas_param(7)\n+        lcore_dma = (\n+            f\"[lcore{core1}@{cbdma0},lcore{core2}@{cbdma0},lcore{core3}@{cbdma1},lcore{core3}@{cbdma2},\"\n+            f\"lcore{core4}@{cbdma1},lcore{core4}@{cbdma2},lcore{core5}@{cbdma1},lcore{core5}@{cbdma2}]\"\n+        )\n+        vhost_eal_param = (\n+            \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,client=1,dmas={}'\".format(dmas)\n+        )\n+        vhost_param = (\n+            \" --nb-cores=5 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+        )\n+\n+        self.start_vhost_testpmd(\n+            cores=self.vhost_core_list,\n+            param=vhost_param,\n+            eal_param=vhost_eal_param,\n+            ports=allow_pci[0:5],\n+            iova_mode=\"va\",\n+        )\n+\n+        for key, path in PACKED_RING_PATH.items():\n+            if key == \"inorder_mergeable_path\":\n+\n+                mode = key + \"_VA\" + \"_M>N\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Start virtio-user with {} path with {}\".format(key, path)\n+                )\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+                mode += \"_RestartVhost\"\n+                self.mode_list.append(mode)\n+                self.logger.info(\n+                    \"Restart host with {} path with {}\".format(key, path)\n+                )\n+                self.vhost_user_pmd.execute_cmd(\"start\")\n+                self.send_imix_packets(mode=mode)\n+                self.check_each_queue_of_port_packets(queues=8)\n+\n+        if not self.check_2M_env:\n+            self.vhost_user_pmd.quit()\n+            dmas = self.generate_dmas_param(8)\n+            vhost_eal_param = (\n+                \"--vdev 'net_vhost0,iface=/tmp/s0,queues=8,client=1,dmas={}'\".format(\n+                    dmas\n+                )\n+            )\n+            vhost_param = \" --nb-cores=5 --txq=8 --rxq=8 --txd=1024 --rxd=1024 --lcore-dma={}\".format(\n+                lcore_dma\n+            )\n+            self.start_vhost_testpmd(\n+                cores=self.vhost_core_list,\n+                param=vhost_param,\n+                eal_param=vhost_eal_param,\n+                ports=allow_pci[0:5],\n+                iova_mode=\"pa\",\n+            )\n+\n+            for key, path in PACKED_RING_PATH.items():\n+                if key == \"inorder_mergeable_path\":\n+\n+                    mode = key + \"_PA\" + \"_M>N\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Start virtio-user with {} path with {}\".format(key, path)\n+                    )\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+                    mode += \"_RestartVhost\"\n+                    self.mode_list.append(mode)\n+                    self.logger.info(\n+                        \"Restart host with {} path with {}\".format(key, path)\n+                    )\n+                    self.vhost_user_pmd.execute_cmd(\"start\")\n+                    self.send_imix_packets(mode=mode)\n+                    self.check_each_queue_of_port_packets(queues=8)\n+\n+        self.result_table_print()\n+        self.test_target = self.running_case\n+        self.expected_throughput = self.get_suite_cfg()[\"expected_throughput\"][\n+            self.test_target\n+        ]\n+        self.handle_expected(mode_list=self.mode_list)\n+        self.handle_results(mode_list=self.mode_list)\n+        self.vhost_user_pmd.quit()\n+        self.virtio_user_pmd.quit()\n+\n+    def send_imix_packets(self, mode):\n+        \"\"\"\n+        Send imix packet with packet generator and verify\n+        \"\"\"\n+        frame_sizes = [64, 128, 256, 512, 1024, 1518]\n+        tgenInput = []\n+        for frame_size in frame_sizes:\n+            payload_size = frame_size - self.headers_size\n+            port = self.tester.get_local_port(self.dut_ports[0])\n+            fields_config = {\n+                \"ip\": {\n+                    \"src\": {\"action\": \"random\"},\n+                },\n+            }\n             pkt = Packet()\n             pkt.assign_layers([\"ether\", \"ipv4\", \"raw\"])\n             pkt.config_layers(\n@@ -874,84 +2158,10 @@ class TestVirTioVhostCbdma(TestCase):\n         results_row.append(Mpps)\n         results_row.append(throughput)\n         self.result_table_add(results_row)\n-        if queue_list:\n-            self.check_packets_of_each_queue(queue_list=queue_list)\n-\n-    def send_and_verify(\n-        self,\n-        mode,\n-        multiple_queue=True,\n-        queue_list=[],\n-        frame_sizes=None,\n-        pkt_length_mode=\"imix\",\n-    ):\n-        \"\"\"\n-        Send packet with packet generator and verify\n-        \"\"\"\n-        if pkt_length_mode == \"imix\":\n-            self.send_imix_and_verify(mode, multiple_queue, queue_list)\n-            return\n-\n-        self.throughput[mode] = dict()\n-        for frame_size in frame_sizes:\n-            self.throughput[mode][frame_size] = dict()\n-            payload_size = frame_size - self.headers_size\n-            tgenInput = []\n-            port = self.tester.get_local_port(self.dut_ports[0])\n-            fields_config = {\n-                \"ip\": {\n-                    \"src\": {\"action\": \"random\"},\n-                },\n-            }\n-            if not multiple_queue:\n-                fields_config = None\n-            pkt1 = Packet()\n-            pkt1.assign_layers([\"ether\", \"ipv4\", \"raw\"])\n-            pkt1.config_layers(\n-                [\n-                    (\"ether\", {\"dst\": \"%s\" % self.virtio_mac}),\n-                    (\"ipv4\", {\"src\": \"1.1.1.1\"}),\n-                    (\"raw\", {\"payload\": [\"01\"] * int(\"%d\" % payload_size)}),\n-                ]\n-            )\n-            pkt1.save_pcapfile(\n-                self.tester,\n-                \"%s/multiqueuerandomip_%s.pcap\" % (self.out_path, frame_size),\n-            )\n-            tgenInput.append(\n-                (\n-                    port,\n-                    port,\n-                    \"%s/multiqueuerandomip_%s.pcap\" % (self.out_path, frame_size),\n-                )\n-            )\n-            self.tester.pktgen.clear_streams()\n-            streams = self.pktgen_helper.prepare_stream_from_tginput(\n-                tgenInput, 100, fields_config, self.tester.pktgen\n-            )\n-            trans_options = {\"delay\": 5, \"duration\": 20}\n-            _, pps = self.tester.pktgen.measure_throughput(\n-                stream_ids=streams, options=trans_options\n-            )\n-            Mpps = pps / 1000000.0\n-            self.verify(\n-                Mpps > 0,\n-                \"%s can not receive packets of frame size %d\"\n-                % (self.running_case, frame_size),\n-            )\n-            throughput = Mpps * 100 / float(self.wirespeed(self.nic, frame_size, 1))\n-            self.throughput[mode][frame_size][self.nb_desc] = Mpps\n-            results_row = [frame_size]\n-            results_row.append(mode)\n-            results_row.append(Mpps)\n-            results_row.append(throughput)\n-            self.result_table_add(results_row)\n-        if queue_list:\n-            self.check_packets_of_each_queue(queue_list=queue_list)\n \n     def handle_expected(self, mode_list):\n         \"\"\"\n-        Update expected numbers to configurate file: $DTS_CFG_FOLDER/$suite_name.cfg\n+        Update expected numbers to configurate file: conf/$suite_name.cfg\n         \"\"\"\n         if load_global_setting(UPDATE_EXPECTED) == \"yes\":\n             for mode in mode_list:\n@@ -1026,7 +2236,6 @@ class TestVirTioVhostCbdma(TestCase):\n                         )\n                         ret_datas[nb_desc] = deepcopy(ret_data)\n                 self.test_result[mode][frame_size] = deepcopy(ret_datas)\n-        # Create test results table\n         self.result_table_create(header)\n         for mode in mode_list:\n             for frame_size in self.test_parameters.keys():\n@@ -1037,9 +2246,7 @@ class TestVirTioVhostCbdma(TestCase):\n                             self.test_result[mode][frame_size][nb_desc][header[i]]\n                         )\n                     self.result_table_add(table_row)\n-        # present test results to screen\n         self.result_table_print()\n-        # save test results as a file\n         if self.save_result_flag:\n             self.save_result(self.test_result, mode_list)\n \n",
    "prefixes": [
        "V1",
        "2/3"
    ]
}