Skip to contentSkip to conversation

lscpu: Fix model and model name on Power Systems

PATCH In review Vasant Hegde 3 participants 7 messages Mar 14, 2016 – Mar 16, 2016 Util-Linux package

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 lscpu: Fix model and model name on Power Systems

On Power System, lspcu presently displays system model number instead of processor model name. 'model' tag in cpuinfo contains system model name, not processor model. Instead it uses 'cpu' tag for processor model name. Also it uses 'revision' tag for processor model.

Fix lspcu so that it displays processor model number. Also display processor model name.

cpuinfo output on Power System:
...
...

processor : 127
cpu : POWER8E (raw), altivec supported
clock : 4322.000000MHz
revision : 2.1 (pvr 004b 0201)

timebase : 512000000
platform : PowerNV
model : 8286-42A
machine : PowerNV 8286-42A
firmware : OPAL

Output without this patch:

  Architecture:          ppc64le
  Byte Order:            Little Endian
  CPU(s):                128
  On-line CPU(s) list:   0-127
  Thread(s) per core:    8
  Core(s) per socket:    4
  Socket(s):             4
  NUMA node(s):          4
  Model:                 8286-42A

...
...

Output with this patch:

  Architecture:          ppc64le
  Byte Order:            Little Endian
  CPU(s):                128
  On-line CPU(s) list:   0-127
  Thread(s) per core:    8
  Core(s) per socket:    4
  Socket(s):             4
  NUMA node(s):          4
  Model:                 2.1 (pvr 004b 0201)
  Model name:            POWER8E (raw), altivec supported

...
...

---
 sys-utils/lscpu.c |    5 +++++
 1 file changed, 5 insertions(+)
sys-utils/lscpu.c +5 -0
index fc32762..423bc56 100644
@@ -465,8 +465,13 @@ read_basicinfo(struct lscpu_desc *desc, struct lscpu_modifier *mod)
 		else if (lookup(buf, "vendor_id", &desc->vendor)) ;
 		else if (lookup(buf, "family", &desc->family)) ;
 		else if (lookup(buf, "cpu family", &desc->family)) ;
+#if defined(__powerpc__) || defined(__powerpc64__)
+		else if (lookup(buf, "revision", &desc->model)) ;
+		else if (lookup(buf, "cpu", &desc->modelname)) ;
+#else
 		else if (lookup(buf, "model", &desc->model)) ;
 		else if (lookup(buf, "model name", &desc->modelname)) ;
+#endif
 		else if (lookup(buf, "stepping", &desc->stepping)) ;
 		else if (lookup(buf, "cpu MHz", &desc->mhz)) ;
 		else if (lookup(buf, "flags", &desc->flags)) ;		/* x86 */
maintainer
#1 lore raw
Quoted 7 lines · Vasant Hegde

Model: 2.1 (pvr 004b 0201)
Model name: POWER8E (raw), altivec supported
...
...

---
 sys-utils/lscpu.c |    5 +++++
 1 file changed, 5 insertions(+)

Seems better. Applied, thanks!

Karel

Signature · 2 lines
 Karel Zak  <[email protected]>
 http://karelzak.blogspot.com
#2 lore raw
Quoted 10 lines · Karel Zak
Quoted 7 lines · Vasant Hegde
   Model:                 2.1 (pvr 004b 0201)
   Model name:            POWER8E (raw), altivec supported
   ...
   ...
---
  sys-utils/lscpu.c |    5 +++++
  1 file changed, 5 insertions(+)

Seems better. Applied, thanks!

Karel,

Thanks for the quick response.

-Vasant

#3 lore raw
In reply to Vasant Hegde
Quoted 74 lines · Vasant Hegde

On Power System, lspcu presently displays system model number instead of processor model name. 'model' tag in cpuinfo contains system model name, not processor model. Instead it uses 'cpu' tag for processor model name. Also it uses 'revision' tag for processor model.

Fix lspcu so that it displays processor model number. Also display processor model name.

cpuinfo output on Power System:
...
...

processor : 127
cpu : POWER8E (raw), altivec supported
clock : 4322.000000MHz
revision : 2.1 (pvr 004b 0201)

timebase : 512000000
platform : PowerNV
model : 8286-42A
machine : PowerNV 8286-42A
firmware : OPAL

Output without this patch:

  Architecture:          ppc64le
  Byte Order:            Little Endian
  CPU(s):                128
  On-line CPU(s) list:   0-127
  Thread(s) per core:    8
  Core(s) per socket:    4
  Socket(s):             4
  NUMA node(s):          4
  Model:                 8286-42A

...
...

Output with this patch:

  Architecture:          ppc64le
  Byte Order:            Little Endian
  CPU(s):                128
  On-line CPU(s) list:   0-127
  Thread(s) per core:    8
  Core(s) per socket:    4
  Socket(s):             4
  NUMA node(s):          4
  Model:                 2.1 (pvr 004b 0201)
  Model name:            POWER8E (raw), altivec supported

...
...

---
 sys-utils/lscpu.c |    5 +++++
 1 file changed, 5 insertions(+)
sys-utils/lscpu.c +5 -0
index fc32762..423bc56 100644
@@ -465,8 +465,13 @@ read_basicinfo(struct lscpu_desc *desc, struct
 lscpu_modifier *mod) else if (lookup(buf, "vendor_id",
 &desc->vendor)) ;
 		else if (lookup(buf, "family", &desc->family)) ;
 		else if (lookup(buf, "cpu family", &desc->family)) ;
+#if defined(__powerpc__) || defined(__powerpc64__)
+		else if (lookup(buf, "revision", &desc->model)) ;
+		else if (lookup(buf, "cpu", &desc->modelname)) ;
+#else
 		else if (lookup(buf, "model", &desc->model)) ;
 		else if (lookup(buf, "model name", &desc->modelname)) ;
+#endif
 		else if (lookup(buf, "stepping", &desc->stepping)) ;
 		else if (lookup(buf, "cpu MHz", &desc->mhz)) ;
Quoted 1 line

else if (lookup(buf, "flags", &desc->flags)) ; /* x86 */

Would it be possible to decide on runtime what to do, ideally looking into /proc or /sys to see whether it's a powerpc? This ifdef does not work with lscpu --sysroot.

See below our test diffs. The power7 and sparc dumps look better, x86 is broken and ppc-qemu looks odd.

--- /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/expected/lscpu/lscpu-ppc-qemu

2016-03-13 15:08:02.457989796 +0000
+++ /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/output/lscpu/lscpu-ppc-qemu       
2016-03-15 00:48:52.850000003 +0000
@@ -3,7 +3,8 @@
 Thread(s) per core:    1
 Core(s) per socket:    1
 Socket(s):             1
-Model:                 Power Macintosh
+Model:                 3.1 (pvr 0008 0301)
+Model name:            740/750
 BogoMIPS:              33.25
 L1d cache:             unknown size
 L1i cache:             unknown size
--- /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/expected/lscpu/lscpu-ppc64-POWER7 
2016-03-02 21:33:53.348702004 +0000
+++ /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/output/lscpu/lscpu-ppc64-POWER7   
2016-03-15 00:48:53.080000003 +0000
@@ -4,7 +4,8 @@
 Core(s) per socket:    1
 Socket(s):             4
 NUMA node(s):          1
-Model:                 IBM,8233-E8B
+Model:                 2.1 (pvr 003f 0201)
+Model name:            POWER7 (architected), altivec supported
 L1d cache:             32K
 L1i cache:             32K
 NUMA node0 CPU(s):     0-15
--- /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/expected/lscpu/lscpu-ppc64-POWER7-64cpu   
2016-03-13 15:08:02.457989796 +0000
+++ /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/output/lscpu/lscpu-ppc64-POWER7-64cpu     
2016-03-15 00:48:53.010000003 +0000
@@ -4,7 +4,8 @@
 Core(s) per socket:    1
 Socket(s):             16
 NUMA node(s):          2
-Model:                 IBM,8231-E2B
+Model:                 2.1 (pvr 003f 0201)
+Model name:            POWER7 (architected), altivec supported
 Hypervisor vendor:     pHyp
 Virtualization type:   para
 L1d cache:             32K
--- /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/expected/lscpu/lscpu-sparc64      
2016-03-13 15:08:02.457989796 +0000
+++ /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/output/lscpu/lscpu-sparc64        
2016-03-15 00:48:53.250000003 +0000
@@ -4,6 +4,7 @@
 Thread(s) per core:    1
 Core(s) per socket:    1
 Socket(s):             6
+Model name:            TI UltraSparc II  (BlackBird)
 Flags:                 sun4u

# The following is the parsable format, which can be fed to other
--- /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/expected/lscpu/lscpu-vbox-win

2016-03-13 15:08:02.457989796 +0000
+++ /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/output/lscpu/lscpu-vbox-win       
2016-03-15 00:48:53.290000003 +0000
@@ -7,8 +7,6 @@
 NUMA node(s):          1
 Vendor ID:             GenuineIntel
 CPU family:            6
-Model:                 58
-Model name:            Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz
 Stepping:              9
 CPU MHz:               1600.000
 CPU max MHz:           3800.0000
--- /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/expected/lscpu/lscpu-x86_64-64cpu 
2016-03-13 15:08:02.457989796 +0000
+++ /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/output/lscpu/lscpu-x86_64-64cpu   
2016-03-15 00:48:53.710000003 +0000
@@ -7,8 +7,6 @@
 NUMA node(s):          3
 Vendor ID:             GenuineIntel
 CPU family:            6
-Model:                 46
-Model name:            Intel(R) Xeon(R) CPU           X7550  @ 2.00GHz
 Stepping:              6
 CPU MHz:               1064.000
 CPU max MHz:           1996.0000
--- /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/expected/lscpu/lscpu-x86_64-dell_e4310    
2016-03-13 15:08:02.457989796 +0000
+++ /home/abuild/rpmbuild/BUILD/util-linux-2.28.rc1.git35.83a77/tests/output/lscpu/lscpu-x86_64-dell_e4310      
2016-03-15 00:48:53.760000003 +0000
@@ -7,8 +7,6 @@
 NUMA node(s):          1
 Vendor ID:             GenuineIntel
 CPU family:            6
-Model:                 37
-Model name:            Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz
 Stepping:              5
 CPU MHz:               1199.000
 CPU max MHz:           2667.0000
maintainer
#4 lore raw
Quoted 15 lines · Ruediger Meier
Quoted 15 lines
sys-utils/lscpu.c +4 -0
index fc32762..423bc56 100644
@@ -465,8 +465,13 @@ read_basicinfo(struct lscpu_desc *desc, struct
 lscpu_modifier *mod) else if (lookup(buf, "vendor_id",
 &desc->vendor)) ;
 		else if (lookup(buf, "family", &desc->family)) ;
 		else if (lookup(buf, "cpu family", &desc->family)) ;
+#if defined(__powerpc__) || defined(__powerpc64__)
+		else if (lookup(buf, "revision", &desc->model)) ;
+		else if (lookup(buf, "cpu", &desc->modelname)) ;
+#else
 		else if (lookup(buf, "model", &desc->model)) ;
 		else if (lookup(buf, "model name", &desc->modelname)) ;
Quoted 8 lines
Quoted 4 lines
sys-utils/lscpu.c +1 -0
+#endif
 		else if (lookup(buf, "stepping", &desc->stepping)) ;
 		else if (lookup(buf, "cpu MHz", &desc->mhz)) ;

else if (lookup(buf, "flags", &desc->flags)) ; /* x86 */

Would it be possible to decide on runtime what to do, ideally looking into /proc or /sys to see whether it's a powerpc? This ifdef does not work with lscpu --sysroot.

I have reverted the patch for --sysroot, so the #ifdef is applied to live systems only (please, test it). Not elegant, but better than nothing.

Karel

Signature · 2 lines
 Karel Zak  <[email protected]>
 http://karelzak.blogspot.com
#5 lore raw
Quoted 25 lines · Karel Zak
Quoted 15 lines · Ruediger Meier
Quoted 15 lines
sys-utils/lscpu.c +4 -0
index fc32762..423bc56 100644
@@ -465,8 +465,13 @@ read_basicinfo(struct lscpu_desc *desc,
 struct lscpu_modifier *mod) else if (lookup(buf, "vendor_id",
 &desc->vendor)) ;
 		else if (lookup(buf, "family", &desc->family)) ;
 		else if (lookup(buf, "cpu family", &desc->family)) ;
+#if defined(__powerpc__) || defined(__powerpc64__)
+		else if (lookup(buf, "revision", &desc->model)) ;
+		else if (lookup(buf, "cpu", &desc->modelname)) ;
+#else
 		else if (lookup(buf, "model", &desc->model)) ;
 		else if (lookup(buf, "model name", &desc->modelname)) ;
Quoted 8 lines
Quoted 4 lines
sys-utils/lscpu.c +1 -0
+#endif
 		else if (lookup(buf, "stepping", &desc->stepping)) ;
 		else if (lookup(buf, "cpu MHz", &desc->mhz)) ;

else if (lookup(buf, "flags", &desc->flags)) ; /* x86 */

Would it be possible to decide on runtime what to do, ideally looking into /proc or /sys to see whether it's a powerpc? This ifdef does not work with lscpu --sysroot.

Quoted 3 lines

I have reverted the patch for --sysroot, so the #ifdef is applied to live systems only (please, test it). Not elegant, but better than nothing.

I have another idea, just use revision and cpu if available. I'll send a patch.

#6 lore raw
In reply to Karel Zak
Quoted 25 lines · Karel Zak
Quoted 15 lines · Ruediger Meier
Quoted 15 lines
sys-utils/lscpu.c +4 -0
index fc32762..423bc56 100644
@@ -465,8 +465,13 @@ read_basicinfo(struct lscpu_desc *desc, struct
 lscpu_modifier *mod) else if (lookup(buf, "vendor_id",
 &desc->vendor)) ;
  		else if (lookup(buf, "family", &desc->family)) ;
  		else if (lookup(buf, "cpu family", &desc->family)) ;
+#if defined(__powerpc__) || defined(__powerpc64__)
+		else if (lookup(buf, "revision", &desc->model)) ;
+		else if (lookup(buf, "cpu", &desc->modelname)) ;
+#else
  		else if (lookup(buf, "model", &desc->model)) ;
  		else if (lookup(buf, "model name", &desc->modelname)) ;
Quoted 8 lines
Quoted 4 lines
sys-utils/lscpu.c +1 -0
+#endif
  		else if (lookup(buf, "stepping", &desc->stepping)) ;
  		else if (lookup(buf, "cpu MHz", &desc->mhz)) ;

else if (lookup(buf, "flags", &desc->flags)) ; /* x86 */

Would it be possible to decide on runtime what to do, ideally looking into /proc or /sys to see whether it's a powerpc? This ifdef does not work with lscpu --sysroot.

Quoted 3 lines

I have reverted the patch for --sysroot, so the #ifdef is applied to live systems only (please, test it). Not elegant, but better than nothing.

Karel,

I've gone through this patch.. Looks good. But I think Ruediger's patch is better one.

-Vasant