diff --git a/framework/crb.py b/framework/crb.py
index 40fe4fd1..9b0742ba 100644
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -204,24 +204,23 @@ class Crb(object):
         else:
             return ''
 
-    def set_huge_pages(self, huge_pages, numa=-1):
+    def set_huge_pages(self, huge_pages, numa=""):
         """
         Set numbers of huge pages
         """
         page_size = self.send_expect("awk '/Hugepagesize/ {print $2}' /proc/meminfo", "# ")
 
-        if numa == -1:
+        if not numa:
             self.send_expect('echo %d > /sys/kernel/mm/hugepages/hugepages-%skB/nr_hugepages' % (huge_pages, page_size), '# ', 5)
         else:
-            # sometimes we set hugepage on kernel cmdline, so we clear all nodes' default hugepages at the first time.
-            if numa == 0:
-                self.send_expect('echo 0 > /sys/kernel/mm/hugepages/hugepages-%skB/nr_hugepages' % (page_size), '# ', 5)
+            # sometimes we set hugepage on kernel cmdline, so we clear it
+            self.send_expect('echo 0 > /sys/kernel/mm/hugepages/hugepages-%skB/nr_hugepages' % (page_size), '# ', 5)
 
             # some platform not support numa, example vm dut
             try:
-                self.send_expect('echo %d > /sys/devices/system/node/node%d/hugepages/hugepages-%skB/nr_hugepages' % (huge_pages, numa, page_size), '# ', 5)
+                self.send_expect('echo %d > /sys/devices/system/node/%s/hugepages/hugepages-%skB/nr_hugepages' % (huge_pages, numa, page_size), '# ', 5)
             except:
-                self.logger.warning("set %d hugepage on socket %d error" % (huge_pages, numa))
+                self.logger.warning("set %d hugepage on %s error" % (huge_pages, numa))
                 self.send_expect('echo %d > /sys/kernel/mm/hugepages/hugepages-%skB/nr_hugepages' % (huge_pages. page_size), '# ', 5)
 
     def set_speedup_options(self, read_cache, skip_setup):
diff --git a/framework/dut.py b/framework/dut.py
index f5481d06..5c9a6b23 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -547,16 +547,15 @@ class Dut(Crb):
             return
         hugepages_size = self.send_expect("awk '/Hugepagesize/ {print $2}' /proc/meminfo", "# ")
         total_huge_pages = self.get_total_huge_pages()
-        total_numa_nodes = self.send_expect("ls /sys/devices/system/node | grep node* | wc -l", "# ")
-        numa_service_num = self.get_def_rte_config('CONFIG_RTE_MAX_NUMA_NODES')
-        try:
-            int(total_numa_nodes)
-        except ValueError:
+        numa_nodes = self.send_expect("ls /sys/devices/system/node | grep node*", "# ")
+        if not numa_nodes:
             total_numa_nodes = -1
-        if numa_service_num is not None:
-            numa = min(int(total_numa_nodes), int(numa_service_num))
         else:
-            numa = total_numa_nodes
+            numa_nodes = numa_nodes.splitlines()
+            total_numa_nodes = len(numa_nodes)
+            self.logger.info(numa_nodes)
+
+
         force_socket = False
 
         if int(hugepages_size) < (1024 * 1024):
@@ -580,14 +579,21 @@ class Dut(Crb):
             if total_huge_pages != arch_huge_pages:
                 # before all hugepage average distribution  by all socket,
                 # but sometimes create mbuf pool on socket 0 failed when setup testpmd,
-                # so set all huge page on socket 0
+                # so set all huge page on first socket
                 if force_socket:
-                    self.set_huge_pages(arch_huge_pages, 0)
+                    self.set_huge_pages(arch_huge_pages, numa_nodes[0])
+                    self.logger.info("force_socket on %s" % numa_nodes[0])
                 else:
-                    for numa_id in range(0, int(numa)):
-                        self.set_huge_pages(arch_huge_pages, numa_id)
-                    if numa == -1:
+                    if total_numa_nodes == -1:
                         self.set_huge_pages(arch_huge_pages)
+                    else:
+                        numa_service_num = self.get_def_rte_config('CONFIG_RTE_MAX_NUMA_NODES')
+                        if numa_service_num is not None:
+                            total_numa_nodes = min(total_numa_nodes, int(numa_service_num))
+
+                        # set huge pages to configured total_numa_nodes
+                        for numa_node in numa_nodes[:total_numa_nodes]:
+                            self.set_huge_pages(arch_huge_pages, numa_node)
 
         self.mount_huge_pages()
         self.hugepage_path = self.strip_hugepage_path()
