All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usertools: use /sys/devices/system/cpu for CPU layout script
@ 2017-03-31 12:21 Andriy Berestovskyy
  2017-04-25  8:48 ` Thomas Monjalon
  0 siblings, 1 reply; 4+ messages in thread
From: Andriy Berestovskyy @ 2017-03-31 12:21 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev

Some platforms do not have core/socket info in /proc/cpuinfo.

Signed-off-by: Andriy Berestovskyy <Andriy.Berestovskyy@caviumnetworks.com>
---
 usertools/cpu_layout.py | 53 +++++++++++++++++++++----------------------------
 1 file changed, 23 insertions(+), 30 deletions(-)

diff --git a/usertools/cpu_layout.py b/usertools/cpu_layout.py
index 0e049a6..5735891 100755
--- a/usertools/cpu_layout.py
+++ b/usertools/cpu_layout.py
@@ -4,6 +4,7 @@
 #   BSD LICENSE
 #
 #   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+#   Copyright(c) 2017 Cavium Networks Ltd. All rights reserved.
 #   All rights reserved.
 #
 #   Redistribution and use in source and binary forms, with or without
@@ -38,40 +39,32 @@
 sockets = []
 cores = []
 core_map = {}
-
-fd = open("/proc/cpuinfo")
-lines = fd.readlines()
+base_path = "/sys/devices/system/cpu"
+fd = open("{}/kernel_max".format(base_path))
+max_cpus = int(fd.read())
 fd.close()
-
-core_details = []
-core_lines = {}
-for line in lines:
-    if len(line.strip()) != 0:
-        name, value = line.split(":", 1)
-        core_lines[name.strip()] = value.strip()
-    else:
-        core_details.append(core_lines)
-        core_lines = {}
-
-for core in core_details:
-    for field in ["processor", "core id", "physical id"]:
-        if field not in core:
-            print("Error getting '%s' value from /proc/cpuinfo" % field)
-            sys.exit(1)
-        core[field] = int(core[field])
-
-    if core["core id"] not in cores:
-        cores.append(core["core id"])
-    if core["physical id"] not in sockets:
-        sockets.append(core["physical id"])
-    key = (core["physical id"], core["core id"])
+for cpu in xrange(max_cpus + 1):
+    try:
+        fd = open("{}/cpu{}/topology/core_id".format(base_path, cpu))
+    except:
+        break
+    core = int(fd.read())
+    fd.close()
+    fd = open("{}/cpu{}/topology/physical_package_id".format(base_path, cpu))
+    socket = int(fd.read())
+    fd.close()
+    if core not in cores:
+        cores.append(core)
+    if socket not in sockets:
+        sockets.append(socket)
+    key = (socket, core)
     if key not in core_map:
         core_map[key] = []
-    core_map[key].append(core["processor"])
+    core_map[key].append(cpu)
 
-print("============================================================")
-print("Core and Socket Information (as reported by '/proc/cpuinfo')")
-print("============================================================\n")
+print(format("=" * (47 + len(base_path))))
+print("Core and Socket Information (as reported by '{}')".format(base_path))
+print("{}\n".format("=" * (47 + len(base_path))))
 print("cores = ", cores)
 print("sockets = ", sockets)
 print("")
-- 
2.7.4

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

* Re: [PATCH] usertools: use /sys/devices/system/cpu for CPU layout script
  2017-03-31 12:21 [PATCH] usertools: use /sys/devices/system/cpu for CPU layout script Andriy Berestovskyy
@ 2017-04-25  8:48 ` Thomas Monjalon
  2017-04-25 10:19   ` Andriy Berestovskyy
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Monjalon @ 2017-04-25  8:48 UTC (permalink / raw)
  To: Andriy Berestovskyy; +Cc: dev

Hi,

31/03/2017 14:21, Andriy Berestovskyy:
> Some platforms do not have core/socket info in /proc/cpuinfo.
> 
> Signed-off-by: Andriy Berestovskyy <Andriy.Berestovskyy@caviumnetworks.com>
> ---
>  usertools/cpu_layout.py | 53 +++++++++++++++++++++----------------------------
>  1 file changed, 23 insertions(+), 30 deletions(-)

Applied, thanks for improving this script.

Do you think it is really a good idea to keep and maintain this script
in DPDK? It was intentionnally not exported in "make install".
I think it is a bit out of scope, and I wonder which alternatives
do we have? I know hwloc/lstopo, but there are probably others.

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

* Re: [PATCH] usertools: use /sys/devices/system/cpu for CPU layout script
  2017-04-25  8:48 ` Thomas Monjalon
@ 2017-04-25 10:19   ` Andriy Berestovskyy
  2017-04-25 11:01     ` Thomas Monjalon
  0 siblings, 1 reply; 4+ messages in thread
From: Andriy Berestovskyy @ 2017-04-25 10:19 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev

Hi,

On 25.04.2017 10:48, Thomas Monjalon wrote:
> Do you think it is really a good idea to keep and maintain this script
> in DPDK? It was intentionnally not exported in "make install".
> I think it is a bit out of scope, and I wonder which alternatives
> do we have? I know hwloc/lstopo, but there are probably others.

hwloc does not work on my target, but you are right, there are a variety 
of tools for that. For example, I prefer numactl (option -H) because it 
also allows to do many useful things, like bind CPUs to one node and 
memory allocations to another.

At the moment the script is just like the lscpu, which is preinstalled 
on Ubuntu and mentioned in the documentation alongside with the cpu_layout.

We could try to make the script more useful, for example, show which NIC 
is on which NUMA node. Still, it will be just a subset of functionality 
of tools like hwloc...


Regards,
Andriy

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

* Re: [PATCH] usertools: use /sys/devices/system/cpu for CPU layout script
  2017-04-25 10:19   ` Andriy Berestovskyy
@ 2017-04-25 11:01     ` Thomas Monjalon
  0 siblings, 0 replies; 4+ messages in thread
From: Thomas Monjalon @ 2017-04-25 11:01 UTC (permalink / raw)
  To: Andriy Berestovskyy; +Cc: dev

25/04/2017 12:19, Andriy Berestovskyy:
> Hi,
> 
> On 25.04.2017 10:48, Thomas Monjalon wrote:
> > Do you think it is really a good idea to keep and maintain this script
> > in DPDK? It was intentionnally not exported in "make install".
> > I think it is a bit out of scope, and I wonder which alternatives
> > do we have? I know hwloc/lstopo, but there are probably others.
> 
> hwloc does not work on my target, but you are right, there are a variety 
> of tools for that. For example, I prefer numactl (option -H) because it 
> also allows to do many useful things, like bind CPUs to one node and 
> memory allocations to another.
> 
> At the moment the script is just like the lscpu, which is preinstalled 
> on Ubuntu and mentioned in the documentation alongside with the cpu_layout.
> 
> We could try to make the script more useful, for example, show which NIC 
> is on which NUMA node. Still, it will be just a subset of functionality 
> of tools like hwloc...

Yes.
The other idea would be to properly document existing tools
and remove this one.

Opinions?

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

end of thread, other threads:[~2017-04-25 11:01 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-31 12:21 [PATCH] usertools: use /sys/devices/system/cpu for CPU layout script Andriy Berestovskyy
2017-04-25  8:48 ` Thomas Monjalon
2017-04-25 10:19   ` Andriy Berestovskyy
2017-04-25 11:01     ` Thomas Monjalon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.