test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH] framework/dut: setup hugepage for all available NUMA nodes
@ 2018-08-27  1:16 Phil Yang
  2018-08-27  5:27 ` Liu, Yong
  2018-08-28  1:59 ` [dts] [PATCH v2] framework/dut: setup hugepage for all available numa nodes Phil Yang
  0 siblings, 2 replies; 8+ messages in thread
From: Phil Yang @ 2018-08-27  1:16 UTC (permalink / raw)
  To: dts; +Cc: nd

On a NUMA machine, we need to setup hugepage for all NUMA nodes.

The default approach is by setting /sys/kernel/mm/hugepages, but it
only works on a single-node system.

This fix needs numactl tool support on Linux.

Signed-off-by: Phil Yang <phil.yang@arm.com>
---
 framework/crb.py | 6 ++++--
 framework/dut.py | 9 ++++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/framework/crb.py b/framework/crb.py
index 5c555db..97bebfe 100644
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -204,8 +204,10 @@ class Crb(object):
         if numa == -1:
             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 need clear default hugepage
-            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 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)
+
             # 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)
diff --git a/framework/dut.py b/framework/dut.py
index 18f0b39..b358578 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -305,6 +305,12 @@ 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("numactl -H | awk '/available/ {print $2}'", "# ")
+        numa_service_num = self.get_def_rte_config('CONFIG_RTE_MAX_NUMA_NODES')
+        if numa_service_num:
+            numa = min(total_numa_nodes, numa_service_num)
+        else:
+            numa = total_numa_nodes
         force_socket = False
 
         if int(hugepages_size) < (1024 * 1024):
@@ -332,7 +338,8 @@ class Dut(Crb):
                 if force_socket:
                     self.set_huge_pages(arch_huge_pages, 0)
                 else:
-                    self.set_huge_pages(arch_huge_pages)
+                    for numa_id in range(0, int(numa)):
+                        self.set_huge_pages(arch_huge_pages, numa_id)
 
         self.mount_huge_pages()
         self.hugepage_path = self.strip_hugepage_path()
-- 
2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dts] [PATCH] framework/dut: setup hugepage for all available NUMA nodes
  2018-08-27  1:16 [dts] [PATCH] framework/dut: setup hugepage for all available NUMA nodes Phil Yang
@ 2018-08-27  5:27 ` Liu, Yong
  2018-08-28  2:00   ` Phil Yang
  2018-08-28  1:59 ` [dts] [PATCH v2] framework/dut: setup hugepage for all available numa nodes Phil Yang
  1 sibling, 1 reply; 8+ messages in thread
From: Liu, Yong @ 2018-08-27  5:27 UTC (permalink / raw)
  To: dts, dts; +Cc: nd

Hi Phil,
One comment is inline.

Thanks,
Marvin

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org]
> Sent: Monday, August 27, 2018 9:16 AM
> To: dts@dpdk.org
> Cc: nd@arm.com
> Subject: [dts] [PATCH] framework/dut: setup hugepage for all available NUMA
> nodes
> 
> On a NUMA machine, we need to setup hugepage for all NUMA nodes.
> 
> The default approach is by setting /sys/kernel/mm/hugepages, but it
> only works on a single-node system.
> 
> This fix needs numactl tool support on Linux.
> 
> Signed-off-by: Phil Yang <phil.yang@arm.com>
> ---
>  framework/crb.py | 6 ++++--
>  framework/dut.py | 9 ++++++++-
>  2 files changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/framework/crb.py b/framework/crb.py
> index 5c555db..97bebfe 100644
> --- a/framework/crb.py
> +++ b/framework/crb.py
> @@ -204,8 +204,10 @@ class Crb(object):
>          if numa == -1:
>              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 need clear
> default hugepage
> -            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 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)
> +
>              # 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)
> diff --git a/framework/dut.py b/framework/dut.py
> index 18f0b39..b358578 100644
> --- a/framework/dut.py
> +++ b/framework/dut.py
> @@ -305,6 +305,12 @@ 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("numactl -H | awk '/available/
> {print $2}'", "# ")

We may not expect that numactl is installed on the DUT. It will be more portable by checking sysfs like "ls /sys/devices/system/node | grep node* | wc -l".

> +        numa_service_num =
> self.get_def_rte_config('CONFIG_RTE_MAX_NUMA_NODES')
> +        if numa_service_num:
> +            numa = min(total_numa_nodes, numa_service_num)
> +        else:
> +            numa = total_numa_nodes
>          force_socket = False
> 
>          if int(hugepages_size) < (1024 * 1024):
> @@ -332,7 +338,8 @@ class Dut(Crb):
>                  if force_socket:
>                      self.set_huge_pages(arch_huge_pages, 0)
>                  else:
> -                    self.set_huge_pages(arch_huge_pages)
> +                    for numa_id in range(0, int(numa)):
> +                        self.set_huge_pages(arch_huge_pages, numa_id)
> 
>          self.mount_huge_pages()
>          self.hugepage_path = self.strip_hugepage_path()
> --
> 2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dts] [PATCH v2] framework/dut: setup hugepage for all available numa nodes
  2018-08-27  1:16 [dts] [PATCH] framework/dut: setup hugepage for all available NUMA nodes Phil Yang
  2018-08-27  5:27 ` Liu, Yong
@ 2018-08-28  1:59 ` Phil Yang
  2018-08-28  3:08   ` [dts] [PATCH v3] " Phil Yang
  1 sibling, 1 reply; 8+ messages in thread
From: Phil Yang @ 2018-08-28  1:59 UTC (permalink / raw)
  To: dts; +Cc: nd, yong.liu, Phil Yang

From: Phil Yang <phil.yang@arm.com>

On a NUMA machine, we need to setup hugepage for all NUMA nodes.

The default approach is by setting /sys/kernel/mm/hugepages, but it
only works on a single-node system.

Signed-off-by: Phil Yang <phil.yang@arm.com>
---
 framework/crb.py | 6 ++++--
 framework/dut.py | 9 ++++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/framework/crb.py b/framework/crb.py
index 5c555db..97bebfe 100644
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -204,8 +204,10 @@ class Crb(object):
         if numa == -1:
             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 need clear default hugepage
-            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 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)
+
             # 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)
diff --git a/framework/dut.py b/framework/dut.py
index 18f0b39..3e21509 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -305,6 +305,12 @@ 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')
+        if numa_service_num:
+            numa = min(total_numa_nodes, numa_service_num)
+        else:
+            numa = total_numa_nodes
         force_socket = False
 
         if int(hugepages_size) < (1024 * 1024):
@@ -332,7 +338,8 @@ class Dut(Crb):
                 if force_socket:
                     self.set_huge_pages(arch_huge_pages, 0)
                 else:
-                    self.set_huge_pages(arch_huge_pages)
+                    for numa_id in range(0, int(numa)):
+                        self.set_huge_pages(arch_huge_pages, numa_id)
 
         self.mount_huge_pages()
         self.hugepage_path = self.strip_hugepage_path()
-- 
2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dts] [PATCH] framework/dut: setup hugepage for all available NUMA nodes
  2018-08-27  5:27 ` Liu, Yong
@ 2018-08-28  2:00   ` Phil Yang
  2018-08-28  2:57     ` Liu, Yong
  0 siblings, 1 reply; 8+ messages in thread
From: Phil Yang @ 2018-08-28  2:00 UTC (permalink / raw)
  To: Liu, Yong, dts, dts; +Cc: nd

Hi Marvin,

Thanks for your comment. 
I reworked this patch, please review it.

Thanks,
Phil Yang

> -----Original Message-----
> From: dts <dts-bounces@dpdk.org> On Behalf Of Liu, Yong
> Sent: Monday, August 27, 2018 1:28 PM
> To: dts <dts-bounces@dpdk.org>; dts@dpdk.org
> Cc: nd <nd@arm.com>
> Subject: Re: [dts] [PATCH] framework/dut: setup hugepage for all available
> NUMA nodes
> 
> Hi Phil,
> One comment is inline.
> 
> Thanks,
> Marvin
> 
> > -----Original Message-----
> > From: dts [mailto:dts-bounces@dpdk.org]
> > Sent: Monday, August 27, 2018 9:16 AM
> > To: dts@dpdk.org
> > Cc: nd@arm.com
> > Subject: [dts] [PATCH] framework/dut: setup hugepage for all available
> > NUMA nodes
> >
> > On a NUMA machine, we need to setup hugepage for all NUMA nodes.
> >
> > The default approach is by setting /sys/kernel/mm/hugepages, but it
> > only works on a single-node system.
> >
> > This fix needs numactl tool support on Linux.
> >
> > Signed-off-by: Phil Yang <phil.yang@arm.com>
> > ---
> >  framework/crb.py | 6 ++++--
> >  framework/dut.py | 9 ++++++++-
> >  2 files changed, 12 insertions(+), 3 deletions(-)
> >
> > diff --git a/framework/crb.py b/framework/crb.py index
> > 5c555db..97bebfe 100644
> > --- a/framework/crb.py
> > +++ b/framework/crb.py
> > @@ -204,8 +204,10 @@ class Crb(object):
> >          if numa == -1:
> >              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 need clear
> > default hugepage
> > -            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 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)
> > +
> >              # 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) diff --git
> > a/framework/dut.py b/framework/dut.py index 18f0b39..b358578 100644
> > --- a/framework/dut.py
> > +++ b/framework/dut.py
> > @@ -305,6 +305,12 @@ 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("numactl -H | awk
> > + '/available/
> > {print $2}'", "# ")
> 
> We may not expect that numactl is installed on the DUT. It will be more portable
> by checking sysfs like "ls /sys/devices/system/node | grep node* | wc -l".
> 
> > +        numa_service_num =
> > self.get_def_rte_config('CONFIG_RTE_MAX_NUMA_NODES')
> > +        if numa_service_num:
> > +            numa = min(total_numa_nodes, numa_service_num)
> > +        else:
> > +            numa = total_numa_nodes
> >          force_socket = False
> >
> >          if int(hugepages_size) < (1024 * 1024):
> > @@ -332,7 +338,8 @@ class Dut(Crb):
> >                  if force_socket:
> >                      self.set_huge_pages(arch_huge_pages, 0)
> >                  else:
> > -                    self.set_huge_pages(arch_huge_pages)
> > +                    for numa_id in range(0, int(numa)):
> > +                        self.set_huge_pages(arch_huge_pages, numa_id)
> >
> >          self.mount_huge_pages()
> >          self.hugepage_path = self.strip_hugepage_path()
> > --
> > 2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dts] [PATCH] framework/dut: setup hugepage for all available NUMA nodes
  2018-08-28  2:00   ` Phil Yang
@ 2018-08-28  2:57     ` Liu, Yong
  2018-08-28  3:10       ` Phil Yang
  0 siblings, 1 reply; 8+ messages in thread
From: Liu, Yong @ 2018-08-28  2:57 UTC (permalink / raw)
  To: Phil.Yang, dts, dts; +Cc: nd

You're welcome, Phil. 
One more comment, It's better to make total_numa_nodes and numa_service_num variables as integer before comparing them.
Function "min" may not return the expect result when numa number over ten.

Thanks,
Marvin

> -----Original Message-----
> From: Phil.Yang@arm.com [mailto:Phil.Yang@arm.com]
> Sent: Tuesday, August 28, 2018 10:01 AM
> To: Liu, Yong <yong.liu@intel.com>; dts <dts-bounces@dpdk.org>; dts@dpdk.org
> Cc: nd <nd@arm.com>
> Subject: RE: [dts] [PATCH] framework/dut: setup hugepage for all available
> NUMA nodes
> 
> Hi Marvin,
> 
> Thanks for your comment.
> I reworked this patch, please review it.
> 
> Thanks,
> Phil Yang
> 
> > -----Original Message-----
> > From: dts <dts-bounces@dpdk.org> On Behalf Of Liu, Yong
> > Sent: Monday, August 27, 2018 1:28 PM
> > To: dts <dts-bounces@dpdk.org>; dts@dpdk.org
> > Cc: nd <nd@arm.com>
> > Subject: Re: [dts] [PATCH] framework/dut: setup hugepage for all available
> > NUMA nodes
> >
> > Hi Phil,
> > One comment is inline.
> >
> > Thanks,
> > Marvin
> >
> > > -----Original Message-----
> > > From: dts [mailto:dts-bounces@dpdk.org]
> > > Sent: Monday, August 27, 2018 9:16 AM
> > > To: dts@dpdk.org
> > > Cc: nd@arm.com
> > > Subject: [dts] [PATCH] framework/dut: setup hugepage for all available
> > > NUMA nodes
> > >
> > > On a NUMA machine, we need to setup hugepage for all NUMA nodes.
> > >
> > > The default approach is by setting /sys/kernel/mm/hugepages, but it
> > > only works on a single-node system.
> > >
> > > This fix needs numactl tool support on Linux.
> > >
> > > Signed-off-by: Phil Yang <phil.yang@arm.com>
> > > ---
> > >  framework/crb.py | 6 ++++--
> > >  framework/dut.py | 9 ++++++++-
> > >  2 files changed, 12 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/framework/crb.py b/framework/crb.py index
> > > 5c555db..97bebfe 100644
> > > --- a/framework/crb.py
> > > +++ b/framework/crb.py
> > > @@ -204,8 +204,10 @@ class Crb(object):
> > >          if numa == -1:
> > >              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 need
> clear
> > > default hugepage
> > > -            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 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)
> > > +
> > >              # 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) diff --git
> > > a/framework/dut.py b/framework/dut.py index 18f0b39..b358578 100644
> > > --- a/framework/dut.py
> > > +++ b/framework/dut.py
> > > @@ -305,6 +305,12 @@ 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("numactl -H | awk
> > > + '/available/
> > > {print $2}'", "# ")
> >
> > We may not expect that numactl is installed on the DUT. It will be more
> portable
> > by checking sysfs like "ls /sys/devices/system/node | grep node* | wc -l".
> >
> > > +        numa_service_num =
> > > self.get_def_rte_config('CONFIG_RTE_MAX_NUMA_NODES')
> > > +        if numa_service_num:
> > > +            numa = min(total_numa_nodes, numa_service_num)
> > > +        else:
> > > +            numa = total_numa_nodes
> > >          force_socket = False
> > >
> > >          if int(hugepages_size) < (1024 * 1024):
> > > @@ -332,7 +338,8 @@ class Dut(Crb):
> > >                  if force_socket:
> > >                      self.set_huge_pages(arch_huge_pages, 0)
> > >                  else:
> > > -                    self.set_huge_pages(arch_huge_pages)
> > > +                    for numa_id in range(0, int(numa)):
> > > +                        self.set_huge_pages(arch_huge_pages, numa_id)
> > >
> > >          self.mount_huge_pages()
> > >          self.hugepage_path = self.strip_hugepage_path()
> > > --
> > > 2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [dts] [PATCH v3] framework/dut: setup hugepage for all available numa nodes
  2018-08-28  1:59 ` [dts] [PATCH v2] framework/dut: setup hugepage for all available numa nodes Phil Yang
@ 2018-08-28  3:08   ` Phil Yang
  2018-09-03  8:32     ` Liu, Yong
  0 siblings, 1 reply; 8+ messages in thread
From: Phil Yang @ 2018-08-28  3:08 UTC (permalink / raw)
  To: dts; +Cc: nd, yong.liu, Phil Yang

From: Phil Yang <phil.yang@arm.com>

On a NUMA machine, we need to setup hugepage for all NUMA nodes.

The default approach is by setting /sys/kernel/mm/hugepages, but it
only works on a single-node system.

Signed-off-by: Phil Yang <phil.yang@arm.com>
---
 framework/crb.py | 6 ++++--
 framework/dut.py | 9 ++++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/framework/crb.py b/framework/crb.py
index 5c555db..97bebfe 100644
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -204,8 +204,10 @@ class Crb(object):
         if numa == -1:
             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 need clear default hugepage
-            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 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)
+
             # 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)
diff --git a/framework/dut.py b/framework/dut.py
index 18f0b39..a8116ff 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -305,6 +305,12 @@ 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')
+        if numa_service_num is not None:
+            numa = min(int(total_numa_nodes), int(numa_service_num))
+        else:
+            numa = total_numa_nodes
         force_socket = False
 
         if int(hugepages_size) < (1024 * 1024):
@@ -332,7 +338,8 @@ class Dut(Crb):
                 if force_socket:
                     self.set_huge_pages(arch_huge_pages, 0)
                 else:
-                    self.set_huge_pages(arch_huge_pages)
+                    for numa_id in range(0, int(numa)):
+                        self.set_huge_pages(arch_huge_pages, numa_id)
 
         self.mount_huge_pages()
         self.hugepage_path = self.strip_hugepage_path()
-- 
2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dts] [PATCH] framework/dut: setup hugepage for all available NUMA nodes
  2018-08-28  2:57     ` Liu, Yong
@ 2018-08-28  3:10       ` Phil Yang
  0 siblings, 0 replies; 8+ messages in thread
From: Phil Yang @ 2018-08-28  3:10 UTC (permalink / raw)
  To: Liu, Yong, dts, dts; +Cc: nd

Yes. That's very thoughtful.
Reworked. Please review it.

Thanks,
Phil Yang

> -----Original Message-----
> From: Liu, Yong <yong.liu@intel.com>
> Sent: Tuesday, August 28, 2018 10:58 AM
> To: Phil Yang <Phil.Yang@arm.com>; dts <dts-bounces@dpdk.org>;
> dts@dpdk.org
> Cc: nd <nd@arm.com>
> Subject: RE: [dts] [PATCH] framework/dut: setup hugepage for all available
> NUMA nodes
> 
> You're welcome, Phil.
> One more comment, It's better to make total_numa_nodes and
> numa_service_num variables as integer before comparing them.
> Function "min" may not return the expect result when numa number over ten.
> 
> Thanks,
> Marvin
> 
> > -----Original Message-----
> > From: Phil.Yang@arm.com [mailto:Phil.Yang@arm.com]
> > Sent: Tuesday, August 28, 2018 10:01 AM
> > To: Liu, Yong <yong.liu@intel.com>; dts <dts-bounces@dpdk.org>;
> > dts@dpdk.org
> > Cc: nd <nd@arm.com>
> > Subject: RE: [dts] [PATCH] framework/dut: setup hugepage for all
> > available NUMA nodes
> >
> > Hi Marvin,
> >
> > Thanks for your comment.
> > I reworked this patch, please review it.
> >
> > Thanks,
> > Phil Yang
> >
> > > -----Original Message-----
> > > From: dts <dts-bounces@dpdk.org> On Behalf Of Liu, Yong
> > > Sent: Monday, August 27, 2018 1:28 PM
> > > To: dts <dts-bounces@dpdk.org>; dts@dpdk.org
> > > Cc: nd <nd@arm.com>
> > > Subject: Re: [dts] [PATCH] framework/dut: setup hugepage for all
> > > available NUMA nodes
> > >
> > > Hi Phil,
> > > One comment is inline.
> > >
> > > Thanks,
> > > Marvin
> > >
> > > > -----Original Message-----
> > > > From: dts [mailto:dts-bounces@dpdk.org]
> > > > Sent: Monday, August 27, 2018 9:16 AM
> > > > To: dts@dpdk.org
> > > > Cc: nd@arm.com
> > > > Subject: [dts] [PATCH] framework/dut: setup hugepage for all
> > > > available NUMA nodes
> > > >
> > > > On a NUMA machine, we need to setup hugepage for all NUMA nodes.
> > > >
> > > > The default approach is by setting /sys/kernel/mm/hugepages, but
> > > > it only works on a single-node system.
> > > >
> > > > This fix needs numactl tool support on Linux.
> > > >
> > > > Signed-off-by: Phil Yang <phil.yang@arm.com>
> > > > ---
> > > >  framework/crb.py | 6 ++++--
> > > >  framework/dut.py | 9 ++++++++-
> > > >  2 files changed, 12 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/framework/crb.py b/framework/crb.py index
> > > > 5c555db..97bebfe 100644
> > > > --- a/framework/crb.py
> > > > +++ b/framework/crb.py
> > > > @@ -204,8 +204,10 @@ class Crb(object):
> > > >          if numa == -1:
> > > >              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 need
> > clear
> > > > default hugepage
> > > > -            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 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)
> > > > +
> > > >              # 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) diff --git
> > > > a/framework/dut.py b/framework/dut.py index 18f0b39..b358578
> > > > 100644
> > > > --- a/framework/dut.py
> > > > +++ b/framework/dut.py
> > > > @@ -305,6 +305,12 @@ 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("numactl -H | awk
> > > > + '/available/
> > > > {print $2}'", "# ")
> > >
> > > We may not expect that numactl is installed on the DUT. It will be
> > > more
> > portable
> > > by checking sysfs like "ls /sys/devices/system/node | grep node* | wc -l".
> > >
> > > > +        numa_service_num =
> > > > self.get_def_rte_config('CONFIG_RTE_MAX_NUMA_NODES')
> > > > +        if numa_service_num:
> > > > +            numa = min(total_numa_nodes, numa_service_num)
> > > > +        else:
> > > > +            numa = total_numa_nodes
> > > >          force_socket = False
> > > >
> > > >          if int(hugepages_size) < (1024 * 1024):
> > > > @@ -332,7 +338,8 @@ class Dut(Crb):
> > > >                  if force_socket:
> > > >                      self.set_huge_pages(arch_huge_pages, 0)
> > > >                  else:
> > > > -                    self.set_huge_pages(arch_huge_pages)
> > > > +                    for numa_id in range(0, int(numa)):
> > > > +                        self.set_huge_pages(arch_huge_pages,
> > > > + numa_id)
> > > >
> > > >          self.mount_huge_pages()
> > > >          self.hugepage_path = self.strip_hugepage_path()
> > > > --
> > > > 2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dts] [PATCH v3] framework/dut: setup hugepage for all available numa nodes
  2018-08-28  3:08   ` [dts] [PATCH v3] " Phil Yang
@ 2018-09-03  8:32     ` Liu, Yong
  0 siblings, 0 replies; 8+ messages in thread
From: Liu, Yong @ 2018-09-03  8:32 UTC (permalink / raw)
  To: ,; +Cc: nd, Phil Yang

Thanks, Phil. Applied.

On 08/28/2018 11:08 AM, wrote:
> From: Phil Yang<phil.yang@arm.com>
>
> On a NUMA machine, we need to setup hugepage for all NUMA nodes.
>
> The default approach is by setting /sys/kernel/mm/hugepages, but it
> only works on a single-node system.
>
> Signed-off-by: Phil Yang<phil.yang@arm.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-09-03  0:49 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-27  1:16 [dts] [PATCH] framework/dut: setup hugepage for all available NUMA nodes Phil Yang
2018-08-27  5:27 ` Liu, Yong
2018-08-28  2:00   ` Phil Yang
2018-08-28  2:57     ` Liu, Yong
2018-08-28  3:10       ` Phil Yang
2018-08-28  1:59 ` [dts] [PATCH v2] framework/dut: setup hugepage for all available numa nodes Phil Yang
2018-08-28  3:08   ` [dts] [PATCH v3] " Phil Yang
2018-09-03  8:32     ` Liu, Yong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).