diff --git a/tests/TestSuite_vm2vm_virtio_user.py b/tests/TestSuite_vm2vm_virtio_user.py
index 2b66af77..efb23fde 100644
--- a/tests/TestSuite_vm2vm_virtio_user.py
+++ b/tests/TestSuite_vm2vm_virtio_user.py
@@ -72,6 +72,7 @@ class TestVM2VMVirtioUser(TestCase):
         self.virtio_user0_pmd = PmdOutput(self.dut, self.virtio_user0)
         self.virtio_user1_pmd = PmdOutput(self.dut, self.virtio_user1)
         self.dut.restore_interfaces()
+        self.dump_port = 'device_id=net_virtio_user1'
 
     def set_up(self):
         """
@@ -107,6 +108,15 @@ class TestVM2VMVirtioUser(TestCase):
                                      no_pci=no_pci, ports=[],prefix=self.vhost_prefix, fixed_prefix=fixed_prefix)
         self.vhost_user_pmd.execute_cmd('set fwd %s' % fwd_mode)
 
+    def lanuch_vhost_testpmd_with_cbdma(self, vdevs=None, iova='va'):
+        """
+        start testpmd with cbdma
+        """
+        eal_params = vdevs + " --iova={}".format(iova)
+        param = "--nb-cores=1 --rxq={} --txq={} --txd={} --rxd={} --no-flush-rx".format(self.queue_num, self.queue_num, self.txd_num, self.txd_num)
+        self.vhost_user_pmd.start_testpmd(cores=self.core_list_vhost, param=param, no_pci=False, ports=[], eal_param=eal_params, prefix='vhost', fixed_prefix=True)
+        self.vhost_user_pmd.execute_cmd('vhost enable tx all')
+
     @property
     def check_2M_env(self):
         out = self.dut.send_expect("cat /proc/meminfo |grep Hugepagesize|awk '{print($2)}'", "# ")
@@ -151,27 +161,28 @@ class TestVM2VMVirtioUser(TestCase):
     def start_virtio_testpmd_with_vhost_net0_cbdma(self, path_mode, extern_params, ringsize):
         """
         launch the testpmd as virtio with vhost_net0
-        and start to send 251 small packets with diff burst
         """
         eal_params = ' --socket-mem {} --vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net0,queues={},' \
                      '{},queue_size={} '.format(self.socket_mem, self.queue_num, path_mode, ringsize)
         if self.check_2M_env:
             eal_params += " --single-file-segments "
+        if 'vectorized_path' in self.running_case:
+            eal_params += " --force-max-simd-bitwidth=512"
         params = "--nb-cores=1 --txd={} --rxd={} {}".format(ringsize, ringsize, extern_params)
         self.virtio_user0_pmd.start_testpmd(cores=self.core_list_virtio0, param=params, eal_param=eal_params, \
                                            no_pci=True, ports=[],prefix=self.virtio_prefix_0, fixed_prefix=True)
 
-    def check_packet_payload_valid_with_cbdma(self, filename, total_pkts_num, large_4640_pkts_num, large_64_pkts_num):
+    def check_packet_payload_valid_with_cbdma(self, filename, total_pkts_num, pkts_64_num=0, pkts_960_num=0, pkts_4640_num=0, pkts_8k_num=0):
         """
         check the payload is valid
         """
         # stop pdump
         actual_4640_pkt_num = 0
         actual_64_pkt_num = 0
+        actual_960_pkt_num = 0
+        actual_8k_pkt_num =0
         time.sleep(20)
         self.pdump_user.send_expect('^c', '# ', 60)
-        # quit testpmd
-        self.quit_all_testpmd()
         time.sleep(2)
         self.dut.session.copy_file_from(src="%s" % filename, dst="%s" % filename)
         pkt = Packet()
@@ -182,22 +193,29 @@ class TestVM2VMVirtioUser(TestCase):
         for i in range(len(pkts)):
             if len(pkts[i]) == 4640:
                 actual_4640_pkt_num += 1
+            elif len(pkts[i]) == 960:
+                actual_960_pkt_num += 1
             elif len(pkts[i]) == 64:
                 actual_64_pkt_num += 1
-        self.verify(large_4640_pkts_num == actual_4640_pkt_num, f"4640byte packet quantity error,expected value:{large_4640_pkts_num}"
+            elif len(pkts[i]) == 8000:
+                actual_8k_pkt_num += 1
+
+        self.verify(pkts_4640_num == actual_4640_pkt_num, f"4640byte packet quantity error,expected value:{pkts_4640_num}"
                                                             f", actual value : {actual_4640_pkt_num}")
-        self.verify(large_64_pkts_num == actual_64_pkt_num, f"64byte packet quantity error,expected value:{large_64_pkts_num}"
-                                                            f", actual value : {actual_64_pkt_num}")
 
-    def get_dump_file_of_virtio_user_cbdma(self, path_mode, extern_param, ringsize, vdevs=None, no_pci=True, cbdma=False, pdump=True):
-        dump_port = 'device_id=net_virtio_user1'
-        self.launch_vhost_testpmd(vdev_num=2, vdevs=vdevs, no_pci=no_pci)
-        if cbdma is True:
-            self.vhost_user_pmd.execute_cmd('vhost enable tx all')
+        self.verify(pkts_960_num == actual_960_pkt_num, f"960byte packet quantity error,expected value:{pkts_960_num}"
+                                                            f", actual value : {actual_960_pkt_num}")
+        self.verify(pkts_64_num == actual_64_pkt_num, f"64byte packet quantity error,expected value:{pkts_64_num}"
+                                                           f", actual value : {actual_64_pkt_num}")
+
+        self.verify(pkts_8k_num == actual_8k_pkt_num, f"8k packet quantity error,expected value:{pkts_8k_num}"
+                                                          f", actual value : {actual_8k_pkt_num}")
+
+    def get_dump_file_of_virtio_user_cbdma(self, path_mode, extern_param, ringsize):
+
+        self.lanuch_vhost_testpmd_with_cbdma(vdevs=self.vdevs)
         self.start_virtio_testpmd_with_vhost_net1(path_mode, extern_param, ringsize)
-        if pdump is True:
-            self.launch_pdump_to_capture_pkt(dump_port, self.virtio_prefix_1, self.dump_virtio_pcap)
-        # the virtio0 will send 251 small pkts
+        self.launch_pdump_to_capture_pkt(self.dump_port, self.virtio_prefix_1, self.dump_virtio_pcap)
         self.start_virtio_testpmd_with_vhost_net0_cbdma(path_mode, extern_param, ringsize)
 
     def send_32_2k_pkts_from_virtio0(self):
@@ -209,47 +227,24 @@ class TestVM2VMVirtioUser(TestCase):
         self.virtio_user0_pmd.execute_cmd('set txpkts 2000')
         self.virtio_user0_pmd.execute_cmd('start tx_first 1')
 
-    def send_27_8k_and_224_2k_pkts(self):
-        self.virtio_user0_pmd.execute_cmd('set burst 1')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000,2000,2000,2000')
-        self.virtio_user0_pmd.execute_cmd('start tx_first 27')
-        self.virtio_user0_pmd.execute_cmd('stop')
-        self.virtio_user0_pmd.execute_cmd('set burst 32')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000')
-        self.virtio_user0_pmd.execute_cmd('start tx_first 7')
-        self.vhost_user_pmd.execute_cmd('start')
-
-    def send_251_8k_pkts(self):
-        """
-        send 251 8k length packets from virtio_user0 testpmd
-        """
-        self.virtio_user0_pmd.execute_cmd('set burst 1')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000,2000,2000,2000')
-        self.virtio_user0_pmd.execute_cmd('start tx_first 27')
-        self.virtio_user0_pmd.execute_cmd('stop')
-        self.virtio_user0_pmd.execute_cmd('set burst 32')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000,2000,2000,2000')
-        self.virtio_user0_pmd.execute_cmd('start tx_first 7')
-        self.vhost_user_pmd.execute_cmd('start')
-
-    def send_251_8k_and_32_2k_pkts(self):
+    def send_251_64_and_32_8k_pkts(self):
         """
-        send 251 8k and 32 2k length packets from virtio_user0 testpmd
+        send 251 small packets and 32 8K packets from virtio_user0 testpmd
         """
         self.virtio_user0_pmd.execute_cmd('set burst 1')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000,2000,2000,2000')
         self.virtio_user0_pmd.execute_cmd('start tx_first 27')
         self.virtio_user0_pmd.execute_cmd('stop')
         self.virtio_user0_pmd.execute_cmd('set burst 32')
         self.virtio_user0_pmd.execute_cmd('start tx_first 7')
         self.virtio_user0_pmd.execute_cmd('stop')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000')
+        self.virtio_user0_pmd.execute_cmd('set txpkts 2000,2000,2000,2000')
         self.virtio_user0_pmd.execute_cmd('start tx_first 1')
-        self.vhost_user_pmd.execute_cmd('start')
+        self.virtio_user0_pmd.execute_cmd('stop')
 
     def send_251_960byte_and_32_64byte_pkts(self):
         """
-        send 251 960byte and 32 64byte length packets from virtio_user0 testpmd
+        imix small pkts
+        send  960byte and  64byte length packets from virtio_user0 testpmd
         """
         self.virtio_user0_pmd.execute_cmd('set burst 1')
         self.virtio_user0_pmd.execute_cmd('set txpkts 64,128,256,512')
@@ -260,7 +255,7 @@ class TestVM2VMVirtioUser(TestCase):
         self.virtio_user0_pmd.execute_cmd('stop')
         self.virtio_user0_pmd.execute_cmd('set txpkts 64')
         self.virtio_user0_pmd.execute_cmd('start tx_first 1')
-        self.vhost_user_pmd.execute_cmd('start')
+        self.virtio_user0_pmd.execute_cmd('stop')
 
     def send_27_4640byte_and_224_64byte_pkts(self):
         """
@@ -273,23 +268,20 @@ class TestVM2VMVirtioUser(TestCase):
         self.virtio_user0_pmd.execute_cmd('set burst 32')
         self.virtio_user0_pmd.execute_cmd('set txpkts 64')
         self.virtio_user0_pmd.execute_cmd('start tx_first 7')
-        self.vhost_user_pmd.execute_cmd('start')
+        self.virtio_user0_pmd.execute_cmd('stop')
 
-    def send_27_8k_and_256_2k_pkts(self):
+    def send_224_64byte_and_27_4640byte_pkts(self):
         """
-        send 27 8k and 256 2k length packets from virtio_user0 testpmd
+        send 224 64byte and 27 4640byte length packets from virtio_user0 testpmd
         """
-        self.virtio_user0_pmd.execute_cmd('set burst 1')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000,2000,2000,2000')
-        self.virtio_user0_pmd.execute_cmd('start tx_first 27')
-        self.virtio_user0_pmd.execute_cmd('stop')
         self.virtio_user0_pmd.execute_cmd('set burst 32')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000')
+        self.virtio_user0_pmd.execute_cmd('set txpkts 64')
         self.virtio_user0_pmd.execute_cmd('start tx_first 7')
         self.virtio_user0_pmd.execute_cmd('stop')
-        self.virtio_user0_pmd.execute_cmd('set txpkts 2000')
-        self.virtio_user0_pmd.execute_cmd('start tx_first 1')
-        self.vhost_user_pmd.execute_cmd('start')
+        self.virtio_user0_pmd.execute_cmd('set burst 1')
+        self.virtio_user0_pmd.execute_cmd('set txpkts 64,256,2000,64,256,2000')
+        self.virtio_user0_pmd.execute_cmd('start tx_first 27')
+        self.virtio_user0_pmd.execute_cmd('stop')
 
     def launch_pdump_to_capture_pkt(self, dump_port, file_prefix, filename):
         """
@@ -417,7 +409,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_packed_virtqueue_mergeable_path(self):
         """
-        packed virtqueue vm2vm mergeable path test
+        Test Case 1: packed virtqueue vm2vm mergeable path test
         about packed virtqueue path, the 8k length pkt will occupies 1 ring since indirect feature enabled
         """
         small_pkts_num = 251
@@ -445,10 +437,8 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_packed_virtqueue_inorder_mergeable_path(self):
         """
-        packed virtqueue vm2vm inorder mergeable path test
-        about packed virtqueue path, the 8k length pkt will occupies 5 ring,
-        2000,2000,2000,2000 will need 4 consequent ring, still need one ring put header
-        so, as the rxt=256, if received pkts include 8k chain pkt, it will received up to 252 pkts
+        Test Case 2: packed virtqueue vm2vm inorder mergeable path test
+        about packed inorder mergeable path, the 8k length pkt will occupies 1 ring since indirect feature enabled
         """
         small_pkts_num = 251
         large_8k_pkts_num = 5
@@ -457,7 +447,7 @@ class TestVM2VMVirtioUser(TestCase):
         ringsize = 256
         extern_params = ''
         # get dump pcap file of virtio
-        # the virtio0 will send 283 pkts, but the virtio only will received 252 pkts
+        # the virtio0 will send 283 pkts, but the virtio only will received 256 pkts
         self.logger.info('check pcap file info about virtio')
         self.get_dump_file_of_virtio_user(path_mode, extern_params, ringsize)
         self.check_packet_payload_valid(self.dump_virtio_pcap, small_pkts_num, large_8k_pkts_num, large_2k_pkts_num)
@@ -472,7 +462,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_packed_virtqueue_no_mergeable_path(self):
         """
-        packed virtqueue vm2vm non-mergeable path test
+        Test Case 3: packed virtqueue vm2vm non-mergeable path test
         about non-mergeable path, it can not received large pkts
         """
         small_pkts_num = 251
@@ -498,7 +488,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_packed_virtqueue_inorder_no_mergeable_path(self):
         """
-        packed virtqueue vm2vm inorder non-mergeable path test
+        Test Case 4: packed virtqueue vm2vm inorder non-mergeable path test
         about non-mergeable path, it can not received large pkts
         """
         small_pkts_num = 251
@@ -524,7 +514,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_packed_virtqueue_vectorized_path(self):
         """
-        packed virtqueue vm2vm inorder non-mergeable path test
+        Test Case 10: packed virtqueue vm2vm inorder non-mergeable path test
         about non-mergeable path, it can not received large pkts
         """
         small_pkts_num = 251
@@ -550,7 +540,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_packed_virtqueue_vectorized_path_ringsize_not_powerof_2(self):
         """
-        packed virtqueue vm2vm inorder non-mergeable path test
+        Test Case 11: packed virtqueue vm2vm inorder non-mergeable path test
         about non-mergeable path, it can not received large pkts
         """
         small_pkts_num = 251
@@ -576,7 +566,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_split_virtqueue_mergeable_path(self):
         """
-        split virtqueue vm2vm mergeable path test
+        Test Case 5: split virtqueue vm2vm mergeable path test
         about split virtqueue path, the 8k length pkt will occupies 1 ring,
         so, as the rxt=256, if received pkts include 8k chain pkt, also will received up to 256 pkts
         """
@@ -605,7 +595,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_split_virtqueue_inorder_mergeable_path(self):
         """
-        split virtqueue vm2vm inorder mergeable path test
+        Test Case 6: split virtqueue vm2vm inorder mergeable path test
         about split virtqueue path, the 8k length pkt will occupies 5 ring,
         2000,2000,2000,2000 will need 4 consequent ring, still need one ring put header
         so, as the rxt=256, if received pkts include 8k chain pkt, it will received up to 252 pkts
@@ -632,7 +622,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_split_virtqueue_no_mergeable_path(self):
         """
-        split virtqueue vm2vm non-mergeable path test
+        Test Case 7: split virtqueue vm2vm non-mergeable path test
         about non-mergeable path, it can not received large pkts
         """
         small_pkts_num = 251
@@ -657,7 +647,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_split_virtqueue_inorder_no_mergeable_path(self):
         """
-        split virtqueue vm2vm inorder non-mergeable path test
+        Test Case 8: split virtqueue vm2vm inorder non-mergeable path test
         about non-mergeable path, it can not received large pkts
         """
         small_pkts_num = 251
@@ -682,7 +672,7 @@ class TestVM2VMVirtioUser(TestCase):
 
     def test_vm2vm_virtio_user_split_virtqueue_vector_rx_path(self):
         """
-        split virtqueue vm2vm vector_rx path test
+        Test Case 9: split virtqueue vm2vm vector_rx path test
         about vector_rx path, it can not received large pkts
         """
         small_pkts_num = 251
@@ -734,36 +724,67 @@ class TestVM2VMVirtioUser(TestCase):
             self.dut.send_expect('./usertools/dpdk-devbind.py -u %s' % self.device_str, '# ', 30)
             self.dut.send_expect('./usertools/dpdk-devbind.py --force --bind=ioatdma  %s' % self.device_str, '# ', 60)
 
-    def test_vm2vm_virtio_user_split_virtqueue_inorder_mergeable_path_with_cbdma(self):
+    def relanuch_vhost_testpmd_iova_pa(self):
+
+        self.vhost_user_pmd.execute_cmd("quit", "#", 60)
+        self.virtio_user1_pmd.execute_cmd('stop')
+        self.virtio_user1_pmd.execute_cmd('clear port stats all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats 0')
+        self.verify('RX-packets: 0' in out , 'expect: virtio-user1 RX-packets is 0 ')
+        self.virtio_user1_pmd.execute_cmd('start')
+        self.lanuch_vhost_testpmd_with_cbdma(vdevs=self.vdevs, iova='pa')
+        self.launch_pdump_to_capture_pkt(self.dump_port, self.virtio_prefix_1, self.dump_virtio_pcap)
+
+    def relanuch_vhost_iova_pa_and_virtio(self, path_mode, extern_param, ringsize):
+
+        self.quit_all_testpmd()
+        self.lanuch_vhost_testpmd_with_cbdma(vdevs=self.vdevs, iova='pa')
+        self.start_virtio_testpmd_with_vhost_net1(path_mode, extern_param, ringsize)
+        self.launch_pdump_to_capture_pkt(self.dump_port, self.virtio_prefix_1, self.dump_virtio_pcap)
+        self.start_virtio_testpmd_with_vhost_net0_cbdma(path_mode, extern_param, ringsize)
+
+    def test_vm2vm_virtio_user_split_virtqueue_non_mergeable_path_multi_queues_check_chain_pkts_with_cbdma(self):
         """
-        Test Case 12: split virtqueue vm2vm inorder mergeable path multi-queues payload check with cbdma enabled
+        Test Case 12: split virtqueue vm2vm non-mergeable path multi-queues payload check with cbdma enabled
         """
         self.cbdma_nic_dev_num = 4
         self.get_cbdma_ports_info_and_bind_to_dpdk()
-        large_8k_pkts_num = 502
-        large_2k_pkts_num = 64
-        total_pkts_num = large_8k_pkts_num + large_2k_pkts_num
-        self.queue_num=2
-        self.nopci=False
+        pkts_64_num = 64
+        pkts_960_num = 502
+        total_pkts_num = pkts_64_num + pkts_960_num
+        self.queue_num =2
+        self.txd_num = 4096
         path_mode = 'server=1,packed_vq=0,mrg_rxbuf=0,in_order=0'
         ringsize = 4096
-        extern_params = '--rxq=2 --txq=2'
+        extern_params = '--rxq=2 --txq=2 --enable-hw-vlan-strip '
         # get dump pcap file of virtio
-        # the virtio0 will send 283 pkts, but the virtio only will received 252 pkts
+        # the virtio0 will send imix small pkts
         self.logger.info('check pcap file info about virtio')
-        vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
                 f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
 
-        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize, vdevs, no_pci=False, cbdma=True, pdump=False)
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
         self.send_251_960byte_and_32_64byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
         # execute stop and port stop all to avoid testpmd tail_pkts issue.
         self.vhost_user_pmd.execute_cmd('stop')
         self.vhost_user_pmd.execute_cmd('port stop all')
         out = self.virtio_user1_pmd.execute_cmd('show port stats all')
         self.verify('RX-packets: 566' in out and 'RX-bytes:  486016' in out, 'expect: virtio-user1 RX-packets is 566 and RX-bytes is 486016')
-        self.quit_all_testpmd()
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num, pkts_960_num)
+
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_251_960byte_and_32_64byte_pkts()
+
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 566' in out and 'RX-bytes:  486016' in out, 'expect: virtio-user1 RX-packets is 566 and RX-bytes is 486016')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num, pkts_960_num)
 
-    def test_vm2vm_virtio_user_split_virtqueue_mergeable_path_with_cbdma(self):
+    def test_vm2vm_virtio_user_split_virtqueue_mergeable_path_multi_queues_check_chain_pkts_with_cbdma(self):
         """
         Test Case 13: split virtqueue vm2vm mergeable path multi-queues payload check with cbdma enabled
         """
@@ -772,58 +793,236 @@ class TestVM2VMVirtioUser(TestCase):
         large_4640_pkts_num = 54
         large_64_pkts_num = 448
         total_pkts_num = large_4640_pkts_num + large_64_pkts_num
-        self.queue_num=2
-        self.nopci=False
+        self.queue_num =2
+        self.txd_num = 4096
         path_mode = 'server=1,packed_vq=0,mrg_rxbuf=1,in_order=0'
         ringsize = 4096
         extern_params = '--rxq=2 --txq=2'
-        # get dump pcap file of virtio
-        # the virtio0 will send 283 pkts, but the virtio only will received 252 pkts
+
         self.logger.info('check pcap file info about virtio')
-        vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
                 f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
 
-        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize, vdevs, no_pci=False, cbdma=True, pdump=True)
-        # self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize, vdevs, no_pci=False)
-        # self.vhost_user_pmd.execute_cmd('vhost enable tx all')
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
         self.send_27_4640byte_and_224_64byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
         # execute stop and port stop all to avoid testpmd tail_pkts issue.
         self.vhost_user_pmd.execute_cmd('stop')
         self.vhost_user_pmd.execute_cmd('port stop all')
-        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, large_4640_pkts_num, large_64_pkts_num)
-        self.logger.info('check pcap file info about vhost')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 502' in out and 'RX-bytes:  279232' in out, 'expect: virtio-user1 RX-packets is 502 and RX-bytes is 279232')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num = large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_27_4640byte_and_224_64byte_pkts()
+
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 502' in out and 'RX-bytes:  279232' in out, 'expect: virtio-user1 RX-packets is 502 and RX-bytes is 279232')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+
+    def test_vm2vm_virtio_user_split_virtqueue_inorder_non_mergeable_path_multi_queues_check_chain_pkts_with_cbdma(self):
+        """
+        Test Case 14: split virtqueue vm2vm inorder non-mergeable path multi-queues payload check with cbdma enabled
+        """
+        self.cbdma_nic_dev_num = 4
+        self.get_cbdma_ports_info_and_bind_to_dpdk()
+        large_4640_pkts_num = 0
+        large_64_pkts_num = 448
+        total_pkts_num = large_4640_pkts_num + large_64_pkts_num
+        self.queue_num = 2
+        self.txd_num = 4096
+        path_mode = 'server=1,packed_vq=0,mrg_rxbuf=0,in_order=1'
+        ringsize = 4096
+        extern_params = '--rxq=2 --txq=2'
+
+        self.logger.info('check pcap file info about virtio')
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+            f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
+
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_27_4640byte_and_224_64byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_4640_num=large_4640_pkts_num)
+
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_27_4640byte_and_224_64byte_pkts()
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_4640_num=large_4640_pkts_num)
+
+    def test_vm2vm_virtio_user_split_virtqueue_vectorized_multi_queues_check_chain_pkts_with_cbdma(self):
+        """
+        Test Case 15: split virtqueue vm2vm vectorized path multi-queues payload check with cbdma enabled
+        """
+        self.cbdma_nic_dev_num = 4
+        self.get_cbdma_ports_info_and_bind_to_dpdk()
+        large_4640_pkts_num = 0
+        large_64_pkts_num = 448
+        total_pkts_num = large_4640_pkts_num + large_64_pkts_num
+        self.queue_num = 2
+        self.txd_num = 4096
+        path_mode = 'server=1,packed_vq=0,mrg_rxbuf=0,in_order=0,vectorized=1'
+        ringsize = 4096
+        extern_params = '--rxq=2 --txq=2'
+
+        self.logger.info('check pcap file info about virtio')
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+            f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
+
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_224_64byte_and_27_4640byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_4640_num=large_4640_pkts_num)
+
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_224_64byte_and_27_4640byte_pkts()
+
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_4640_num=large_4640_pkts_num)
+
+    def test_vm2vm_virtio_user_split_virtqueue_inorder_mergeable_path_test_non_indirect_desc_with_cbdma(self):
+        """
+        Test Case 16: split virtqueue vm2vm inorder mergeable path test non-indirect descriptor with cbdma enable
+        """
+        self.cbdma_nic_dev_num = 4
+        self.get_cbdma_ports_info_and_bind_to_dpdk()
+        large_8k_pkts_num = 2
+        large_64_pkts_num = 502
+        total_pkts_num = large_8k_pkts_num + large_64_pkts_num
+        self.queue_num = 2
+        self.txd_num = 256
+        path_mode = 'server=1,packed_vq=0,mrg_rxbuf=1,in_order=1'
+        ringsize = 256
+        extern_params = '--rxq=2 --txq=2'
+
+        self.logger.info('check pcap file info about virtio')
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+            f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
+
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_251_64_and_32_8k_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 504' in out and 'RX-bytes:  48128' in out, 'expect: virtio-user1 RX-packets is 504 and RX-bytes is 48128')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_8k_num=large_8k_pkts_num)
 
-    def test_vm2vm_virtio_user_packed_virtqueue_inorder_mergeable_path_with_cbdma(self):
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa and virtio')
+            self.relanuch_vhost_iova_pa_and_virtio(path_mode, extern_params, ringsize)
+            self.send_251_64_and_32_8k_pkts()
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 504' in out and 'RX-bytes:  48128' in out, 'expect: virtio-user1 RX-packets is 504 and RX-bytes is 48128')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_8k_num=large_8k_pkts_num)
+
+    def test_vm2vm_virtio_user_split_virtqueue_mergeable_path_test_indirect_desc_with_cbdma(self):
         """
-        Test Case 14: packed virtqueue vm2vm inorder mergeable path multi-queues payload check with cbdma enabled
+        Test Case 17: split virtqueue vm2vm mergeable path test indirect descriptor with cbdma enable
         """
         self.cbdma_nic_dev_num = 4
         self.get_cbdma_ports_info_and_bind_to_dpdk()
-        large_8k_pkts_num = 502
-        large_2k_pkts_num = 64
-        total_pkts_num = large_8k_pkts_num + large_2k_pkts_num
+        large_8k_pkts_num = 10
+        large_64_pkts_num = 502
+        total_pkts_num = large_8k_pkts_num + large_64_pkts_num
+        self.queue_num = 2
+        self.txd_num = 256
+        path_mode = 'server=1,packed_vq=0,mrg_rxbuf=1,in_order=0'
+        ringsize = 256
+        extern_params = '--rxq=2 --txq=2'
+
+        self.logger.info('check pcap file info about virtio')
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+            f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
+
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_251_64_and_32_8k_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 512' in out and 'RX-bytes:  112128' in out, 'expect: virtio-user1 RX-packets is 512 and RX-bytes is 112128')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_8k_num=large_8k_pkts_num)
+
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa and virtio')
+            self.relanuch_vhost_iova_pa_and_virtio(path_mode, extern_params, ringsize)
+            self.send_251_64_and_32_8k_pkts()
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 512' in out and 'RX-bytes:  112128' in out, 'expect: virtio-user1 RX-packets is 512 and RX-bytes is 112128')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_8k_num=large_8k_pkts_num)
+
+    def test_vm2vm_virtio_user_packed_virtqueue_non_mergeable_path_multi_queues_check_chain_pkts_with_cbdma(self):
+        """
+        Test Case 18: packed virtqueue vm2vm non mergeable path multi-queues payload check with cbdma enabled
+        """
+        self.cbdma_nic_dev_num = 4
+        self.get_cbdma_ports_info_and_bind_to_dpdk()
+        pkts_64_num = 448
+        pkts_4640_num = 0
+        total_pkts_num = pkts_64_num + pkts_4640_num
         self.queue_num=2
-        self.nopci=False
+        self.txd_num = 4096
         path_mode = 'server=1,packed_vq=1,mrg_rxbuf=0,in_order=0'
         ringsize = 4096
         extern_params = '--rxq=2 --txq=2'
-        # get dump pcap file of virtio
-        # the virtio0 will send 283 pkts, but the virtio only will received 252 pkts
+
         self.logger.info('check pcap file info about virtio')
-        vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
                 f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
-        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize, vdevs, no_pci=False, cbdma=True, pdump=False)
-        self.send_251_960byte_and_32_64byte_pkts()
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_224_64byte_and_27_4640byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
         # execute stop and port stop all to avoid testpmd tail_pkts issue.
         self.vhost_user_pmd.execute_cmd('stop')
         self.vhost_user_pmd.execute_cmd('port stop all')
         out = self.virtio_user1_pmd.execute_cmd('show port stats all')
-        self.verify('RX-packets: 566' in out and 'RX-bytes:  486016' in out, 'expect: virtio-user1 RX-packets is 566 and RX-bytes is 486016')
-        self.quit_all_testpmd()
+        self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num, pkts_4640_num)
+
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_224_64byte_and_27_4640byte_pkts()
 
-    def test_vm2vm_virtio_user_packed_virtqueue_mergeable_path_with_cbdma(self):
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num, pkts_4640_num)
+
+    def test_vm2vm_virtio_user_packed_virtqueue_mergeable_path_multi_queues_check_chain_pkts_with_cbdma(self):
         """
-        Test Case 15: packed virtqueue vm2vm mergeable path multi-queues payload check with cbdma enabled
+        Test Case 19: packed virtqueue vm2vm mergeable path multi-queues payload check with cbdma enabled
         """
         self.cbdma_nic_dev_num = 4
         self.get_cbdma_ports_info_and_bind_to_dpdk()
@@ -831,23 +1030,211 @@ class TestVM2VMVirtioUser(TestCase):
         large_64_pkts_num = 448
         total_pkts_num = large_4640_pkts_num + large_64_pkts_num
         self.queue_num=2
-        self.nopci=False
+        self.txd_num = 4096
         path_mode = 'server=1,packed_vq=1,mrg_rxbuf=1,in_order=0'
         ringsize = 4096
         extern_params = '--rxq=2 --txq=2'
-        # get dump pcap file of virtio
-        # the virtio0 will send 283 pkts, but the virtio only will received 252 pkts
+
         self.logger.info('check pcap file info about virtio')
-        vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
                 f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
 
-        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize, vdevs, no_pci=False, cbdma=True, pdump=True)
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
         self.send_27_4640byte_and_224_64byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
         # execute stop and port stop all to avoid testpmd tail_pkts issue.
         self.vhost_user_pmd.execute_cmd('stop')
         self.vhost_user_pmd.execute_cmd('port stop all')
-        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, large_4640_pkts_num, large_64_pkts_num)
-        self.logger.info('check pcap file info about vhost')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 502' in out and 'RX-bytes:  279232' in out, 'expect: virtio-user1 RX-packets is 502 and RX-bytes is 279232')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_27_4640byte_and_224_64byte_pkts()
+
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 502' in out and 'RX-bytes:  279232' in out, 'expect: virtio-user1 RX-packets is 502 and RX-bytes is 279232')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+
+    def test_vm2vm_virtio_user_packed_virtqueue_inorder_mergeable_path_multi_queues_check_chain_pkts_with_cbdma(self):
+        """
+        Test Case 20: packed virtqueue vm2vm inorder mergeable path multi-queues payload check with cbdma enabled
+        """
+        self.cbdma_nic_dev_num = 4
+        self.get_cbdma_ports_info_and_bind_to_dpdk()
+        large_4640_pkts_num = 54
+        large_64_pkts_num = 448
+        total_pkts_num = large_4640_pkts_num + large_64_pkts_num
+        self.queue_num=2
+        self.txd_num = 4096
+        path_mode = 'server=1,packed_vq=1,mrg_rxbuf=1,in_order=1'
+        ringsize = 4096
+        extern_params = '--rxq=2 --txq=2'
+
+        self.logger.info('check pcap file info about virtio')
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+                f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
+
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_27_4640byte_and_224_64byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 502' in out and 'RX-bytes:  279232' in out, 'expect: virtio-user1 RX-packets is 502 and RX-bytes is 279232')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_27_4640byte_and_224_64byte_pkts()
+
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 502' in out and 'RX-bytes:  279232' in out, 'expect: virtio-user1 RX-packets is 502 and RX-bytes is 279232')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+
+    def test_vm2vm_virtio_user_packed_virtqueue_inorder_non_mergeable_path_multi_queues_check_chain_pkts_with_cbdma(self):
+        """
+        Test Case 21: packed virtqueue vm2vm inorder non-mergeable path multi-queues payload check with cbdma enabled
+        """
+        self.cbdma_nic_dev_num = 4
+        self.get_cbdma_ports_info_and_bind_to_dpdk()
+        large_4640_pkts_num = 0
+        large_64_pkts_num = 448
+        total_pkts_num = large_4640_pkts_num + large_64_pkts_num
+        self.queue_num=2
+        self.txd_num = 4096
+        path_mode = 'server=1,packed_vq=1,mrg_rxbuf=0,in_order=1'
+        ringsize = 4096
+        extern_params = '--rxq=2 --txq=2'
+
+        self.logger.info('check pcap file info about virtio')
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+                f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
+
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_224_64byte_and_27_4640byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_224_64byte_and_27_4640byte_pkts()
+
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+
+    def test_vm2vm_virtio_user_packed_virtqueue_vectorized_path_multi_queues_check_chain_pkts_with_cbdma(self):
+        """
+        Test Case 22: packed virtqueue vm2vm vectorized path multi-queues payload check with cbdma enabled
+        """
+        self.cbdma_nic_dev_num = 4
+        self.get_cbdma_ports_info_and_bind_to_dpdk()
+        large_4640_pkts_num = 0
+        large_64_pkts_num = 448
+        total_pkts_num = large_4640_pkts_num + large_64_pkts_num
+        self.queue_num=2
+        self.txd_num = 4096
+        path_mode = 'server=1,packed_vq=1,mrg_rxbuf=0,in_order=1,vectorized=1'
+        ringsize = 4096
+        extern_params = '--rxq=2 --txq=2'
+
+        self.logger.info('check pcap file info about virtio')
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+                f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
+
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_224_64byte_and_27_4640byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_224_64byte_and_27_4640byte_pkts()
+
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+
+    def test_vm2vm_virtio_user_packed_virtqueue_vectorized_path_ringsize_not_power_of_2_multi_queues_check_chain_pkts_with_cbdma(self):
+        """
+        Test Case 23: packed virtqueue vm2vm vectorized path ringsize_not_power_of_2 multi-queues payload check with cbdma enabled
+        """
+        self.cbdma_nic_dev_num = 4
+        self.get_cbdma_ports_info_and_bind_to_dpdk()
+        large_4640_pkts_num = 0
+        large_64_pkts_num = 448
+        total_pkts_num = large_4640_pkts_num + large_64_pkts_num
+        self.queue_num=2
+        self.txd_num = 4096
+        path_mode = 'server=1,packed_vq=1,mrg_rxbuf=0,in_order=1,vectorized=1'
+        ringsize = 4097
+        extern_params = '--rxq=2 --txq=2'
+
+        self.logger.info('check pcap file info about virtio')
+        self.vdevs = f"--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[0]};txq1@{self.cbdma_dev_infos[1]}]' " \
+                f"--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@{self.cbdma_dev_infos[2]};txq1@{self.cbdma_dev_infos[3]}]'"
+
+        self.get_dump_file_of_virtio_user_cbdma(path_mode, extern_params, ringsize)
+        self.send_224_64byte_and_27_4640byte_pkts()
+        self.vhost_user_pmd.execute_cmd('start')
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num= large_64_pkts_num, pkts_4640_num = large_4640_pkts_num)
+        if not self.check_2M_env:
+            self.logger.info('relanuch vhost testpmd iova pa')
+            self.relanuch_vhost_testpmd_iova_pa()
+            self.send_224_64byte_and_27_4640byte_pkts()
+            self.vhost_user_pmd.execute_cmd('start')
+            self.vhost_user_pmd.execute_cmd('stop')
+            out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+            self.verify('RX-packets: 448' in out and 'RX-bytes:  28672' in out, 'expect: virtio-user1 RX-packets is 448 and RX-bytes is 28672')
+            self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_4640_num=large_4640_pkts_num)
+
+    def test_vm2vm_virtio_user_packed_virtqueue_vectorized_path_test_indirect_desc(self):
+        """
+        Test Case 24: packed virtqueue vm2vm vectorized-tx path multi-queues test indirect descriptor
+        """
+        large_8k_pkts_num = 5
+        large_64_pkts_num = 251
+        total_pkts_num = large_8k_pkts_num + large_64_pkts_num
+        self.queue_num = 1
+        self.txd_num = 256
+        path_mode = 'packed_vq=1,mrg_rxbuf=1,in_order=1,vectorized=1'
+        ringsize = 256
+        extern_params = ''
+
+        self.logger.info('check pcap file info about virtio')
+        self.get_dump_file_of_virtio_user(path_mode, extern_params, ringsize)
+        # execute stop and port stop all to avoid testpmd tail_pkts issue.
+        self.vhost_user_pmd.execute_cmd('stop')
+        self.vhost_user_pmd.execute_cmd('port stop all')
+        out = self.virtio_user1_pmd.execute_cmd('show port stats all')
+        self.verify('RX-packets: 256' in out and 'RX-bytes:  56064' in out, 'expect: virtio-user1 RX-packets is 256 and RX-bytes is 56064')
+        self.check_packet_payload_valid_with_cbdma(self.dump_virtio_pcap, total_pkts_num, pkts_64_num=large_64_pkts_num, pkts_8k_num=large_8k_pkts_num)
 
     def close_all_session(self):
         if getattr(self, 'vhost_user', None):
@@ -863,6 +1250,7 @@ class TestVM2VMVirtioUser(TestCase):
         """
         Run after each test case.
         """
+        self.quit_all_testpmd()
         self.bind_cbdma_device_to_kernel()
         self.dut.kill_all()
         time.sleep(2)
