diff --git a/tests/TestSuite_loopback_vhost_async_perf_dsa.py b/tests/TestSuite_loopback_vhost_async_perf_dsa.py
index 85883ea3..679971ae 100644
--- a/tests/TestSuite_loopback_vhost_async_perf_dsa.py
+++ b/tests/TestSuite_loopback_vhost_async_perf_dsa.py
@@ -45,8 +45,6 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
         self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
         # Prepare the result table
         self.table_header = [
             "Frame Size",
@@ -249,8 +247,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 1: loopback vhost async test with split ring inorder mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -280,8 +278,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 2: loopback vhost async test with split ring inorder non-mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -311,8 +309,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 3: loopback vhost async test with split ring mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -342,8 +340,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 4: loopback vhost async test with split ring non-mergeable path path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -373,8 +371,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 5: loopback vhost async test with split ring vectorized path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -404,8 +402,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 6: loopback vhost async test with packed ring inorder mergeable path path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -435,8 +433,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 7: loopback vhost async test with packed ring inorder non-mergeable path path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -466,8 +464,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 8: loopback vhost async test with packed ring mergeable path path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -497,8 +495,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 9: loopback vhost async test with packed ring non-mergeable path path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -528,8 +526,8 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 10: loopback vhost async test with packed ring vectorized path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -559,20 +557,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 11: loopback vhost async test with split ring inorder mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,in_order=1,mrg_rxbuf=1"
@@ -599,20 +597,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 12: loopback vhost async test with split ring inorder non-mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,in_order=1,mrg_rxbuf=0"
@@ -639,20 +637,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 13: loopback vhost async test with split ring mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,in_order=0,mrg_rxbuf=1"
@@ -679,20 +677,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 14: loopback vhost async test with split ring non-mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,in_order=0,mrg_rxbuf=0"
@@ -719,20 +717,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 15: loopback vhost async test with split ring vectorized path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,in_order=0,mrg_rxbuf=0,vectorized=1"
@@ -759,20 +757,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 16: loopback vhost async test with packed ring inorder mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,packed_vq=1,in_order=1,mrg_rxbuf=1"
@@ -799,20 +797,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 17: loopback vhost async test with packed ring inorder non-mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,packed_vq=1,in_order=1,mrg_rxbuf=0"
@@ -839,20 +837,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 18: loopback vhost async test with packed ring mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,packed_vq=1,in_order=0,mrg_rxbuf=1"
@@ -879,20 +877,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 19: loopback vhost async test with packed ring non-mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,packed_vq=1,in_order=0,mrg_rxbuf=0"
@@ -919,20 +917,20 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         Test Case 20: loopback vhost async test with packed ring vectorized path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         virtio_eal_param = "--vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,packed_vq=1,in_order=0,mrg_rxbuf=0,vectorized=1"
@@ -965,8 +963,6 @@ class TestLoopbackVhostAsyncPerfDsa(TestCase):
         """
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
         self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_loopback_virtio_user_server_mode_dsa.py b/tests/TestSuite_loopback_virtio_user_server_mode_dsa.py
index facd84e1..854cee2d 100644
--- a/tests/TestSuite_loopback_virtio_user_server_mode_dsa.py
+++ b/tests/TestSuite_loopback_virtio_user_server_mode_dsa.py
@@ -50,9 +50,6 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "Cycle",
         ]
         self.result_table_create(self.table_header)
-        self.use_dsa_list = []
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     @property
     def check_2M_env(self):
@@ -190,25 +187,22 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         Test Case 1: Loopback split ring server mode large chain packets stress test with dsa dpdk driver
         """
         if not self.check_2M_env:
-            self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-                dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
-            )
-            dmas = "txq0@%s-q0;" "rxq0@%s-q0" % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+            dsas = self.DC.bind_dsa_to_dpdk_driver(
+                dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
             )
+            dmas = "txq0@%s-q0;rxq0@%s-q0" % (dsas[0], dsas[0])
             vhost_eal_param = (
                 "--vdev 'net_vhost0,iface=vhost-net0,queues=1,dmas=[%s],client=1'"
                 % dmas
             )
             vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024 --mbuf-size=65535"
-            port_options = {self.use_dsa_list[0]: "max_queues=1"}
+            port_options = {dsas[0]: "max_queues=1"}
             self.start_vhost_testpmd(
                 cores=self.vhost_core_list,
                 eal_param=vhost_eal_param,
                 param=vhost_param,
                 no_pci=False,
-                ports=self.use_dsa_list,
+                ports=dsas,
                 port_options=port_options,
                 iova_mode="va",
             )
@@ -230,25 +224,22 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         Test Case 2: Loopback packed ring server mode large chain packets stress test with dsa dpdk driver
         """
         if not self.check_2M_env:
-            self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-                dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
-            )
-            dmas = "txq0@%s-q0;" "rxq0@%s-q0" % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+            dsas = self.DC.bind_dsa_to_dpdk_driver(
+                dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
             )
+            dmas = "txq0@%s-q0;rxq0@%s-q0" % (dsas[0], dsas[0])
             vhost_eal_param = (
                 "--vdev 'net_vhost0,iface=vhost-net0,queues=1,dmas=[%s],client=1'"
                 % dmas
             )
             vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024 --mbuf-size=65535"
-            port_options = {self.use_dsa_list[0]: "max_queues=1"}
+            port_options = {dsas[0]: "max_queues=1"}
             self.start_vhost_testpmd(
                 cores=self.vhost_core_list,
                 eal_param=vhost_eal_param,
                 param=vhost_param,
                 no_pci=False,
-                ports=self.use_dsa_list,
+                ports=dsas,
                 port_options=port_options,
                 iova_mode="va",
             )
@@ -269,8 +260,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 3: Loopback split ring inorder mergeable path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -286,31 +277,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -333,8 +324,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 4: Loopback split ring mergeable path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -350,31 +341,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -397,8 +388,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 5: Loopback split ring non-mergeable path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -414,31 +405,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -463,8 +454,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 6: Loopback split ring inorder non-mergeable path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -480,31 +471,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -527,8 +518,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 7: Loopback split ring vectorized path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -544,31 +535,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -591,8 +582,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 8: Loopback packed ring inorder mergeable path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -608,31 +599,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -655,8 +646,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 9: Loopback packed ring mergeable path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -672,31 +663,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -719,8 +710,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 10: Loopback packed ring non-mergeable path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -736,31 +727,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -783,8 +774,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 11: Loopback packed ring inorder non-mergeable path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -800,31 +791,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -847,8 +838,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 12: Loopback packed ring vectorized path multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -864,31 +855,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -911,8 +902,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 13: Loopback packed ring vectorized path and ring size is not power of 2 multi-queues payload check with server mode and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -928,31 +919,31 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -976,8 +967,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         Test Case 14: Loopback split ring server mode large chain packets stress test with dsa kernel driver
         """
         if not self.check_2M_env:
-            self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-            dmas = "txq0@wq0.0;rxq0@wq0.0"
+            wqs = self.DC.create_wq(wq_num=1, dsa_idxs=[0])
+            dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[0])
             vhost_eal_param = (
                 "--vdev 'net_vhost0,iface=vhost-net0,queues=1,dmas=[%s],client=1'"
                 % dmas
@@ -1008,8 +999,8 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         Test Case 15: Loopback packed ring server mode large chain packets stress test with dsa kernel driver
         """
         if not self.check_2M_env:
-            self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-            dmas = "txq0@wq0.0;rxq0@wq0.0"
+            wqs = self.DC.create_wq(wq_num=1, dsa_idxs=[0])
+            dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[0])
             vhost_eal_param = (
                 "--vdev 'net_vhost0,iface=vhost-net0,queues=1,dmas=[%s],client=1'"
                 % dmas
@@ -1039,21 +1030,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 16: Loopback split ring inorder mergeable path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1080,18 +1084,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1115,21 +1133,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 17: Loopback split ring mergeable path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1157,18 +1188,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1192,21 +1237,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 18: Loopback split ring non-mergeable path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1236,18 +1294,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1271,21 +1343,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 19: Loopback split ring inorder non-mergeable path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1313,18 +1398,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1348,21 +1447,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 20: Loopback split ring vectorized path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1390,18 +1502,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1425,21 +1551,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 21: Loopback packed ring inorder mergeable path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1467,18 +1606,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1502,21 +1655,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 22: Loopback packed ring mergeable path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1544,18 +1710,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1579,21 +1759,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 23: Loopback packed ring non-mergeable path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1621,18 +1814,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1656,21 +1863,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 24: Loopback packed ring inorder non-mergeable path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1698,18 +1918,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1733,21 +1967,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 25: Loopback packed ring vectorized path multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1775,18 +2022,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1810,21 +2071,34 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 26: Loopback packed ring vectorized path and ring size is not power of 2 multi-queues payload check with server mode and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1852,18 +2126,32 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1887,45 +2175,52 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         Test Case 27: PV split and packed ring server mode test txonly mode with dsa dpdk and kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2,
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2,
             driver_name="vfio-pci",
-            dsa_index_list=[2, 3],
+            dsa_idxs=[2, 3],
             socket=self.ports_socket,
         )
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
             "txq4@%s-q0;"
             "txq5@%s-q0;"
             "rxq2@%s-q1;"
             "rxq3@%s-q1;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                wqs[8],
+                wqs[8],
+                wqs[8],
+                wqs[8],
             )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --rxq=8 --txq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
             iova_mode="va",
         )
@@ -1967,8 +2262,6 @@ class TestLoopbackVirtioUserServerModeDsa(TestCase):
         """
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
         self.dut.kill_all()
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_pvp_vhost_async_multi_paths_performance_dsa.py b/tests/TestSuite_pvp_vhost_async_multi_paths_performance_dsa.py
index 7b5077cb..13ab3d85 100644
--- a/tests/TestSuite_pvp_vhost_async_multi_paths_performance_dsa.py
+++ b/tests/TestSuite_pvp_vhost_async_multi_paths_performance_dsa.py
@@ -51,8 +51,6 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
         self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
         # Prepare the result table
         self.table_header = ["Frame"]
         self.table_header.append("Mode/RXD-TXD")
@@ -273,8 +271,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 1: pvp vhost async test with split ring inorder mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -301,8 +299,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 2: pvp vhost async test with split ring inorder non-mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -329,8 +327,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 3: pvp vhost async test with split ring mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -357,8 +355,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 4: pvp vhost async test with split ring non-mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -385,8 +383,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 5: pvp vhost async test with split ring vectorized path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -413,8 +411,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 6: pvp vhost async test with packed ring inorder mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -441,8 +439,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 7: pvp vhost async test with packed ring inorder non-mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -469,8 +467,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 8: pvp vhost async test with packed ring mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -497,8 +495,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 9: pvp vhost async test with packed ring non-mergeable path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -525,8 +523,8 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 10: pvp vhost async test with packed ring vectorized path using IDXD kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
@@ -553,17 +551,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 11: pvp vhost async test with split ring inorder mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -588,17 +586,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 12: pvp vhost async test with split ring inorder non-mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -623,17 +621,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 13: pvp vhost async test with split ring mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -658,17 +656,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 14: pvp vhost async test with split ring non-mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -693,17 +691,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 15: pvp vhost async test with split ring vectorized_rx path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -728,17 +726,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 16: pvp vhost async test with packed ring inorder mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -763,17 +761,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 17: pvp vhost async test with packed ring inorder non-mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -798,17 +796,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 18: pvp vhost async test with packed ring mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -833,17 +831,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 19: pvp vhost async test with packed ring non-mergeable path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -868,17 +866,17 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         Test Case 20: pvp vhost async test with split ring vectorized path using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;" "rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=1 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_user_testpmd(
             eal_param=vhost_eal_param,
             param=vhost_param,
@@ -909,8 +907,6 @@ class TestPVPVhostAsyncMultiPathsPerformanceDsa(TestCase):
         """
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
         self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_pvp_vhost_async_virtio_pmd_perf_dsa.py b/tests/TestSuite_pvp_vhost_async_virtio_pmd_perf_dsa.py
index 9a0b04ce..2d2471ef 100644
--- a/tests/TestSuite_pvp_vhost_async_virtio_pmd_perf_dsa.py
+++ b/tests/TestSuite_pvp_vhost_async_virtio_pmd_perf_dsa.py
@@ -22,6 +22,7 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Run at the start of each test suite.
         """
+        self.frame_sizes = [64, 128, 256, 512, 1024, 1280, 1518, 2048, 4096]
         self.vhost_user = self.dut.new_session(suite="vhost-user")
         self.vhost_user_pmd = PmdOutput(self.dut, self.vhost_user)
         self.dut_ports = self.dut.get_ports()
@@ -51,8 +52,6 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
         self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
         self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
         # Prepare the result table
         self.table_header = ["Frame"]
         self.table_header.append("Mode/RXD-TXD")
@@ -104,7 +103,7 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "mq=on,vectors=%s," % (2 + self.queues * 2) if self.queues > 1 else ""
         )
         vm_params["opt_settings"] = (
-            "disable-modern=false,mrg_rxbuf=on,%srx_queue_size=1024,tx_queue_size=1024,csum=off,guest_csum=off,gso= off,host_tso4=off,guest_tso4=off,guest_ecn=off%s"
+            "disable-modern=false,mrg_rxbuf=on,%srx_queue_size=1024,tx_queue_size=1024,csum=off,guest_csum=off,gso=off,host_tso4=off,guest_tso4=off,guest_ecn=off%s"
             % (mq_param, packed_param)
         )
         self.vm.set_vm_device(**vm_params)
@@ -134,11 +133,7 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Send packet with packet generator and verify
         """
-        if "4c_4q" or "4c_8q" not in self.running_case:
-            frame_sizes = [64, 128, 256, 512, 1024, 1280, 1518]
-        else:
-            frame_sizes = [64, 128, 256, 512, 1024, 1280, 1518, 2048, 4096]
-        for frame_size in frame_sizes:
+        for frame_size in self.frame_sizes:
             payload_size = frame_size - self.headers_size
             tgen_input = []
             self.throughput[frame_size] = dict()
@@ -308,10 +303,7 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "--socket-mem 8192 --vdev 'net_vhost0,iface=vhost-net,queues=%d,dmas=[%s]'"
             % (self.queues, self.dmas)
         )
-        if "4c_4q" or "4c_8q" not in self.running_case:
-            max_len_param = ""
-        else:
-            max_len_param = "--max-pkt-len=5200 --tx-offloads=0x00008000"
+        max_len_param = "--max-pkt-len=5200 --tx-offloads=0x00008000"
         vhost_param = (
             "--nb-cores=%d --txq=%d --rxq=%d --txd=2048 --rxd=2048 %s --forward-mode=mac -a"
             % (self.nb_cores, self.queues, self.queues, max_len_param)
@@ -348,9 +340,9 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 1: pvp split ring vhost async test with 1core 1queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
         self.queues = 1
-        self.dmas = "txq0@wq0.0;rxq0@wq0.1"
+        self.dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         self.nb_cores = 1
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
         self.perf_test(
@@ -361,9 +353,9 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 2: pvp split ring vhost async test with 1core 2queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
         self.queues = 2
-        self.dmas = "txq0@wq0.0;rxq0@wq0.1;txq1@wq0.2;rxq1@wq0.3"
+        self.dmas = "txq0@%s;rxq0@%s;txq1@%s;rxq1@%s" % (wqs[0], wqs[1], wqs[2], wqs[3])
         self.nb_cores = 1
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
         self.perf_test(
@@ -374,9 +366,9 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 3: pvp split ring vhost async test with 2core 2queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
         self.queues = 2
-        self.dmas = "txq0@wq0.0;rxq0@wq0.1;txq1@wq0.2;rxq1@wq0.3"
+        self.dmas = "txq0@%s;rxq0@%s;txq1@%s;rxq1@%s" % (wqs[0], wqs[1], wqs[2], wqs[3])
         self.nb_cores = 2
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
         self.perf_test(
@@ -387,17 +379,17 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 4: pvp split ring vhost async test with 2core 4queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0])
         self.queues = 4
         self.dmas = (
-            "txq0@wq0.0;"
-            "rxq0@wq0.1;"
-            "txq1@wq0.2;"
-            "rxq1@wq0.3;"
-            "txq2@wq0.4;"
-            "rxq2@wq0.5;"
-            "txq3@wq0.6;"
-            "rxq3@wq0.7"
+            "txq0@%s;"
+            "rxq0@%s;"
+            "txq1@%s;"
+            "rxq1@%s;"
+            "txq2@%s;"
+            "rxq2@%s;"
+            "txq3@%s;"
+            "rxq3@%s" % (wqs[0], wqs[1], wqs[2], wqs[3], wqs[4], wqs[5], wqs[6], wqs[7])
         )
         self.nb_cores = 2
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
@@ -409,17 +401,17 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 5: pvp split ring vhost async test with 4core 4queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0])
         self.queues = 4
         self.dmas = (
-            "txq0@wq0.0;"
-            "rxq0@wq0.1;"
-            "txq1@wq0.2;"
-            "rxq1@wq0.3;"
-            "txq2@wq0.4;"
-            "rxq2@wq0.5;"
-            "txq3@wq0.6;"
-            "rxq3@wq0.7"
+            "txq0@%s;"
+            "rxq0@%s;"
+            "txq1@%s;"
+            "rxq1@%s;"
+            "txq2@%s;"
+            "rxq2@%s;"
+            "txq3@%s;"
+            "rxq3@%s" % (wqs[0], wqs[1], wqs[2], wqs[3], wqs[4], wqs[5], wqs[6], wqs[7])
         )
         self.nb_cores = 4
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
@@ -431,25 +423,43 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 6: pvp split ring vhost async test with 4core 8queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0])
         self.queues = 8
         self.dmas = (
-            "txq0@wq0.0;"
-            "rxq0@wq0.0;"
-            "txq1@wq0.1;"
-            "rxq1@wq0.1;"
-            "txq2@wq0.2;"
-            "rxq2@wq0.2;"
-            "txq3@wq0.3;"
-            "rxq3@wq0.3;"
-            "txq4@wq0.4;"
-            "rxq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq5@wq0.5;"
-            "txq6@wq0.6;"
-            "rxq6@wq0.6;"
-            "txq7@wq0.7;"
-            "rxq7@wq0.7"
+            "txq0@%s;"
+            "rxq0@%s;"
+            "txq1@%s;"
+            "rxq1@%s;"
+            "txq2@%s;"
+            "rxq2@%s;"
+            "txq3@%s;"
+            "rxq3@%s;"
+            "txq4@%s;"
+            "rxq4@%s;"
+            "txq5@%s;"
+            "rxq5@%s;"
+            "txq6@%s;"
+            "rxq6@%s;"
+            "txq7@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[2],
+                wqs[2],
+                wqs[3],
+                wqs[3],
+                wqs[4],
+                wqs[4],
+                wqs[5],
+                wqs[5],
+                wqs[6],
+                wqs[6],
+                wqs[7],
+                wqs[7],
+            )
         )
         self.nb_cores = 4
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
@@ -461,9 +471,9 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 7: pvp packed ring vhost async test with 1core 1queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
         self.queues = 1
-        self.dmas = "txq0@wq0.0;rxq0@wq0.1"
+        self.dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[1])
         self.nb_cores = 1
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
         self.perf_test(
@@ -474,9 +484,9 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 8: pvp packed ring vhost async test with 1core 2queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
         self.queues = 2
-        self.dmas = "txq0@wq0.0;rxq0@wq0.1;txq1@wq0.2;rxq1@wq0.3"
+        self.dmas = "txq0@%s;rxq0@%s;txq1@%s;rxq1@%s" % (wqs[0], wqs[1], wqs[2], wqs[3])
         self.nb_cores = 1
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
         self.perf_test(
@@ -487,9 +497,9 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 9: pvp packed ring vhost async test with 2core 2queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
         self.queues = 2
-        self.dmas = "txq0@wq0.0;rxq0@wq0.1;txq1@wq0.2;rxq1@wq0.3"
+        self.dmas = "txq0@%s;rxq0@%s;txq1@%s;rxq1@%s" % (wqs[0], wqs[1], wqs[2], wqs[3])
         self.nb_cores = 2
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
         self.perf_test(
@@ -500,17 +510,17 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 10: pvp packed ring vhost async test with 2core 4queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0])
         self.queues = 4
         self.dmas = (
-            "txq0@wq0.0;"
-            "rxq0@wq0.1;"
-            "txq1@wq0.2;"
-            "rxq1@wq0.3;"
-            "txq2@wq0.4;"
-            "rxq2@wq0.5;"
-            "txq3@wq0.6;"
-            "rxq3@wq0.7"
+            "txq0@%s;"
+            "rxq0@%s;"
+            "txq1@%s;"
+            "rxq1@%s;"
+            "txq2@%s;"
+            "rxq2@%s;"
+            "txq3@%s;"
+            "rxq3@%s" % (wqs[0], wqs[1], wqs[2], wqs[3], wqs[4], wqs[5], wqs[6], wqs[7])
         )
         self.nb_cores = 2
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
@@ -522,17 +532,17 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 11: pvp packed ring vhost async test with 4core 4queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0])
         self.queues = 4
         self.dmas = (
-            "txq0@wq0.0;"
-            "rxq0@wq0.1;"
-            "txq1@wq0.2;"
-            "rxq1@wq0.3;"
-            "txq2@wq0.4;"
-            "rxq2@wq0.5;"
-            "txq3@wq0.6;"
-            "rxq3@wq0.7"
+            "txq0@%s;"
+            "rxq0@%s;"
+            "txq1@%s;"
+            "rxq1@%s;"
+            "txq2@%s;"
+            "rxq2@%s;"
+            "txq3@%s;"
+            "rxq3@%s" % (wqs[0], wqs[1], wqs[2], wqs[3], wqs[4], wqs[5], wqs[6], wqs[7])
         )
         self.nb_cores = 4
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
@@ -544,25 +554,43 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 12: pvp packed ring vhost async test with 4core 8queue using idxd kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0])
         self.queues = 8
         self.dmas = (
-            "txq0@wq0.0;"
-            "rxq0@wq0.0;"
-            "txq1@wq0.1;"
-            "rxq1@wq0.1;"
-            "txq2@wq0.2;"
-            "rxq2@wq0.2;"
-            "txq3@wq0.3;"
-            "rxq3@wq0.3;"
-            "txq4@wq0.4;"
-            "rxq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq5@wq0.5;"
-            "txq6@wq0.6;"
-            "rxq6@wq0.6;"
-            "txq7@wq0.7;"
-            "rxq7@wq0.7"
+            "txq0@%s;"
+            "rxq0@%s;"
+            "txq1@%s;"
+            "rxq1@%s;"
+            "txq2@%s;"
+            "rxq2@%s;"
+            "txq3@%s;"
+            "rxq3@%s;"
+            "txq4@%s;"
+            "rxq4@%s;"
+            "txq5@%s;"
+            "rxq5@%s;"
+            "txq6@%s;"
+            "rxq6@%s;"
+            "txq7@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[2],
+                wqs[2],
+                wqs[3],
+                wqs[3],
+                wqs[4],
+                wqs[4],
+                wqs[5],
+                wqs[5],
+                wqs[6],
+                wqs[6],
+                wqs[7],
+                wqs[7],
+            )
         )
         self.nb_cores = 4
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
@@ -574,18 +602,18 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 13: pvp split ring vhost async test with 1core 1queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 1
         self.dmas = "txq0@%s-q0;rxq0@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         self.nb_cores = 1
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -597,8 +625,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 14: pvp split ring vhost async test with 1core 2queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 2
         self.dmas = (
@@ -607,16 +635,16 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq1@%s-q2;"
             "rxq1@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 1
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=4"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -628,8 +656,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 15: pvp split ring vhost async test with 2core 2queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 2
         self.dmas = (
@@ -638,16 +666,16 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq1@%s-q2;"
             "rxq1@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 2
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=4"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -659,8 +687,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 16: pvp split ring vhost async test with 2core 4queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 4
         self.dmas = (
@@ -673,20 +701,20 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq3@%s-q6;"
             "rxq3@%s-q7"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 2
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=8"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -698,8 +726,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 17: pvp split ring vhost async test with 4core 4queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 4
         self.dmas = (
@@ -712,20 +740,20 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq3@%s-q6;"
             "rxq3@%s-q7"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 4
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=8"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -737,8 +765,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 18: pvp split ring vhost async test with 4core 8queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 8
         self.dmas = (
@@ -751,20 +779,20 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq3@%s-q6;"
             "rxq3@%s-q7"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 4
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=8"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -776,18 +804,18 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 19: pvp packed ring vhost async test with 1core 1queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 1
         self.dmas = "txq0@%s-q0;rxq0@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         self.nb_cores = 1
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -799,8 +827,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 20: pvp packed ring vhost async test with 1core 2queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 2
         self.dmas = (
@@ -809,16 +837,16 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq1@%s-q2;"
             "rxq1@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 1
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=4"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -830,8 +858,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 21: pvp packed ring vhost async test with 2core 2queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 2
         self.dmas = (
@@ -840,16 +868,16 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq1@%s-q2;"
             "rxq1@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 2
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=4"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -861,8 +889,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 22: pvp packed ring vhost async test with 2core 4queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 4
         self.dmas = (
@@ -875,20 +903,20 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq3@%s-q6;"
             "rxq3@%s-q7"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 2
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=8"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -900,8 +928,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 23: pvp packed ring vhost async test with 4core 4queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 4
         self.dmas = (
@@ -914,20 +942,20 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq3@%s-q6;"
             "rxq3@%s-q7"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 4
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=8"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -939,8 +967,8 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         """
         Test Case 24: pvp packed ring vhost async test with 4core 8queue using vfio-pci driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         self.queues = 8
         self.dmas = (
@@ -953,20 +981,20 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
             "txq3@%s-q6;"
             "rxq3@%s-q7"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         self.nb_cores = 4
         ports = [self.dut.ports_info[self.dut_ports[0]]["pci"]]
-        ports.append(self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        ports.append(dsas[0])
+        port_options = {dsas[0]: "max_queues=8"}
         self.perf_test(
             case_info=self.running_case,
             ports=ports,
@@ -985,8 +1013,6 @@ class TestPVPVhostAsyncVirtioPmdPerfDsa(TestCase):
         Run after each test case.
         """
         self.stop_vm_and_quit_testpmd()
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     def tear_down_all(self):
         """
diff --git a/tests/TestSuite_vhost_dsa.py b/tests/TestSuite_vhost_dsa.py
index 1477eb6c..ef3fdf46 100644
--- a/tests/TestSuite_vhost_dsa.py
+++ b/tests/TestSuite_vhost_dsa.py
@@ -76,8 +76,6 @@ class TestVhostDsa(TestCase):
         self.dut.send_expect("killall -I %s" % self.testpmd_name, "#", 20)
         self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
         self.mode_list = []
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     def get_vhost_port_num(self):
         out = self.vhost_user.send_expect("show port summary all", "testpmd> ", 60)
@@ -166,8 +164,8 @@ class TestVhostDsa(TestCase):
         """
         Test Case 1: PVP split ring vhost async operation test with each tx/rx queue using one DSA dpdk driver channel
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -175,10 +173,10 @@ class TestVhostDsa(TestCase):
             "rxq0@%s-q2;"
             "rxq1@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
@@ -187,9 +185,9 @@ class TestVhostDsa(TestCase):
         vhost_param = "--nb-cores=1 --txq=2 --rxq=2 --txd=1024 --rxd=1024"
 
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             param=vhost_param,
@@ -233,10 +231,10 @@ class TestVhostDsa(TestCase):
                 "rxq0@%s-q0;"
                 "rxq1@%s-q1"
                 % (
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[1],
-                    self.use_dsa_list[1],
+                    dsas[0],
+                    dsas[0],
+                    dsas[1],
+                    dsas[1],
                 )
             )
             vhost_param = "--nb-cores=2 --txq=2 --rxq=2 --txd=1024 --rxd=1024"
@@ -244,8 +242,8 @@ class TestVhostDsa(TestCase):
                 "--vdev 'net_vhost0,iface=vhost-net0,queues=2,dmas=[%s]'" % dmas
             )
             port_options = {
-                self.use_dsa_list[0]: "max_queues=2",
-                self.use_dsa_list[1]: "max_queues=2",
+                dsas[0]: "max_queues=2",
+                dsas[1]: "max_queues=2",
             }
             self.start_vhost_testpmd(
                 cores=self.vhost_core_list,
@@ -293,8 +291,8 @@ class TestVhostDsa(TestCase):
         """
         Test Case 2: PVP split ring vhost async operations test with one DSA dpdk driver channel being shared among multiple tx/rx queues
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -314,22 +312,22 @@ class TestVhostDsa(TestCase):
             "rxq6@%s-q1;"
             "rxq7@%s-q1"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
@@ -337,9 +335,9 @@ class TestVhostDsa(TestCase):
         )
         vhost_param = "--nb-cores=4 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             param=vhost_param,
@@ -395,29 +393,29 @@ class TestVhostDsa(TestCase):
                 "rxq6@%s-q6;"
                 "rxq7@%s-q7"
                 % (
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
                 )
             )
             vhost_eal_param = (
                 "--vdev 'net_vhost0,iface=vhost-net0,queues=8,dmas=[%s]'" % dmas
             )
             vhost_param = "--nb-cores=6 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
-            port_options = {self.use_dsa_list[0]: "max_queues=8"}
+            port_options = {dsas[0]: "max_queues=8"}
             self.start_vhost_testpmd(
                 cores=self.vhost_core_list,
                 param=vhost_param,
@@ -470,29 +468,29 @@ class TestVhostDsa(TestCase):
                 "rxq6@%s-q0;"
                 "rxq7@%s-q0"
                 % (
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
                 )
             )
             vhost_eal_param = (
                 "--vdev 'net_vhost0,iface=vhost-net0,queues=8,dmas=[%s]'" % dmas
             )
             vhost_param = "--nb-cores=6 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
-            port_options = {self.use_dsa_list[0]: "max_queues=1"}
+            port_options = {dsas[0]: "max_queues=1"}
             self.start_vhost_testpmd(
                 cores=self.vhost_core_list,
                 param=vhost_param,
@@ -539,8 +537,8 @@ class TestVhostDsa(TestCase):
         """
         Test Case 3: PVP split ring dynamic queues vhost async operation with dsa dpdk driver channels
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -548,10 +546,10 @@ class TestVhostDsa(TestCase):
             "txq2@%s-q2;"
             "txq3@%s-q2"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
@@ -559,9 +557,9 @@ class TestVhostDsa(TestCase):
         )
         vhost_param = "--nb-cores=4 --txq=4 --rxq=4 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             param=vhost_param,
@@ -610,17 +608,17 @@ class TestVhostDsa(TestCase):
             "rxq2@%s-q1;"
             "rxq3@%s-q0"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --txq=4 --rxq=4 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             param=vhost_param,
@@ -649,18 +647,18 @@ class TestVhostDsa(TestCase):
             "rxq6@%s-q2;"
             "rxq7@%s-q2"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
             )
         )
         vhost_eal_param = (
@@ -668,8 +666,8 @@ class TestVhostDsa(TestCase):
         )
         vhost_param = "--nb-cores=4 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
         port_options = {
-            self.use_dsa_list[0]: "max_queues=4",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=4",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -711,19 +709,19 @@ class TestVhostDsa(TestCase):
             "rxq2@%s-q1;"
             "rxq3@%s-q1"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=5 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             param=vhost_param,
@@ -751,8 +749,8 @@ class TestVhostDsa(TestCase):
         """
         Test Case 4: PVP packed ring vhost async operation test with each tx/rx queue using one DSA dpdk driver channel
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -760,10 +758,10 @@ class TestVhostDsa(TestCase):
             "rxq0@%s-q2;"
             "rxq1@%s-q2"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
@@ -771,9 +769,9 @@ class TestVhostDsa(TestCase):
         )
         vhost_param = "--nb-cores=1 --txq=2 --rxq=2 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             param=vhost_param,
@@ -818,10 +816,10 @@ class TestVhostDsa(TestCase):
                 "rxq0@%s-q0;"
                 "rxq1@%s-q1"
                 % (
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[1],
-                    self.use_dsa_list[1],
+                    dsas[0],
+                    dsas[0],
+                    dsas[1],
+                    dsas[1],
                 )
             )
             vhost_eal_param = (
@@ -875,8 +873,8 @@ class TestVhostDsa(TestCase):
         """
         Test Case 5: PVP packed ring vhost async operation test with one DSA dpdk driver channel being shared among multiple tx/rx queues
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -896,22 +894,22 @@ class TestVhostDsa(TestCase):
             "rxq6@%s-q1;"
             "rxq7@%s-q1"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
@@ -919,9 +917,9 @@ class TestVhostDsa(TestCase):
         )
         vhost_param = "--nb-cores=4 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             param=vhost_param,
@@ -978,22 +976,22 @@ class TestVhostDsa(TestCase):
                 "rxq6@%s-q0;"
                 "rxq7@%s-q0"
                 % (
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
-                    self.use_dsa_list[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
+                    dsas[0],
                 )
             )
             vhost_eal_param = (
@@ -1047,17 +1045,17 @@ class TestVhostDsa(TestCase):
         """
         Test Case 6: PVP packed ring dynamic queues vhost async operation with dsa dpdk driver channels
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
             "txq1@%s-q0;"
             "txq2@%s-q1"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
@@ -1065,11 +1063,11 @@ class TestVhostDsa(TestCase):
         )
         vhost_param = "--nb-cores=4 --txq=4 --rxq=4 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
         port_options = {
-            self.use_dsa_list[0]: "max_queues=4",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=4",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -1118,9 +1116,9 @@ class TestVhostDsa(TestCase):
             "rxq1@%s-q1;"
             "rxq2@%s-q1"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         vhost_eal_param = (
@@ -1155,18 +1153,18 @@ class TestVhostDsa(TestCase):
             "rxq6@%s-q2;"
             "rxq7@%s-q2"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
             )
         )
         vhost_eal_param = (
@@ -1244,8 +1242,8 @@ class TestVhostDsa(TestCase):
         """
         Test Case 7: PVP split ring vhost async operation test with each tx/rx queue using one DSA kernel driver channel
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
-        dmas = "txq0@wq0.0;" "txq1@wq0.1;" "rxq0@wq0.2;" "rxq1@wq0.3"
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
+        dmas = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[1], wqs[2], wqs[3])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=2,dmas=[%s]'" % dmas
         )
@@ -1300,24 +1298,42 @@ class TestVhostDsa(TestCase):
         """
         Test Case 8: PVP split ring all path multi-queues vhost async operation test with one DSA kernel driver channel being shared among multiple tx/rx queues
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "txq6@wq0.1;"
-            "txq7@wq0.1;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.0;"
-            "rxq2@wq0.0;"
-            "rxq3@wq0.0;"
-            "rxq4@wq0.1;"
-            "rxq5@wq0.1;"
-            "rxq6@wq0.1;"
-            "rxq7@wq0.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "txq6@%s;"
+            "txq7@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+            )
         )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,dmas=[%s]'" % dmas
@@ -1362,22 +1378,40 @@ class TestVhostDsa(TestCase):
         if not self.check_2M_env:
             self.vhost_user_pmd.quit()
             dmas = (
-                "txq0@wq0.0;"
-                "txq1@wq0.0;"
-                "txq2@wq0.1;"
-                "txq3@wq0.1;"
-                "txq4@wq0.2;"
-                "txq5@wq0.2;"
-                "txq6@wq0.3;"
-                "txq7@wq0.3;"
-                "rxq0@wq0.0;"
-                "rxq1@wq0.0;"
-                "rxq2@wq0.1;"
-                "rxq3@wq0.1;"
-                "rxq4@wq0.2;"
-                "rxq5@wq0.2;"
-                "rxq6@wq0.3;"
-                "rxq7@wq0.3"
+                "txq0@%s;"
+                "txq1@%s;"
+                "txq2@%s;"
+                "txq3@%s;"
+                "txq4@%s;"
+                "txq5@%s;"
+                "txq6@%s;"
+                "txq7@%s;"
+                "rxq0@%s;"
+                "rxq1@%s;"
+                "rxq2@%s;"
+                "rxq3@%s;"
+                "rxq4@%s;"
+                "rxq5@%s;"
+                "rxq6@%s;"
+                "rxq7@%s"
+                % (
+                    wqs[0],
+                    wqs[0],
+                    wqs[1],
+                    wqs[1],
+                    wqs[2],
+                    wqs[2],
+                    wqs[3],
+                    wqs[3],
+                    wqs[0],
+                    wqs[0],
+                    wqs[1],
+                    wqs[1],
+                    wqs[2],
+                    wqs[2],
+                    wqs[3],
+                    wqs[3],
+                )
             )
             vhost_eal_param = (
                 "--vdev 'net_vhost0,iface=vhost-net0,queues=8,dmas=[%s]'" % dmas
@@ -1406,9 +1440,8 @@ class TestVhostDsa(TestCase):
         """
         Test Case 9: PVP split ring dynamic queues vhost async operation with dsa kernel driver channels
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
-        dmas = "txq0@wq0.0;" "txq1@wq0.1;" "txq2@wq0.2;" "txq3@wq0.2"
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
+        dmas = "txq0@%s;txq1@%s;txq2@%s;txq3@%s" % (wqs[0], wqs[1], wqs[2], wqs[2])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
@@ -1456,7 +1489,7 @@ class TestVhostDsa(TestCase):
         self.check_each_queue_of_port_packets(queues=1)
 
         self.vhost_user_pmd.quit()
-        dmas = "rxq0@wq0.0;" "rxq1@wq0.1;" "rxq2@wq0.1;" "rxq3@wq0.0"
+        dmas = "rxq0@%s;rxq1@%s;rxq2@%s;rxq3@%s" % (wqs[0], wqs[1], wqs[1], wqs[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
@@ -1476,18 +1509,32 @@ class TestVhostDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.2;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.1;"
-            "rxq4@wq1.2;"
-            "rxq5@wq1.2;"
-            "rxq6@wq1.2;"
-            "rxq7@wq1.2"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[8],
+                wqs[9],
+                wqs[10],
+                wqs[10],
+                wqs[10],
+                wqs[10],
+            )
         )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1508,18 +1555,32 @@ class TestVhostDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1571,9 +1632,8 @@ class TestVhostDsa(TestCase):
         Test Case 10: PVP packed ring all path multi-queues vhost async operation test with each tx/rx queue using one DSA kernel driver channel
 
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=1)
-        dmas = "txq0@wq0.0;" "txq1@wq0.1;" "rxq0@wq1.0;" "rxq1@wq1.1"
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0, 1])
+        dmas = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[1], wqs[2], wqs[3])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=2,dmas=[%s]'" % dmas
         )
@@ -1629,24 +1689,42 @@ class TestVhostDsa(TestCase):
         """
         Test Case 11: PVP packed ring all path multi-queues vhost async operation test with one DSA kernel driver channel being shared among multiple tx/rx queues
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "txq6@wq0.1;"
-            "txq7@wq0.1;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.0;"
-            "rxq2@wq0.0;"
-            "rxq3@wq0.0;"
-            "rxq4@wq0.1;"
-            "rxq5@wq0.1;"
-            "rxq6@wq0.1;"
-            "rxq7@wq0.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "txq6@%s;"
+            "txq7@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+            )
         )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,dmas=[%s]'" % dmas
@@ -1691,24 +1769,6 @@ class TestVhostDsa(TestCase):
 
         if not self.check_2M_env:
             self.vhost_user_pmd.quit()
-            dmas = (
-                "txq0@wq0.0;"
-                "txq1@wq0.0;"
-                "txq2@wq0.0;"
-                "txq3@wq0.0;"
-                "txq4@wq0.1;"
-                "txq5@wq0.1;"
-                "txq6@wq0.1;"
-                "txq7@wq0.1;"
-                "rxq0@wq0.0;"
-                "rxq1@wq0.0;"
-                "rxq2@wq0.0;"
-                "rxq3@wq0.0;"
-                "rxq4@wq0.1;"
-                "rxq5@wq0.1;"
-                "rxq6@wq0.1;"
-                "rxq7@wq0.1"
-            )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,dmas=[%s]'" % dmas
         )
@@ -1736,9 +1796,8 @@ class TestVhostDsa(TestCase):
         """
         Test Case 12: PVP packed ring dynamic queues vhost async operation with dsa kernel driver channels
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
-        dmas = "txq0@wq0.0;" "txq1@wq0.1;" "txq2@wq0.2;" "txq3@wq0.2"
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
+        dmas = "txq0@%s;txq1@%s;txq2@%s;txq3@%s" % (wqs[0], wqs[1], wqs[2], wqs[2])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
@@ -1786,7 +1845,7 @@ class TestVhostDsa(TestCase):
         self.check_each_queue_of_port_packets(queues=1)
 
         self.vhost_user_pmd.quit()
-        dmas = "rxq0@wq0.0;" "rxq1@wq0.1;" "rxq2@wq0.1;" "rxq3@wq0.0"
+        dmas = "rxq0@%s;rxq1@%s;rxq2@%s;rxq3@%s" % (wqs[0], wqs[1], wqs[1], wqs[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
@@ -1806,18 +1865,32 @@ class TestVhostDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.2;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.1;"
-            "rxq4@wq1.2;"
-            "rxq5@wq1.2;"
-            "rxq6@wq1.2;"
-            "rxq7@wq1.2"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[8],
+                wqs[9],
+                wqs[10],
+                wqs[10],
+                wqs[10],
+                wqs[10],
+            )
         )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1838,18 +1911,32 @@ class TestVhostDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
@@ -1894,15 +1981,14 @@ class TestVhostDsa(TestCase):
         """
         Test Case 13: PVP split and packed ring dynamic queues vhost async operation with dsa dpdk and kernel driver channels
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2,
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2,
             driver_name="vfio-pci",
-            dsa_index_list=[2, 3],
+            dsa_idxs=[2, 3],
             socket=self.ports_socket,
         )
-        dmas = "txq0@wq0.0;" "txq1@wq0.0"
+        dmas = "txq0@%s;txq1@%s" % (wqs[0], wqs[0])
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
@@ -1944,14 +2030,14 @@ class TestVhostDsa(TestCase):
             "rxq2@%s-q1;"
             "rxq3@%s-q2"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
             )
         )
         vhost_eal_param = (
@@ -1959,11 +2045,11 @@ class TestVhostDsa(TestCase):
         )
         vhost_param = "--nb-cores=4 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
         port_options = {
-            self.use_dsa_list[0]: "max_queues=2",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=2",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -1980,13 +2066,13 @@ class TestVhostDsa(TestCase):
 
         self.vhost_user_pmd.quit()
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "txq6@wq0.6;"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "txq6@%s;"
             "rxq2@%s-q0;"
             "rxq3@%s-q1;"
             "rxq4@%s-q0;"
@@ -1994,12 +2080,19 @@ class TestVhostDsa(TestCase):
             "rxq6@%s-q2;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[6],
+                dsas[0],
+                dsas[0],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
             )
         )
         vhost_eal_param = (
@@ -2007,11 +2100,11 @@ class TestVhostDsa(TestCase):
         )
         vhost_param = "--nb-cores=4 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
         port_options = {
-            self.use_dsa_list[0]: "max_queues=2",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=2",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -2045,39 +2138,16 @@ class TestVhostDsa(TestCase):
                 self.check_each_queue_of_port_packets(queues=8)
 
         self.vhost_user_pmd.quit()
-        dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "txq6@wq0.6;"
-            "rxq2@%s-q0;"
-            "rxq3@%s-q1;"
-            "rxq4@%s-q0;"
-            "rxq5@%s-q1;"
-            "rxq6@%s-q2;"
-            "rxq7@%s-q3"
-            % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-            )
-        )
         vhost_eal_param = (
             "--vdev 'net_vhost0,iface=vhost-net0,queues=8,client=1,dmas=[%s]'" % dmas
         )
         vhost_param = "--nb-cores=4 --txq=8 --rxq=8 --txd=1024 --rxd=1024"
         ports = [self.dut.ports_info[0]["pci"]]
-        for i in self.use_dsa_list:
+        for i in dsas:
             ports.append(i)
         port_options = {
-            self.use_dsa_list[0]: "max_queues=2",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=2",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
diff --git a/tests/TestSuite_vm2vm_virtio_net_perf_dsa.py b/tests/TestSuite_vm2vm_virtio_net_perf_dsa.py
index b06e5ca6..408713f8 100644
--- a/tests/TestSuite_vm2vm_virtio_net_perf_dsa.py
+++ b/tests/TestSuite_vm2vm_virtio_net_perf_dsa.py
@@ -2,16 +2,14 @@
 # Copyright(c) 2022 Intel Corporation
 #
 
-import random
 import re
-import string
-import time
 
 import framework.utils as utils
 from framework.pmd_output import PmdOutput
 from framework.test_case import TestCase
 from framework.virt_common import VM
 
+from .virtio_common import basic_common as BC
 from .virtio_common import dsa_common as DC
 
 
@@ -22,28 +20,22 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         self.cores_list = self.dut.get_core_list(config="all", socket=self.ports_socket)
         self.vhost_core_list = self.cores_list[0:9]
         self.vm_num = 2
-        self.virtio_ip1 = "1.1.1.1"
-        self.virtio_ip2 = "1.1.1.2"
-        self.virtio_mac1 = "52:54:00:00:00:01"
-        self.virtio_mac2 = "52:54:00:00:00:02"
         self.base_dir = self.dut.base_dir.replace("~", "/root")
-        self.random_string = string.ascii_letters + string.digits
         socket_num = len(set([int(core["socket"]) for core in self.dut.cores]))
         self.socket_mem = ",".join(["2048"] * socket_num)
         self.vhost_user = self.dut.new_session(suite="vhost")
         self.vhost_user_pmd = PmdOutput(self.dut, self.vhost_user)
         self.app_testpmd_path = self.dut.apps_name["test-pmd"]
         self.testpmd_name = self.app_testpmd_path.split("/")[-1]
+        self.BC = BC(self)
         self.DC = DC(self)
 
     def set_up(self):
         self.dut.send_expect("rm -rf %s/vhost-net*" % self.base_dir, "#")
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
+        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
         self.vm_dut = []
         self.vm = []
-        self.use_dsa_list = []
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     def start_vhost_testpmd(
         self,
@@ -115,86 +107,6 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             self.vm_dut.append(vm_dut)
             self.vm.append(vm_info)
 
-    def config_vm_ip(self):
-        """
-        set virtio device IP and run arp protocal
-        """
-        vm1_intf = self.vm_dut[0].ports_info[0]["intf"]
-        vm2_intf = self.vm_dut[1].ports_info[0]["intf"]
-        self.vm_dut[0].send_expect(
-            "ifconfig %s %s" % (vm1_intf, self.virtio_ip1), "#", 10
-        )
-        self.vm_dut[1].send_expect(
-            "ifconfig %s %s" % (vm2_intf, self.virtio_ip2), "#", 10
-        )
-        self.vm_dut[0].send_expect(
-            "arp -s %s %s" % (self.virtio_ip2, self.virtio_mac2), "#", 10
-        )
-        self.vm_dut[1].send_expect(
-            "arp -s %s %s" % (self.virtio_ip1, self.virtio_mac1), "#", 10
-        )
-
-    def config_vm_combined(self, combined=1):
-        """
-        set virtio device combined
-        """
-        vm1_intf = self.vm_dut[0].ports_info[0]["intf"]
-        vm2_intf = self.vm_dut[1].ports_info[0]["intf"]
-        self.vm_dut[0].send_expect(
-            "ethtool -L %s combined %d" % (vm1_intf, combined), "#", 10
-        )
-        self.vm_dut[1].send_expect(
-            "ethtool -L %s combined %d" % (vm2_intf, combined), "#", 10
-        )
-
-    def check_ping_between_vms(self):
-        ping_out = self.vm_dut[0].send_expect(
-            "ping {} -c 4".format(self.virtio_ip2), "#", 20
-        )
-        self.logger.info(ping_out)
-
-    def start_iperf(self):
-        """
-        run perf command between to vms
-        """
-        self.vhost_user_pmd.execute_cmd("clear port xstats all")
-
-        server = "iperf -s -i 1"
-        client = "iperf -c {} -i 1 -t 60".format(self.virtio_ip1)
-        self.vm_dut[0].send_expect("{} > iperf_server.log &".format(server), "", 10)
-        self.vm_dut[1].send_expect("{} > iperf_client.log &".format(client), "", 10)
-        time.sleep(60)
-
-    def get_perf_result(self):
-        """
-        get the iperf test result
-        """
-        self.table_header = ["Mode", "[M|G]bits/sec"]
-        self.result_table_create(self.table_header)
-        self.vm_dut[0].send_expect("pkill iperf", "# ")
-        self.vm_dut[1].session.copy_file_from("%s/iperf_client.log" % self.dut.base_dir)
-        fp = open("./iperf_client.log")
-        fmsg = fp.read()
-        fp.close()
-        # remove the server report info from msg
-        index = fmsg.find("Server Report")
-        if index != -1:
-            fmsg = fmsg[:index]
-        iperfdata = re.compile("\S*\s*[M|G]bits/sec").findall(fmsg)
-        # the last data of iperf is the ave data from 0-30 sec
-        self.verify(len(iperfdata) != 0, "The iperf data between to vms is 0")
-        self.logger.info("The iperf data between vms is %s" % iperfdata[-1])
-
-        # put the result to table
-        results_row = ["vm2vm", iperfdata[-1]]
-        self.result_table_add(results_row)
-
-        # print iperf resut
-        self.result_table_print()
-        # rm the iperf log file in vm
-        self.vm_dut[0].send_expect("rm iperf_server.log", "#", 10)
-        self.vm_dut[1].send_expect("rm iperf_client.log", "#", 10)
-
     def verify_xstats_info_on_vhost(self):
         """
         check both 2VMs can receive and send big packets to each other
@@ -213,40 +125,15 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             int(tx_info.group(1)) > 0, "Port 0 not forward packet greater than 1519"
         )
 
-    def check_scp_file_valid_between_vms(self, file_size=1024):
-        """
-        scp file form VM1 to VM2, check the data is valid
-        """
-        # default file_size=1024K
-        data = ""
-        for char in range(file_size * 1024):
-            data += random.choice(self.random_string)
-        self.vm_dut[0].send_expect('echo "%s" > /tmp/payload' % data, "# ")
-        # scp this file to vm1
-        out = self.vm_dut[1].send_command(
-            "scp root@%s:/tmp/payload /root" % self.virtio_ip1, timeout=10
-        )
-        if "Are you sure you want to continue connecting" in out:
-            self.vm_dut[1].send_command("yes", timeout=10)
-        self.vm_dut[1].send_command(self.vm[0].password, timeout=10)
-        # get the file info in vm1, and check it valid
-        md5_send = self.vm_dut[0].send_expect("md5sum /tmp/payload", "# ")
-        md5_revd = self.vm_dut[1].send_expect("md5sum /root/payload", "# ")
-        md5_send = md5_send[: md5_send.find(" ")]
-        md5_revd = md5_revd[: md5_revd.find(" ")]
-        self.verify(
-            md5_send == md5_revd, "the received file is different with send file"
-        )
-
     def test_split_tso_with_dpdk_driver(self):
         """
         Test Case 1: VM2VM vhost-user/virtio-net split ring test TSO with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;rxq0@%s-q0" % (self.use_dsa_list[0], self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        dmas = "txq0@%s-q0;rxq0@%s-q0" % (dsas[0], dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=1,tso=1,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,queues=1,tso=1,dmas=[%s]'"
@@ -257,23 +144,23 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=off,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on"
         self.start_vms(server_mode=False, vm_queue=1)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_ip()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
         self.verify_xstats_info_on_vhost()
 
     def test_split_mergeable_8_queues_large_packet_paylocad_with_dpdk_driver(self):
         """
         Test Case 2: VM2VM vhost-user/virtio-net split ring mergeable path 8 queues test with large packet payload with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -293,25 +180,25 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,tso=1,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,client=1,queues=8,tso=1,dmas=[%s]'"
@@ -322,17 +209,17 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=on,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on"
         self.start_vms(server_mode=True, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         dmas1 = (
@@ -349,18 +236,18 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q5;"
             "rxq7@%s-q5"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         dmas2 = (
@@ -377,18 +264,18 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q5;"
             "rxq7@%s-q5"
             % (
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
             )
         )
         vhost_eal_param = (
@@ -397,20 +284,20 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             % (dmas1, dmas2)
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=8",
-            self.use_dsa_list[1]: "max_queues=8",
+            dsas[0]: "max_queues=8",
+            dsas[1]: "max_queues=8",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         if not self.check_2M_env:
             self.vhost_user_pmd.quit()
@@ -418,14 +305,14 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
                 cores=self.vhost_core_list,
                 eal_param=vhost_eal_param,
                 param=vhost_param,
-                ports=self.use_dsa_list,
+                ports=dsas,
                 port_options=port_options,
                 iova_mode="pa",
             )
-            self.check_ping_between_vms()
-            self.check_scp_file_valid_between_vms()
-            self.start_iperf()
-            self.get_perf_result()
+            self.BC.check_ping_between_2_vms()
+            self.BC.check_scp_file_between_2_vms()
+            self.BC.run_iperf_test_between_2_vms()
+            self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
@@ -439,11 +326,11 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.config_vm_combined(combined=4)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=4)
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
@@ -457,18 +344,18 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.config_vm_combined(combined=1)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=1)
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
     def test_split_non_mergeable_8_queues_large_packet_paylocad_with_dpdk_driver(self):
         """
         Test Case 3: VM2VM vhost-user/virtio-net split ring non-mergeable path 8 queues test with large packet payload with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -488,25 +375,25 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
-        port_options = {self.use_dsa_list[0]: "max_queues=8"}
+        port_options = {dsas[0]: "max_queues=8"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,tso=1,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,client=1,queues=8,tso=1,dmas=[%s]'"
@@ -517,17 +404,17 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=off,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on"
         self.start_vms(server_mode=True, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
@@ -541,11 +428,12 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.config_vm_combined(combined=4)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=4)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
@@ -559,21 +447,22 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.config_vm_combined(combined=1)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=1)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
     def test_packed_tso_with_dpdk_driver(self):
         """
         Test Case 4: VM2VM vhost-user/virtio-net packed ring test TSO with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas = "txq0@%s-q0;rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        dmas = "txq0@%s-q0;rxq0@%s-q1" % (dsas[0], dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=1,tso=1,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,queues=1,tso=1,dmas=[%s]'"
@@ -584,23 +473,24 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=on,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=1)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
         self.verify_xstats_info_on_vhost()
 
     def test_packed_mergeable_8_queues_large_packet_paylocad_with_dpdk_driver(self):
         """
         Test Case 5: VM2VM vhost-user/virtio-net packed ring mergeable path 8 queues test with large packet payload with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -620,25 +510,25 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q3;"
             "rxq7@%s-q3"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,tso=1,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,queues=8,tso=1,dmas=[%s]'"
@@ -649,30 +539,30 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=on,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         for _ in range(5):
-            self.check_ping_between_vms()
-            self.check_scp_file_valid_between_vms()
-            self.start_iperf()
-            self.get_perf_result()
+            self.BC.check_ping_between_2_vms()
+            self.BC.check_scp_file_between_2_vms()
+            self.BC.run_iperf_test_between_2_vms()
+            self.BC.check_iperf_result_between_2_vms()
 
     def test_packed_non_mergeable_8_queues_large_packet_paylocad_with_dpdk_driver(self):
         """
         Test Case 6: VM2VM vhost-user/virtio-net packed ring non-mergeable path 8 queues test with large packet payload with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas1 = (
             "txq0@%s-q0;"
@@ -688,18 +578,18 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q7;"
             "rxq7@%s-q7"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         dmas2 = (
@@ -716,23 +606,23 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q7;"
             "rxq7@%s-q7"
             % (
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
             )
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=8",
-            self.use_dsa_list[1]: "max_queues=8",
+            dsas[0]: "max_queues=8",
+            dsas[1]: "max_queues=8",
         }
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,tso=1,dmas=[%s]' "
@@ -744,34 +634,34 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=off,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=off,guest_tso4=off,guest_ecn=on,guest_ufo=on,host_ufo=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         for _ in range(5):
-            self.check_ping_between_vms()
-            self.check_scp_file_valid_between_vms()
-            self.start_iperf()
-            self.get_perf_result()
+            self.BC.check_ping_between_2_vms()
+            self.BC.check_scp_file_between_2_vms()
+            self.BC.run_iperf_test_between_2_vms()
+            self.BC.check_iperf_result_between_2_vms()
 
     def test_packed_dma_ring_size_with_tcp_and_dpdk_driver(self):
         """
         Test Case 7: VM2VM vhost-user/virtio-net packed ring test dma-ring-size with tcp traffic and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
-        dmas1 = "txq0@%s-q0;rxq0@%s-q0" % (self.use_dsa_list[0], self.use_dsa_list[0])
-        dmas2 = "txq0@%s-q1;rxq0@%s-q1" % (self.use_dsa_list[0], self.use_dsa_list[0])
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        dmas1 = "txq0@%s-q0;rxq0@%s-q0" % (dsas[0], dsas[0])
+        dmas2 = "txq0@%s-q1;rxq0@%s-q1" % (dsas[0], dsas[0])
+        port_options = {dsas[0]: "max_queues=2"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=1,tso=1,dmas=[%s],dma-ring-size=64' "
             "--vdev 'eth_vhost1,iface=vhost-net1,queues=1,tso=1,dmas=[%s],dma-ring-size=64'"
@@ -782,23 +672,24 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=on,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=1)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
         self.verify_xstats_info_on_vhost()
 
     def test_packed_mergeable_8_queues_with_legacy_mode_and_dpdk_driver(self):
         """
         Test Case 8: VM2VM vhost-user/virtio-net packed ring mergeable path 8 queues test with legacy mode with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -818,25 +709,25 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q1;"
             "rxq7@%s-q1"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,tso=1,legacy-ol-flags=1,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,queues=8,tso=1,legacy-ol-flags=1,dmas=[%s]'"
@@ -847,30 +738,30 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=on,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         for _ in range(5):
-            self.check_ping_between_vms()
-            self.check_scp_file_valid_between_vms()
-            self.start_iperf()
-            self.get_perf_result()
+            self.BC.check_ping_between_2_vms()
+            self.BC.check_scp_file_between_2_vms()
+            self.BC.run_iperf_test_between_2_vms()
+            self.BC.check_iperf_result_between_2_vms()
 
     def test_split_tso_with_kernel_driver(self):
         """
         Test Case 9: VM2VM vhost-user/virtio-net split ring test TSO with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.0"
+        wqs = self.DC.create_wq(wq_num=1, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[0])
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=1,tso=1,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,queues=1,tso=1,dmas=[%s]'"
@@ -885,53 +776,87 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=off,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on"
         self.start_vms(server_mode=False, vm_queue=1)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
         self.verify_xstats_info_on_vhost()
 
     def test_split_mergeable_8_queues_large_packet_paylocad_with_kernel_driver(self):
         """
         Test Case 10: VM2VM vhost-user/virtio-net split ring mergeable path 8 queues test with large packet payload with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas1 = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "txq6@wq0.6;"
-            "txq7@wq0.7;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.1;"
-            "rxq2@wq0.2;"
-            "rxq3@wq0.3;"
-            "rxq4@wq0.4;"
-            "rxq5@wq0.5;"
-            "rxq6@wq0.6;"
-            "rxq7@wq0.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "txq6@%s;"
+            "txq7@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+        ) % (
+            wqs[0],
+            wqs[1],
+            wqs[2],
+            wqs[3],
+            wqs[4],
+            wqs[5],
+            wqs[6],
+            wqs[7],
+            wqs[0],
+            wqs[1],
+            wqs[2],
+            wqs[3],
+            wqs[4],
+            wqs[5],
+            wqs[6],
+            wqs[7],
         )
         dmas2 = (
-            "txq0@wq1.0;"
-            "txq1@wq1.1;"
-            "txq2@wq1.2;"
-            "txq3@wq1.3;"
-            "txq4@wq1.4;"
-            "txq5@wq1.5;"
-            "txq6@wq1.6;"
-            "txq7@wq1.7;"
-            "rxq0@wq1.0;"
-            "rxq1@wq1.1;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "txq6@%s;"
+            "txq7@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+        ) % (
+            wqs[8],
+            wqs[9],
+            wqs[10],
+            wqs[11],
+            wqs[12],
+            wqs[13],
+            wqs[14],
+            wqs[15],
+            wqs[8],
+            wqs[9],
+            wqs[10],
+            wqs[11],
+            wqs[12],
+            wqs[13],
+            wqs[14],
+            wqs[15],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,tso=1,dmas=[%s]' "
@@ -947,41 +872,69 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=on,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on"
         self.start_vms(server_mode=True, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         dmas1 = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq0.1;"
-            "rxq3@wq0.1;"
-            "rxq4@wq0.2;"
-            "rxq5@wq0.2;"
-            "rxq6@wq0.2;"
-            "rxq7@wq0.2"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[2],
+                wqs[2],
+                wqs[2],
+                wqs[2],
+            )
         )
         dmas2 = (
-            "txq0@wq0.3;"
-            "txq1@wq0.3;"
-            "txq2@wq0.3;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.4;"
-            "rxq2@wq0.4;"
-            "rxq3@wq0.4;"
-            "rxq4@wq0.5;"
-            "rxq5@wq0.5;"
-            "rxq6@wq0.5;"
-            "rxq7@wq0.5"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[3],
+                wqs[3],
+                wqs[3],
+                wqs[3],
+                wqs[4],
+                wqs[4],
+                wqs[4],
+                wqs[4],
+                wqs[5],
+                wqs[5],
+                wqs[5],
+                wqs[5],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,tso=1,dmas=[%s]' "
@@ -1011,11 +964,12 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.config_vm_combined(combined=4)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=4)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
@@ -1029,11 +983,12 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.config_vm_combined(combined=1)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=1)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
     def test_split_non_mergeable_8_queues_large_packet_paylocad_with_kernel_driver(
         self,
@@ -1041,35 +996,62 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         """
         Test Case 11: VM2VM vhost-user/virtio-net split ring non-mergeable path 8 queues test with large packet payload with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas1 = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq0.1;"
-            "rxq3@wq0.1;"
-            "rxq4@wq0.2;"
-            "rxq5@wq0.2;"
-            "rxq6@wq0.2;"
-            "rxq7@wq0.2"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[1],
+                wqs[2],
+                wqs[2],
+                wqs[2],
+                wqs[2],
+            )
         )
         dmas2 = (
-            "txq0@wq1.0;"
-            "txq1@wq1.0;"
-            "txq2@wq1.0;"
-            "txq3@wq1.0;"
-            "txq4@wq1.1;"
-            "txq5@wq1.1;"
-            "rxq2@wq1.1;"
-            "rxq3@wq1.1;"
-            "rxq4@wq1.2;"
-            "rxq5@wq1.2;"
-            "rxq6@wq1.2;"
-            "rxq7@wq1.2"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[3],
+                wqs[3],
+                wqs[3],
+                wqs[3],
+                wqs[4],
+                wqs[4],
+                wqs[4],
+                wqs[4],
+                wqs[5],
+                wqs[5],
+                wqs[5],
+                wqs[5],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,tso=1,dmas=[%s]' "
@@ -1085,12 +1067,12 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=off,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=off,guest_tso4=off,guest_ecn=on,guest_ufo=on,host_ufo=on"
         self.start_vms(server_mode=True, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
@@ -1104,11 +1086,10 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
-
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=4,tso=1' "
@@ -1121,18 +1102,19 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.config_vm_combined(combined=1)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=1)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
     def test_packed_tso_with_kernel_driver(self):
         """
         Test Case 12: VM2VM vhost-user/virtio-net packed ring test TSO with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        dmas = "txq0@wq0.0;rxq0@wq0.0"
+        wqs = self.DC.create_wq(wq_num=1, dsa_idxs=[0])
+        dmas = "txq0@%s;rxq0@%s" % (wqs[0], wqs[0])
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=1,tso=1,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,queues=1,tso=1,dmas=[%s]'"
@@ -1147,45 +1129,73 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=on,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=1)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
         self.verify_xstats_info_on_vhost()
 
     def test_packed_mergeable_8_queues_large_packet_paylocad_with_kernel_driver(self):
         """
         Test Case 13: VM2VM vhost-user/virtio-net packed ring mergeable path 8 queues test with large packet payload with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas1 = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "txq4@wq0.4;"
-            "txq5@wq0.5;"
-            "rxq2@wq0.2;"
-            "rxq3@wq0.3;"
-            "rxq4@wq0.4;"
-            "rxq5@wq0.5;"
-            "rxq6@wq0.6;"
-            "rxq7@wq0.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[6],
+                wqs[7],
+            )
         )
         dmas2 = (
-            "txq0@wq1.0;"
-            "txq1@wq1.1;"
-            "txq2@wq1.2;"
-            "txq3@wq1.3;"
-            "txq4@wq1.4;"
-            "txq5@wq1.5;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.3;"
-            "rxq4@wq1.4;"
-            "rxq5@wq1.5;"
-            "rxq6@wq1.6;"
-            "rxq7@wq1.7"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[8],
+                wqs[9],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,tso=1,dmas=[%s]' "
@@ -1201,18 +1211,18 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         )
         self.vm_args = "mrg_rxbuf=on,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         for _ in range(5):
-            self.check_ping_between_vms()
-            self.check_scp_file_valid_between_vms()
-            self.start_iperf()
-            self.get_perf_result()
+            self.BC.check_ping_between_2_vms()
+            self.BC.check_scp_file_between_2_vms()
+            self.BC.run_iperf_test_between_2_vms()
+            self.BC.check_iperf_result_between_2_vms()
 
     def test_packed_non_mergeable_8_queues_large_packet_paylocad_with_kernel_driver(
         self,
@@ -1220,43 +1230,78 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         """
         Test Case 14: VM2VM vhost-user/virtio-net packed ring non-mergeable path 8 queues test with large packet payload with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0, 1])
         dmas1 = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.1;"
-            "txq3@wq0.1;"
-            "txq4@wq0.2;"
-            "txq5@wq0.2;"
-            "txq6@wq0.3;"
-            "txq7@wq0.3;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.0;"
-            "rxq2@wq0.1;"
-            "rxq3@wq0.1;"
-            "rxq4@wq0.2;"
-            "rxq5@wq0.2;"
-            "rxq6@wq0.3;"
-            "rxq7@wq0.3"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "txq6@%s;"
+            "txq7@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[2],
+                wqs[2],
+                wqs[3],
+                wqs[3],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[2],
+                wqs[2],
+                wqs[3],
+                wqs[3],
+            )
         )
         dmas2 = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.1;"
-            "txq3@wq0.1;"
-            "txq4@wq0.2;"
-            "txq5@wq0.2;"
-            "txq6@wq0.3;"
-            "txq7@wq0.3;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.0;"
-            "rxq2@wq0.1;"
-            "rxq3@wq0.1;"
-            "rxq4@wq0.2;"
-            "rxq5@wq0.2;"
-            "rxq6@wq0.3;"
-            "rxq7@wq0.3"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "txq6@%s;"
+            "txq7@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[2],
+                wqs[2],
+                wqs[3],
+                wqs[3],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[2],
+                wqs[2],
+                wqs[3],
+                wqs[3],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=8,tso=1,dmas=[%s]' "
@@ -1272,27 +1317,26 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         )
         self.vm_args = "disable-modern=false,mrg_rxbuf=off,mq=on,vectors=40,csum=on,guest_csum=on,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=8)
-        self.config_vm_combined(combined=8)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=8)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         for _ in range(5):
-            self.check_ping_between_vms()
-            self.check_scp_file_valid_between_vms()
-            self.start_iperf()
-            self.get_perf_result()
+            self.BC.check_ping_between_2_vms()
+            self.BC.check_scp_file_between_2_vms()
+            self.BC.run_iperf_test_between_2_vms()
+            self.BC.check_iperf_result_between_2_vms()
 
     def test_split_non_mergeable_16_queues_with_rx_tx_csum_in_sw(self):
         """
         Test Case 15: VM2VM vhost-user/virtio-net split ring non-mergeable 16 queues test with Rx/Tx csum in SW
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2,
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2,
             driver_name="vfio-pci",
             dsa_index_list=[2, 3],
             socket=self.ports_socket,
@@ -1314,39 +1358,55 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "txq13@%s-q0;"
             "txq14@%s-q0;"
             "txq15@%s-q0;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.0;"
-            "rxq2@wq0.0;"
-            "rxq3@wq0.0;"
-            "rxq4@wq0.0;"
-            "rxq5@wq0.0;"
-            "rxq6@wq0.0;"
-            "rxq7@wq0.0;"
-            "rxq8@wq0.0;"
-            "rxq9@wq0.0;"
-            "rxq10@wq0.0;"
-            "rxq11@wq0.0;"
-            "rxq12@wq0.0;"
-            "rxq13@wq0.0;"
-            "rxq14@wq0.0;"
-            "rxq15@wq0.0"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s;"
+            "rxq8@%s;"
+            "rxq9@%s;"
+            "rxq10@%s;"
+            "rxq11@%s;"
+            "rxq12@%s;"
+            "rxq13@%s;"
+            "rxq14@%s;"
+            "rxq15@%s"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
             )
         )
         dmas2 = (
@@ -1366,39 +1426,55 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "txq13@%s-q5;"
             "txq14@%s-q6;"
             "txq15@%s-q7;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.1;"
-            "rxq2@wq0.2;"
-            "rxq3@wq0.3;"
-            "rxq4@wq0.4;"
-            "rxq5@wq0.5;"
-            "rxq6@wq0.6;"
-            "rxq7@wq0.7;"
-            "rxq8@wq1.0;"
-            "rxq9@wq1.1;"
-            "rxq10@wq1.2;"
-            "rxq11@wq1.3;"
-            "rxq12@wq1.4;"
-            "rxq13@wq1.5;"
-            "rxq14@wq1.6;"
-            "rxq15@wq1.7"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s;"
+            "rxq8@%s;"
+            "rxq9@%s;"
+            "rxq10@%s;"
+            "rxq11@%s;"
+            "rxq12@%s;"
+            "rxq13@%s;"
+            "rxq14@%s;"
+            "rxq15@%s"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[6],
+                wqs[7],
+                wqs[8],
+                wqs[9],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
             )
         )
         vhost_eal_param = (
@@ -1411,7 +1487,7 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
         )
         self.vhost_user_pmd.execute_cmd("stop")
         self.vhost_user_pmd.execute_cmd("set fwd csum")
@@ -1425,12 +1501,12 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("start")
         self.vm_args = "disable-modern=false,mrg_rxbuf=off,mq=on,vectors=40,csum=on,guest_csum=off,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on"
         self.start_vms(server_mode=True, vm_queue=16)
-        self.config_vm_combined(combined=16)
-        self.config_vm_ip()
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=16)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         dmas1 = (
@@ -1447,29 +1523,39 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "rxq6@%s-q6;"
             "rxq7@%s-q6"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
             )
         )
         dmas2 = (
-            "txq12@wq1.0;"
-            "txq13@wq1.0;"
-            "txq14@wq1.0;"
-            "txq15@wq1.0;"
-            "rxq12@wq1.1;"
-            "rxq13@wq1.1;"
-            "rxq14@wq1.1;"
-            "rxq15@wq1.1"
+            "txq12@%s;"
+            "txq13@%s;"
+            "txq14@%s;"
+            "txq15@%s;"
+            "rxq12@%s;"
+            "rxq13@%s;"
+            "rxq14@%s;"
+            "rxq15@%s"
+            % (
+                wqs[8],
+                wqs[8],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=16,tso=1,dmas=[%s]' "
@@ -1481,12 +1567,12 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
         )
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
@@ -1500,10 +1586,10 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         self.vhost_user_pmd.quit()
         vhost_eal_param = (
@@ -1517,20 +1603,19 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             param=vhost_param,
             no_pci=True,
         )
-        self.config_vm_combined(combined=1)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=1)
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
     def test_packed_mergeable_16_queues_with_rx_tx_csum_in_sw(self):
         """
         Test Case 16: VM2VM vhost-user/virtio-net packed ring mergeable 16 queues test with Rx/Tx csum in SW
         """
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2,
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2,
             driver_name="vfio-pci",
             dsa_index_list=[2, 3],
             socket=self.ports_socket,
@@ -1552,39 +1637,55 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "txq13@%s-q0;"
             "txq14@%s-q0;"
             "txq15@%s-q0;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.0;"
-            "rxq2@wq0.0;"
-            "rxq3@wq0.0;"
-            "rxq4@wq0.0;"
-            "rxq5@wq0.0;"
-            "rxq6@wq0.0;"
-            "rxq7@wq0.0;"
-            "rxq8@wq0.0;"
-            "rxq9@wq0.0;"
-            "rxq10@wq0.0;"
-            "rxq11@wq0.0;"
-            "rxq12@wq0.0;"
-            "rxq13@wq0.0;"
-            "rxq14@wq0.0;"
-            "rxq15@wq0.0"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s;"
+            "rxq8@%s;"
+            "rxq9@%s;"
+            "rxq10@%s;"
+            "rxq11@%s;"
+            "rxq12@%s;"
+            "rxq13@%s;"
+            "rxq14@%s;"
+            "rxq15@%s"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
             )
         )
         dmas2 = (
@@ -1604,39 +1705,55 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             "txq13@%s-q5;"
             "txq14@%s-q6;"
             "txq15@%s-q7;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.1;"
-            "rxq2@wq0.2;"
-            "rxq3@wq0.3;"
-            "rxq4@wq0.4;"
-            "rxq5@wq0.5;"
-            "rxq6@wq0.6;"
-            "rxq7@wq0.7;"
-            "rxq8@wq1.0;"
-            "rxq9@wq1.1;"
-            "rxq10@wq1.2;"
-            "rxq11@wq1.3;"
-            "rxq12@wq1.4;"
-            "rxq13@wq1.5;"
-            "rxq14@wq1.6;"
-            "rxq15@wq1.7"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s;"
+            "rxq8@%s;"
+            "rxq9@%s;"
+            "rxq10@%s;"
+            "rxq11@%s;"
+            "rxq12@%s;"
+            "rxq13@%s;"
+            "rxq14@%s;"
+            "rxq15@%s"
             % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
-                self.use_dsa_list[1],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[0],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                dsas[1],
+                wqs[0],
+                wqs[1],
+                wqs[2],
+                wqs[3],
+                wqs[4],
+                wqs[5],
+                wqs[6],
+                wqs[7],
+                wqs[8],
+                wqs[9],
+                wqs[10],
+                wqs[11],
+                wqs[12],
+                wqs[13],
+                wqs[14],
+                wqs[15],
             )
         )
         vhost_eal_param = (
@@ -1649,7 +1766,7 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
         )
         self.vhost_user_pmd.execute_cmd("stop")
         self.vhost_user_pmd.execute_cmd("set fwd csum")
@@ -1663,18 +1780,18 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("start")
         self.vm_args = "disable-modern=false,mrg_rxbuf=on,mq=on,vectors=40,csum=on,guest_csum=off,host_tso4=on,guest_tso4=on,guest_ecn=on,guest_ufo=on,host_ufo=on,packed=on"
         self.start_vms(server_mode=False, vm_queue=16)
-        self.config_vm_ip()
-        self.config_vm_combined(combined=16)
-        self.check_ping_between_vms()
-        self.check_scp_file_valid_between_vms()
-        self.start_iperf()
-        self.get_perf_result()
+        self.BC.config_2_vms_combined(combined=16)
+        self.BC.config_2_vms_ip()
+        self.BC.check_ping_between_2_vms()
+        self.BC.check_scp_file_between_2_vms()
+        self.BC.run_iperf_test_between_2_vms()
+        self.BC.check_iperf_result_between_2_vms()
 
         for _ in range(5):
-            self.check_ping_between_vms()
-            self.check_scp_file_valid_between_vms()
-            self.start_iperf()
-            self.get_perf_result()
+            self.BC.check_ping_between_2_vms()
+            self.BC.check_scp_file_between_2_vms()
+            self.BC.run_iperf_test_between_2_vms()
+            self.BC.check_iperf_result_between_2_vms()
 
     def stop_all_apps(self):
         for i in range(len(self.vm)):
@@ -1685,8 +1802,7 @@ class TestVM2VMVirtioNetPerfDsa(TestCase):
         self.stop_all_apps()
         self.dut.kill_all()
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
+        self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
 
     def tear_down_all(self):
         self.dut.close_session(self.vhost_user)
diff --git a/tests/TestSuite_vm2vm_virtio_pmd_dsa.py b/tests/TestSuite_vm2vm_virtio_pmd_dsa.py
index c4353661..6ae9f165 100644
--- a/tests/TestSuite_vm2vm_virtio_pmd_dsa.py
+++ b/tests/TestSuite_vm2vm_virtio_pmd_dsa.py
@@ -42,9 +42,6 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         self.vm_num = 2
         self.vm_dut = []
         self.vm = []
-        self.use_dsa_list = []
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     @property
     def check_2M_env(self):
@@ -99,7 +96,6 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         packed=False,
         server_mode=True,
         restart_vm1=False,
-        vm_config="vhost_sample",
     ):
         """
         start two VM, each VM has one virtio device
@@ -111,7 +107,7 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         for i in range(self.vm_num):
             if restart_vm1:
                 i = i + 1
-            vm_info = VM(self.dut, "vm%d" % i, vm_config)
+            vm_info = VM(self.dut, "vm%d" % i, "vhost_sample")
             vm_params["driver"] = "vhost-user"
             if not server_mode:
                 vm_params["opt_path"] = self.base_dir + "/vhost-net%d" % i
@@ -210,6 +206,7 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         dut_pmd.execute_cmd("start")
 
     def get_and_verify_func_name_of_perf_top(self, func_name_list):
+        time.sleep(10)
         self.dut.send_expect("rm -fr perf_top.log", "# ", 120)
         self.dut.send_expect("perf top > perf_top.log", "", 120)
         time.sleep(30)
@@ -229,8 +226,8 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         Test Case 1: VM2VM virtio-pmd split ring mergeable path dynamic queue size with dsa dpdk driver and server mode
         """
         self.check_path = ["virtio_dev_rx_async", "virtio_dev_tx_async"]
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -241,18 +238,9 @@ class TestVM2VMVirtioPmdDsa(TestCase):
             "rxq1@%s-q1;"
             "rxq2@%s-q2;"
             "rxq3@%s-q3"
-            % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-            )
+            % (dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0])
         )
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,client=1,queues=8,dmas=[%s]'"
@@ -263,7 +251,7 @@ class TestVM2VMVirtioPmdDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         self.start_vms(vm_queue=8, mergeable=True, packed=False, server_mode=True)
@@ -293,8 +281,8 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         Test Case 2: VM2VM virtio-pmd split ring non-mergeable path dynamic queue size with dsa dpdk driver and server mode
         """
         self.check_path = ["virtio_dev_rx_async", "virtio_dev_tx_async"]
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -305,18 +293,9 @@ class TestVM2VMVirtioPmdDsa(TestCase):
             "rxq1@%s-q2;"
             "rxq2@%s-q3;"
             "rxq3@%s-q3"
-            % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-            )
+            % (dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0])
         )
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,client=1,queues=8,dmas=[%s]'"
@@ -327,7 +306,7 @@ class TestVM2VMVirtioPmdDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         self.start_vms(vm_queue=8, mergeable=False, packed=False, server_mode=True)
@@ -359,8 +338,8 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         Test Case 3: VM2VM virtio-pmd packed ring mergeable path dynamic queue size with dsa dpdk driver and server mode
         """
         self.check_path = ["virtio_dev_rx_async", "virtio_dev_tx_async"]
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -371,18 +350,9 @@ class TestVM2VMVirtioPmdDsa(TestCase):
             "rxq1@%s-q1;"
             "rxq2@%s-q2;"
             "rxq3@%s-q3"
-            % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-            )
+            % (dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0])
         )
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,client=1,queues=8,dmas=[%s]'"
@@ -393,7 +363,7 @@ class TestVM2VMVirtioPmdDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         self.start_vms(vm_queue=8, mergeable=True, packed=True, server_mode=True)
@@ -442,8 +412,8 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         Test Case 4: VM2VM virtio-pmd packed ring non-mergeable path dynamic queue size with dsa dpdk driver and server mode
         """
         self.check_path = ["virtio_dev_rx_async", "virtio_dev_tx_async"]
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1, driver_name="vfio-pci", socket=self.ports_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1, driver_name="vfio-pci", socket=self.ports_socket
         )
         dmas = (
             "txq0@%s-q0;"
@@ -454,18 +424,9 @@ class TestVM2VMVirtioPmdDsa(TestCase):
             "rxq1@%s-q1;"
             "rxq2@%s-q2;"
             "rxq3@%s-q3"
-            % (
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-                self.use_dsa_list[0],
-            )
+            % (dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0], dsas[0])
         )
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,dmas=[%s]' "
             "--vdev 'eth_vhost1,iface=vhost-net1,client=1,queues=8,dmas=[%s]'"
@@ -476,7 +437,7 @@ class TestVM2VMVirtioPmdDsa(TestCase):
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
         )
         self.start_vms(vm_queue=8, mergeable=False, packed=True, server_mode=True)
@@ -508,28 +469,27 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         Test Case 5: VM2VM virtio-pmd split ring mergeable path dynamic queue size with dsa kernel driver and server mode
         """
         self.check_path = ["virtio_dev_rx_async", "virtio_dev_tx_async"]
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas1 = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "rxq0@wq0.1;"
-            "rxq1@wq0.1;"
-            "rxq2@wq0.1;"
-            "rxq3@wq0.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s" % (wqs[0], wqs[0], wqs[0], wqs[0], wqs[1], wqs[1], wqs[1], wqs[1])
         )
 
         dmas2 = (
-            "txq0@wq0.1;"
-            "txq1@wq0.1;"
-            "txq2@wq0.1;"
-            "txq3@wq0.1;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.0;"
-            "rxq2@wq0.0;"
-            "rxq3@wq0.0"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s" % (wqs[1], wqs[1], wqs[1], wqs[1], wqs[0], wqs[0], wqs[0], wqs[0])
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,dmas=[%s]' "
@@ -572,21 +532,34 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         Test Case 6: VM2VM virtio-pmd split ring non-mergeable path dynamic queue size with dsa kernel driver and server mode
         """
         self.check_path = ["virtio_dev_rx_async", "virtio_dev_tx_async"]
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,dmas=[%s]' "
@@ -629,17 +602,16 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         Test Case 7: VM2VM virtio-pmd packed ring mergeable path dynamic queue size with dsa kernel driver and server mode
         """
         self.check_path = ["virtio_dev_rx_async", "virtio_dev_tx_async"]
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas = (
-            "txq0@wq0.0;"
-            "txq1@wq0.1;"
-            "txq2@wq0.2;"
-            "txq3@wq0.3;"
-            "rxq0@wq0.0;"
-            "rxq1@wq0.1;"
-            "rxq2@wq0.2;"
-            "rxq3@wq0.3"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "rxq0@%s;"
+            "rxq1@%s;"
+            "rxq2@%s;"
+            "rxq3@%s" % (wqs[0], wqs[1], wqs[2], wqs[3], wqs[0], wqs[1], wqs[2], wqs[3])
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,dmas=[%s]' "
@@ -699,36 +671,63 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         Test Case 8: VM2VM virtio-pmd packed ring non-mergeable path dynamic queue size with dsa kernel driver and server mode
         """
         self.check_path = ["virtio_dev_rx_async", "virtio_dev_tx_async"]
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=8, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=8, dsa_idxs=[0, 1])
         dmas1 = (
-            "txq0@wq0.0;"
-            "txq1@wq0.0;"
-            "txq2@wq0.0;"
-            "txq3@wq0.0;"
-            "txq4@wq0.1;"
-            "txq5@wq0.1;"
-            "rxq2@wq1.0;"
-            "rxq3@wq1.0;"
-            "rxq4@wq1.1;"
-            "rxq5@wq1.1;"
-            "rxq6@wq1.1;"
-            "rxq7@wq1.1"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[0],
+                wqs[1],
+                wqs[1],
+                wqs[8],
+                wqs[8],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+                wqs[9],
+            )
         )
 
         dmas2 = (
-            "txq0@wq0.2;"
-            "txq1@wq0.2;"
-            "txq2@wq0.2;"
-            "txq3@wq0.2;"
-            "txq4@wq0.3;"
-            "txq5@wq0.3;"
-            "rxq2@wq1.2;"
-            "rxq3@wq1.2;"
-            "rxq4@wq1.3;"
-            "rxq5@wq1.3;"
-            "rxq6@wq1.3;"
-            "rxq7@wq1.3"
+            "txq0@%s;"
+            "txq1@%s;"
+            "txq2@%s;"
+            "txq3@%s;"
+            "txq4@%s;"
+            "txq5@%s;"
+            "rxq2@%s;"
+            "rxq3@%s;"
+            "rxq4@%s;"
+            "rxq5@%s;"
+            "rxq6@%s;"
+            "rxq7@%s"
+            % (
+                wqs[2],
+                wqs[2],
+                wqs[2],
+                wqs[2],
+                wqs[3],
+                wqs[3],
+                wqs[10],
+                wqs[10],
+                wqs[11],
+                wqs[11],
+                wqs[11],
+                wqs[11],
+            )
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,client=1,queues=8,dmas=[%s]' "
@@ -773,8 +772,6 @@ class TestVM2VMVirtioPmdDsa(TestCase):
         self.stop_all_apps()
         self.dut.kill_all()
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     def tear_down_all(self):
         self.dut.close_session(self.vhost_user)
diff --git a/tests/TestSuite_vm2vm_virtio_user_dsa.py b/tests/TestSuite_vm2vm_virtio_user_dsa.py
index 7e359f3b..bd841e02 100644
--- a/tests/TestSuite_vm2vm_virtio_user_dsa.py
+++ b/tests/TestSuite_vm2vm_virtio_user_dsa.py
@@ -46,10 +46,6 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.dut.send_expect("rm -rf %s" % self.dump_vhost_pcap, "#")
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
         self.dut.send_expect("killall -s INT %s" % self.pdump_name, "#")
-        self.use_dsa_list = []
-
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     @property
     def check_2M_env(self):
@@ -279,16 +275,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 1: VM2VM vhost-user/virtio-user split ring non-mergeable path and multi-queues payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -296,14 +292,14 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             iova_mode="va",
         )
         virtio1_eal_param = "--vdev=net_virtio_user1,mac=00:01:02:03:04:05,path=./vhost-net1,queues=2,server=1,mrg_rxbuf=0,in_order=0,queue_size=4096"
@@ -329,16 +325,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         self.clear_virtio_user1_stats()
         dmas1 = "txq0@%s-q1;txq1@%s-q1;rxq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q1;txq1@%s-q1;rxq1@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -346,8 +342,8 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=4",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=4",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -355,7 +351,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
         self.start_pdump_to_capture_pkt()
@@ -370,16 +366,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 2: VM2VM split ring inorder non-mergeable path and multi-queues payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q2;rxq1@%s-q3" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -387,14 +383,14 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=4"}
+        port_options = {dsas[0]: "max_queues=4"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             iova_mode="va",
         )
         virtio1_eal_param = "--vdev=net_virtio_user1,mac=00:01:02:03:04:05,path=./vhost-net1,queues=2,server=1,mrg_rxbuf=0,in_order=1,queue_size=4096"
@@ -420,16 +416,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         self.clear_virtio_user1_stats()
         dmas1 = "txq0@%s-q1;txq1@%s-q1;rxq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q1;txq1@%s-q1;rxq1@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -437,8 +433,8 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=2",
-            self.use_dsa_list[1]: "max_queues=2",
+            dsas[0]: "max_queues=2",
+            dsas[1]: "max_queues=2",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -446,7 +442,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
         self.start_pdump_to_capture_pkt()
@@ -461,16 +457,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 3: VM2VM split ring inorder mergeable path and multi-queues test non-indirect descriptor and payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -479,14 +475,14 @@ class TestVM2VMVirtioUserDsa(TestCase):
         )
 
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=256 --rxd=256 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             iova_mode="va",
         )
 
@@ -514,16 +510,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.virtio_user1_pmd.execute_cmd("quit", "#", 60)
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         dmas1 = "txq0@%s-q0;txq1@%s-q1;rxq0@%s-q2;rxq1@%s-q3" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;txq1@%s-q1;rxq1@%s-q2;rxq1@%s-q3" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -531,8 +527,8 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=4",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=4",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -540,7 +536,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
         self.start_virtio_testpmd_with_vhost_net1(
@@ -565,16 +561,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 4: VM2VM split ring mergeable path and multi-queues test indirect descriptor and payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -582,14 +578,14 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=256 --rxd=256 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=1"}
+        port_options = {dsas[0]: "max_queues=1"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             iova_mode="va",
         )
         virtio1_eal_param = "--vdev=net_virtio_user1,mac=00:01:02:03:04:05,path=./vhost-net1,queues=2,server=1,mrg_rxbuf=1,in_order=0,queue_size=256"
@@ -616,16 +612,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.virtio_user1_pmd.execute_cmd("quit", "#", 60)
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         dmas1 = "txq0@%s-q0;txq1@%s-q1;rxq0@%s-q2;rxq1@%s-q3" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;txq1@%s-q1;rxq1@%s-q2;rxq1@%s-q3" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -633,8 +629,8 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=4",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=4",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -642,7 +638,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
         self.start_virtio_testpmd_with_vhost_net1(
@@ -667,18 +663,18 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 5: VM2VM split ring vectorized path and multi-queues payload check with vhost async operation and dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;rxq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q1;rxq0@%s-q1;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -692,7 +688,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
 
@@ -722,16 +718,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         self.clear_virtio_user1_stats()
         dmas1 = "txq0@%s-q3;txq1@%s-q3;rxq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[0],
+            dsas[0],
+            dsas[1],
+            dsas[1],
         )
         dmas2 = "txq0@%s-q1;txq1@%s-q1;rxq1@%s-q3;rxq1@%s-q3" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[1],
+            dsas[1],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -739,8 +735,8 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=4",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=4",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -748,7 +744,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
         self.start_pdump_to_capture_pkt()
@@ -763,16 +759,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 6: VM2VM packed ring non-mergeable path and multi-queues payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -786,7 +782,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
 
@@ -816,16 +812,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         self.clear_virtio_user1_stats()
         dmas1 = "txq0@%s-q0;txq1@%s-q1;rxq0@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;txq1@%s-q1;rxq1@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -833,8 +829,8 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=4",
-            self.use_dsa_list[1]: "max_queues=4",
+            dsas[0]: "max_queues=4",
+            dsas[1]: "max_queues=4",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -842,7 +838,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             iova_mode="va",
         )
         self.start_pdump_to_capture_pkt()
@@ -857,16 +853,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 7: VM2VM packed ring inorder non-mergeable path and multi-queues payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -876,8 +872,8 @@ class TestVM2VMVirtioUserDsa(TestCase):
 
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         port_options = {
-            self.use_dsa_list[0]: "max_queues=2",
-            self.use_dsa_list[1]: "max_queues=2",
+            dsas[0]: "max_queues=2",
+            dsas[1]: "max_queues=2",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
@@ -885,7 +881,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
 
@@ -915,16 +911,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         self.clear_virtio_user1_stats()
         dmas1 = "txq0@%s-q5;txq1@%s-q6;rxq0@%s-q5;rxq1@%s-q6" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q5;txq1@%s-q6;rxq1@%s-q5;rxq1@%s-q6" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -936,7 +932,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
         self.start_pdump_to_capture_pkt()
@@ -951,16 +947,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 8: VM2VM packed ring mergeable path and multi-queues payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -969,14 +965,14 @@ class TestVM2VMVirtioUserDsa(TestCase):
         )
 
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=1"}
+        port_options = {dsas[0]: "max_queues=1"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
             port_options=port_options,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             iova_mode="va",
         )
 
@@ -1006,16 +1002,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         self.clear_virtio_user1_stats()
         dmas1 = "txq0@%s-q0;txq1@%s-q1;rxq0@%s-q2;rxq1@%s-q3" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q4;txq1@%s-q5;rxq1@%s-q6;rxq1@%s-q7" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1027,7 +1023,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             iova_mode="va",
         )
         self.start_pdump_to_capture_pkt()
@@ -1042,18 +1038,18 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 9: VM2VM packed ring inorder mergeable path and multi-queues payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;rxq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;txq1@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1067,7 +1063,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
 
@@ -1097,16 +1093,16 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         self.clear_virtio_user1_stats()
         dmas1 = "txq0@%s-q0;txq1@%s-q1;rxq0@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;txq1@%s-q1;rxq1@%s-q0;rxq1@%s-q1" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1118,7 +1114,7 @@ class TestVM2VMVirtioUserDsa(TestCase):
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             iova_mode="va",
         )
         self.start_pdump_to_capture_pkt()
@@ -1133,20 +1129,20 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 10: VM2VM packed ring vectorized-tx path and multi-queues test indirect descriptor and payload check with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;txq1@%s-q0;rxq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q1;txq1@%s-q1;rxq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1155,13 +1151,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         )
 
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=256 --rxd=256 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
             iova_mode="va",
         )
@@ -1193,14 +1189,14 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.virtio_user1_pmd.execute_cmd("quit", "#", 60)
         self.vhost_user_pmd.execute_cmd("quit", "#", 60)
         dmas1 = "txq0@%s-q0;txq1@%s-q1;rxq0@%s-q2;rxq1@%s-q3" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;txq1@%s-q1" % (
-            self.use_dsa_list[1],
-            self.use_dsa_list[1],
+            dsas[1],
+            dsas[1],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1208,15 +1204,15 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         port_options = {
-            self.use_dsa_list[0]: "max_queues=4",
-            self.use_dsa_list[1]: "max_queues=2",
+            dsas[0]: "max_queues=4",
+            dsas[1]: "max_queues=2",
         }
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -1242,20 +1238,20 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 11: VM2VM packed ring vectorized path and payload check test with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;txq1@%s-q0;rxq0@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q1;txq1@%s-q1;rxq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1264,13 +1260,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         )
 
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
             iova_mode="va",
         )
@@ -1304,20 +1300,20 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 12: VM2VM packed ring vectorized path payload check test with ring size is not power of 2 with dsa dpdk driver
         """
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=2, driver_name="vfio-pci", socket=self.port_socket
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=2, driver_name="vfio-pci", socket=self.port_socket
         )
         dmas1 = "txq0@%s-q0;txq1@%s-q0;rxq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         dmas2 = "txq0@%s-q0;txq1@%s-q0;rxq0@%s-q1;rxq1@%s-q1" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1326,13 +1322,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         )
 
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=2"}
+        port_options = {dsas[0]: "max_queues=2"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list[0:1],
+            ports=dsas[0:1],
             port_options=port_options,
             iova_mode="va",
         )
@@ -1366,10 +1362,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 13: VM2VM split ring non-mergeable path and multi-queues payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas1 = "txq0@%s;rxq1@%s" % (wqs[0], wqs[0])
+        dmas2 = "txq0@%s;rxq1@%s" % (wqs[1], wqs[1])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;rxq1@wq0.0]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq0.1;rxq1@wq0.1]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1409,10 +1408,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 14: VM2VM split ring inorder non-mergeable path and multi-queues payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
+        dmas1 = "txq0@%s;rxq1@%s" % (wqs[0], wqs[1])
+        dmas2 = "txq0@%s;rxq1@%s" % (wqs[2], wqs[3])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;rxq1@wq0.1]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq0.2;rxq1@wq0.3]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1452,10 +1454,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 15: VM2VM split ring inorder mergeable path and multi-queues test non-indirect descriptor and payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
+        dmas1 = "txq0@%s;rxq1@%s" % (wqs[0], wqs[1])
+        dmas2 = "txq0@%s;rxq1@%s" % (wqs[2], wqs[3])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;rxq1@wq0.1]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq0.2;rxq1@wq0.3]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=256 --rxd=256 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1495,10 +1500,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 16: VM2VM split ring mergeable path and multi-queues test indirect descriptor and payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas1 = "txq0@%s;txq1@%s;rxq0@%s;rxq0@%s" % (wqs[0], wqs[0], wqs[0], wqs[0])
+        dmas2 = "txq0@%s;txq1@%s;rxq0@%s;rxq0@%s" % (wqs[1], wqs[1], wqs[1], wqs[1])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;txq1@wq0.0;rxq0@wq0.0;rxq0@wq0.0]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq0.1;txq1@wq0.1;rxq0@wq0.1;rxq0@wq0.1]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=256 --rxd=256 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1538,10 +1546,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 17: VM2VM split ring vectorized path and multi-queues payload check with vhost async operation and dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=4, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=4, dsa_idxs=[0])
+        dmas1 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[0], wqs[0], wqs[0])
+        dmas2 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[0], wqs[0], wqs[0])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;txq1@wq0.0;rxq0@wq0.0;rxq1@wq0.0]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq0.0;txq1@wq0.0;rxq0@wq0.0;rxq1@wq0.0]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1581,10 +1592,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 18: VM2VM packed ring non-mergeable path and multi-queues payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas1 = "txq0@%s;rxq1@%s" % (wqs[0], wqs[0])
+        dmas2 = "txq0@%s;rxq1@%s" % (wqs[1], wqs[1])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;rxq1@wq0.0]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq0.1;rxq1@wq0.1]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1624,11 +1638,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 19: VM2VM packed ring inorder non-mergeable path and multi-queues payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0, 1])
+        dmas1 = "txq0@%s;rxq1@%s" % (wqs[0], wqs[1])
+        dmas2 = "txq0@%s;rxq1@%s" % (wqs[2], wqs[3])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;rxq1@wq0.1]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq1.0;rxq1@wq1.1]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1668,10 +1684,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 20: VM2VM packed ring mergeable path and multi-queues payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dmas1 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[0], wqs[1], wqs[1])
+        dmas2 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[1], wqs[1], wqs[0], wqs[0])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;txq1@wq0.0;rxq0@wq0.1;rxq1@wq0.1]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq0.1;txq1@wq0.1;rxq0@wq0.0;rxq1@wq0.0]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1711,11 +1730,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 21: VM2VM packed ring inorder mergeable path and multi-queues payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=1, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=1, dsa_idxs=[0, 1])
+        dmas1 = "txq0@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[0], wqs[0])
+        dmas2 = "txq0@%s;txq1@%s;rxq1@%s" % (wqs[1], wqs[1], wqs[1])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;rxq0@wq0.0;rxq1@wq0.0]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq1.0;txq1@wq1.0;rxq1@wq1.0]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1755,11 +1776,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 22: VM2VM packed ring vectorized-tx path and multi-queues test indirect descriptor and payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0, 1])
+        dmas1 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[0], wqs[1], wqs[1])
+        dmas2 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[2], wqs[2], wqs[3], wqs[3])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;txq1@wq0.0;rxq0@wq0.1;rxq1@wq0.1]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq1.0;txq1@wq1.0;rxq0@wq1.1;rxq1@wq1.1]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1799,11 +1822,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 23: VM2VM packed ring vectorized path and multi-queues test indirect descriptor and payload check with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0, 1])
+        dmas1 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[0], wqs[1], wqs[1])
+        dmas2 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[2], wqs[2], wqs[3], wqs[3])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;txq1@wq0.0;rxq0@wq0.1;rxq1@wq0.1]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq1.0;txq1@wq1.0;rxq0@wq1.1;rxq1@wq1.1]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1843,11 +1868,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 24: VM2VM packed ring vectorized path payload check test with ring size is not power of 2 with dsa kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=1)
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0, 1])
+        dmas1 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[0], wqs[1], wqs[1])
+        dmas2 = "txq0@%s;txq1@%s;rxq0@%s;rxq1@%s" % (wqs[2], wqs[2], wqs[3], wqs[3])
         vhost_eal_param = (
-            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[txq0@wq0.0;txq1@wq0.0;rxq0@wq0.1;rxq1@wq0.1]' "
-            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[txq0@wq1.0;txq1@wq1.0;rxq0@wq1.1;rxq1@wq1.1]'"
+            "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
+            "--vdev 'eth_vhost1,iface=vhost-net1,queues=2,client=1,dmas=[%s]'"
+            % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
         self.start_vhost_testpmd(
@@ -1887,18 +1914,18 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 25: VM2VM split ring mergeable path and multi-queues test indirect descriptor with dsa dpdk and kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1,
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1,
             driver_name="vfio-pci",
-            dsa_index_list=[1],
+            dsa_idxs=[1],
             socket=self.port_socket,
         )
-        dmas1 = "txq0@wq0.0;rxq0@wq0.0;rxq1@wq0.0"
+        dmas1 = "txq0@%s;rxq0@%s;rxq1@%s" % (wqs[0], wqs[0], wqs[0])
         dmas2 = "txq0@%s-q0;txq1@%s-q0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+            dsas[0],
+            dsas[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1906,13 +1933,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=256 --rxd=256 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=1"}
+        port_options = {dsas[0]: "max_queues=1"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -1946,20 +1973,24 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 26: VM2VM packed ring inorder mergeable path and multi-queues payload check with dsa dpdk and kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1,
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1,
             driver_name="vfio-pci",
-            dsa_index_list=[1],
+            dsa_idxs=[1],
             socket=self.port_socket,
         )
-        dmas1 = "txq0@%s-q0;txq1@wq0.0;rxq0@%s-q0;rxq1@wq0.0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+        dmas1 = "txq0@%s-q0;txq1@%s;rxq0@%s-q0;rxq1@%s" % (
+            dsas[0],
+            wqs[0],
+            dsas[0],
+            wqs[0],
         )
-        dmas2 = "txq0@wq0.0;txq1@%s-q0;rxq0@wq0.0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+        dmas2 = "txq0@%s;txq1@%s-q0;rxq0@%s;rxq1@%s-q0" % (
+            wqs[0],
+            dsas[0],
+            wqs[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -1967,13 +1998,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=1"}
+        port_options = {dsas[0]: "max_queues=1"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -2007,20 +2038,24 @@ class TestVM2VMVirtioUserDsa(TestCase):
         """
         Test Case 27: VM2VM packed ring vectorized-tx path test batch processing with dsa dpdk and kernel driver
         """
-        self.DC.create_work_queue(work_queue_number=2, dsa_index=0)
-        self.use_dsa_list = self.DC.bind_dsa_to_dpdk(
-            dsa_number=1,
+        wqs = self.DC.create_wq(wq_num=2, dsa_idxs=[0])
+        dsas = self.DC.bind_dsa_to_dpdk_driver(
+            dsa_num=1,
             driver_name="vfio-pci",
-            dsa_index_list=[1],
+            dsa_idxs=[1],
             socket=self.port_socket,
         )
-        dmas1 = "txq0@%s-q0;txq1@wq0.0;rxq0@%s-q0;rxq1@wq0.0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+        dmas1 = "txq0@%s-q0;txq1@%s;rxq0@%s-q0;rxq1@%s" % (
+            dsas[0],
+            wqs[0],
+            dsas[0],
+            wqs[0],
         )
-        dmas2 = "txq0@wq0.0;txq1@%s-q0;rxq0@wq0.0;rxq1@%s-q0" % (
-            self.use_dsa_list[0],
-            self.use_dsa_list[0],
+        dmas2 = "txq0@%s;txq1@%s-q0;rxq0@%s;rxq1@%s-q0" % (
+            wqs[0],
+            dsas[0],
+            wqs[0],
+            dsas[0],
         )
         vhost_eal_param = (
             "--vdev 'eth_vhost0,iface=vhost-net0,queues=2,client=1,dmas=[%s]' "
@@ -2028,13 +2063,13 @@ class TestVM2VMVirtioUserDsa(TestCase):
             % (dmas1, dmas2)
         )
         vhost_param = "--nb-cores=1 --rxq=2 --txq=2 --txd=4096 --rxd=4096 --no-flush-rx"
-        port_options = {self.use_dsa_list[0]: "max_queues=1"}
+        port_options = {dsas[0]: "max_queues=1"}
         self.start_vhost_testpmd(
             cores=self.vhost_core_list,
             eal_param=vhost_eal_param,
             param=vhost_param,
             no_pci=False,
-            ports=self.use_dsa_list,
+            ports=dsas,
             port_options=port_options,
             iova_mode="va",
         )
@@ -2072,8 +2107,6 @@ class TestVM2VMVirtioUserDsa(TestCase):
         self.quit_all_testpmd()
         self.dut.send_expect("killall -s INT %s" % self.testpmd_name, "#")
         self.dut.send_expect("killall -s INT %s" % self.pdump_name, "#")
-        self.DC.reset_all_work_queue()
-        self.DC.bind_all_dsa_to_kernel()
 
     def tear_down_all(self):
         pass
diff --git a/tests/virtio_common.py b/tests/virtio_common.py
index 9ad75448..9754f49e 100644
--- a/tests/virtio_common.py
+++ b/tests/virtio_common.py
@@ -237,90 +237,123 @@ class dsa_common(object):
     def __init__(self, test_case):
         self.test_case = test_case
 
-    def get_all_work_queue_index(self):
+    def get_all_dsa_pcis(self):
+        """
+        Get all the DSA device PCI of DUT.
+        :return: [0000:6a:01.0, 0000:6f:01.0, 0000:74:01.0, 0000:79:01.0]
+        """
+        dsa_pcis = []
+        out = self.test_case.dut.send_expect(
+            "./usertools/dpdk-devbind.py --status-dev dma", "#"
+        )
+        info = out.split("\n")
+        for item in info:
+            pci = re.search("\s*(0000:\S*:\d*.\d*)", item)
+            if pci is not None:
+                dsa_pcis.append(pci.group(1))
+        dsa_pcis.sort()
+        return dsa_pcis
+
+    def bind_dsa_to_kernel_driver(self, dsa_idx):
+        """
+        Get the DSA device current driver
+        """
+        dsa_pcis = self.get_all_dsa_pcis()
+        pci = dsa_pcis[dsa_idx]
+        addr_array = pci.split(":")
+        domain_id, bus_id, devfun_id = addr_array[0], addr_array[1], addr_array[2]
+        out = self.test_case.dut.send_expect(
+            "cat /sys/bus/pci/devices/%s\:%s\:%s/uevent"
+            % (domain_id, bus_id, devfun_id),
+            "# ",
+            alt_session=True,
+        )
+        rexp = r"DRIVER=(.+?)\r"
+        pattern = re.compile(rexp)
+        match = pattern.search(out)
+        if not match:
+            driver = None
+        else:
+            driver = match.group(1)
+        if driver != "idxd":
+            self.test_case.dut.send_expect(
+                "./usertools/dpdk-devbind.py --force --bind=idxd %s" % pci, "# ", 60
+            )
+
+    def get_all_dsa_idxs(self):
         """
         Get all DSA device work queue index.
         Example: `wq0.0 wq0.1 wq1.0 wq1.1`, return [0, 1]
         """
-        dsa_index_list = []
+        dsa_idxs = []
         if os.path.exists("/dev/dsa"):
             out = self.test_case.dut.send_expect("ls /dev/dsa", "# ")
             info = out.split()
             for item in info:
-                index = int(re.search("(\d+)", item).group(0))
-                dsa_index_list.append(index)
-        return list(set(dsa_index_list))
-
-    def reset_all_work_queue(self):
-        """
-        Reset all DSA device work queue which have created work queue.
-        After reset all DSA device work queues, the `/dev/dsa/` path will not exist.
-        """
-        dsa_index_list = self.get_all_work_queue_index()
-        if len(dsa_index_list) > 0:
-            for dsa_index in dsa_index_list:
-                self.test_case.dut.send_expect(
-                    "./drivers/dma/idxd/dpdk_idxd_cfg.py --reset %s" % dsa_index, "# "
-                )
+                idx = int(re.search("(\d+)", item).group(0))
+                dsa_idxs.append(idx)
+        return list(set(dsa_idxs))
 
-    def check_dsa_has_work_queue(self, dsa_index):
+    def check_wq_exist(self, dsa_idx):
         """
         Check DSA device has work queue or not, if has work queue, return True, or return False
         """
-        if dsa_index in self.get_all_work_queue_index():
+        if dsa_idx in self.get_all_dsa_idxs():
             return True
         else:
             return False
 
-    def create_work_queue(self, work_queue_number, dsa_index):
+    def reset_wq(self, dsa_idx):
         """
-        Create work queue by work_queue_number and dsa_index.
-        :param work_queue_number: number of work queue to be create.
-        :param dsa_index: index of DSA device which to create work queue.
-        Example: work_queue_number=4, dsa_index=0, will create 4 work queue under this first DSA device
-        root@dpdk:~# ls /dev/dsa/
-        wq0.0  wq0.1  wq0.2  wq0.3
+        Reset DSA device work queue which have created work queue.
         """
-        if self.check_dsa_has_work_queue(dsa_index=dsa_index):
+        if self.check_wq_exist(dsa_idx):
             self.test_case.dut.send_expect(
-                "./drivers/dma/idxd/dpdk_idxd_cfg.py --reset %s" % dsa_index, "# "
+                "./drivers/dma/idxd/dpdk_idxd_cfg.py --reset %s" % dsa_idx, "# "
             )
-        self.test_case.dut.send_expect(
-            "./drivers/dma/idxd/dpdk_idxd_cfg.py -q %d %d"
-            % (work_queue_number, dsa_index),
-            "# ",
-        )
 
-    def get_all_dsa_pci(self):
+    def create_wq(self, wq_num, dsa_idxs):
         """
-        Get all the DSA device PCI of DUT.
-        :return: [0000:6a:01.0, 0000:6f:01.0, 0000:74:01.0, 0000:79:01.0]
+        Create work queue by work_queue_number and dsa_idx.
+        :param wq_num: number of work queue to be create.
+        :param dsa_idxs: index of DSA device which to create work queue.
+        Example: wq_num=4, dsa_idx=[0, 1], will create 4 work queue:
+        root@dpdk:~# ls /dev/dsa/
+        wq0.0  wq0.1  wq1.0  wq1.1
         """
-        dsa_pci = []
-        out = self.test_case.dut.send_expect(
-            "./usertools/dpdk-devbind.py --status-dev dma", "#"
-        )
-        info = out.split("\n")
-        for item in info:
-            pci = re.search("\s*(0000:\S*:\d*.\d*)", item)
-            if pci is not None:
-                dsa_pci.append(pci.group(1))
-        return dsa_pci
+        for dsa_idx in dsa_idxs:
+            if self.check_wq_exist(dsa_idx):
+                self.reset_wq(dsa_idx)
+            self.bind_dsa_to_kernel_driver(dsa_idx)
+            self.test_case.dut.send_expect(
+                "./drivers/dma/idxd/dpdk_idxd_cfg.py -q %d %d" % (wq_num, dsa_idx),
+                "# ",
+            )
+        wqs = []
+        if os.path.exists("/dev/dsa"):
+            out = self.test_case.dut.send_expect("ls /dev/dsa", "# ")
+            info = out.split()
+            for item in info:
+                idx = int(re.search("(\d+)", item).group(0))
+                if idx in dsa_idxs:
+                    wqs.append(item)
+        return wqs
 
-    def bind_dsa_to_dpdk(
-        self, dsa_number, driver_name="vfio-pci", dsa_index_list="all", socket=-1
+    def bind_dsa_to_dpdk_driver(
+        self, dsa_num, driver_name="vfio-pci", dsa_idxs="all", socket=-1
     ):
         """
         Bind DSA device to driver
-        :param dsa_number: number of DSA device to be bind.
+        :param dsa_num: number of DSA device to be bind.
         :param driver_name: driver name, like `vfio-pci`.
-        :param dsa_index_list: the index list of DSA device, like [2,3]
+        :param dsa_idxs: the index list of DSA device, like [2,3]
         :param socket: socket id: like 0 or 1, if socket=-1, use all the DSA deveice no matter on which socket.
         :return: bind_dsa_list, like [0000:6a:01.0, 0000:6f:01.0]
         """
-        dsa_list = []
-        dsa_pci = self.get_all_dsa_pci()
-        for pci in dsa_pci:
+        dsas = []
+        bind_dsas = []
+        dsa_pcis = self.get_all_dsa_pcis()
+        for pci in dsa_pcis:
             addr_array = pci.split(":")
             domain_id, bus_id, devfun_id = addr_array[0], addr_array[1], addr_array[2]
             cur_socket = self.test_case.dut.send_expect(
@@ -331,47 +364,21 @@ class dsa_common(object):
             )
             if socket != -1:
                 if int(cur_socket) == socket:
-                    dsa_list.append(pci)
+                    dsas.append(pci)
             else:
-                dsa_list.append(pci)
-        if dsa_index_list == "all":
-            bind_dsa_list = dsa_list[0:dsa_number]
+                dsas.append(pci)
+        if dsa_idxs == "all":
+            bind_dsas = dsas[0:dsa_num]
         else:
-            tmp_dsa_list = []
-            for i in dsa_index_list:
-                tmp_dsa_list.append(dsa_list[i])
-            bind_dsa_list = tmp_dsa_list[0:dsa_number]
-        bind_dsa_string = " ".join(bind_dsa_list)
+            tmp_dsas = []
+            for i in dsa_idxs:
+                tmp_dsas.append(dsas[i])
+                bind_dsas = tmp_dsas[0:dsa_num]
+        bind_dsas_str = " ".join(bind_dsas)
         self.test_case.dut.send_expect(
             "./usertools/dpdk-devbind.py --force --bind=%s %s"
-            % (driver_name, bind_dsa_string),
+            % (driver_name, bind_dsas_str),
             "# ",
             60,
         )
-        return bind_dsa_list
-
-    def bind_all_dsa_to_kernel(self):
-        """
-        Check the DSA device is bind to kernel driver or not, if not bind to kernel driver, then bind to kernel driver.
-        """
-        dsa_pci = self.get_all_dsa_pci()
-        for pci in dsa_pci:
-            addr_array = pci.split(":")
-            domain_id, bus_id, devfun_id = addr_array[0], addr_array[1], addr_array[2]
-            out = self.test_case.dut.send_expect(
-                "cat /sys/bus/pci/devices/%s\:%s\:%s/uevent"
-                % (domain_id, bus_id, devfun_id),
-                "# ",
-                alt_session=True,
-            )
-            rexp = r"DRIVER=(.+?)\r"
-            pattern = re.compile(rexp)
-            match = pattern.search(out)
-            if not match:
-                driver = None
-            else:
-                driver = match.group(1)
-            if driver != "idxd":
-                self.test_case.dut.send_expect(
-                    "./usertools/dpdk-devbind.py --force --bind=idxd %s" % pci, "# ", 60
-                )
+        return bind_dsas
