Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package powerpc-utils for openSUSE:Factory 
checked in at 2023-06-07 23:05:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/powerpc-utils (Old)
 and      /work/SRC/openSUSE:Factory/.powerpc-utils.new.15902 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "powerpc-utils"

Wed Jun  7 23:05:45 2023 rev:137 rq:1090959 version:1.3.11

Changes:
--------
--- /work/SRC/openSUSE:Factory/powerpc-utils/powerpc-utils.changes      
2023-01-26 14:06:39.502989555 +0100
+++ /work/SRC/openSUSE:Factory/.powerpc-utils.new.15902/powerpc-utils.changes   
2023-06-07 23:05:46.390768896 +0200
@@ -1,0 +2,9 @@
+Mon Jun  5 16:20:56 UTC 2023 - Michal Suchanek <[email protected]>
+
+- Fix negative utilization value reported by lparstat -E (bsc#1212031)
+  + lparstat-Fix-negative-values-seen-while-running-lpar.patch
+- Fix lparstat error with mixed SMT state (bsc#1211883 ltc#02144)
+  + lparstat-report-mixed-SMT-state.patch
+  + lparstat-Fix-offline-threads-uninitialized-entries.patch
+
+-------------------------------------------------------------------

New:
----
  lparstat-Fix-negative-values-seen-while-running-lpar.patch
  lparstat-Fix-offline-threads-uninitialized-entries.patch
  lparstat-report-mixed-SMT-state.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ powerpc-utils.spec ++++++
--- /var/tmp/diff_new_pack.l0qkD6/_old  2023-06-07 23:05:48.314780068 +0200
+++ /var/tmp/diff_new_pack.l0qkD6/_new  2023-06-07 23:05:48.322780115 +0200
@@ -29,6 +29,9 @@
 Patch2:         ofpathname_powernv.patch
 Patch3:         fix_kexec_service_name_for_suse.patch
 Patch4:         libvirt-service-dep.patch
+Patch5:         lparstat-Fix-negative-values-seen-while-running-lpar.patch
+Patch6:         lparstat-report-mixed-SMT-state.patch
+Patch7:         lparstat-Fix-offline-threads-uninitialized-entries.patch
 BuildRequires:  autoconf
 BuildRequires:  automake
 BuildRequires:  libnuma-devel

++++++ lparstat-Fix-negative-values-seen-while-running-lpar.patch ++++++
>From 73ba26c1240a25e7699449e82cfc09dad10fed80 Mon Sep 17 00:00:00 2001
From: Sathvika Vasireddy <[email protected]>
Date: Fri, 9 Dec 2022 15:26:46 +0530
Subject: [PATCH 1/3] lparstat: Fix negative values seen while running lparstat
 with -E option

Negative values are seen while running lparstat with -E option.
This is because delta_purr value is less than delta_idle_purr.
Given that these values are read from different sources, a
small variation in the values is possible. So, in such cases,
round down delta_idle_purr to delta_purr.

Without this patch:
=====
System Configuration
type=Dedicated mode=Capped smt=8 lcpu=240 mem=67033290112 kB cpus=0
ent=240.00

---Actual---                 -Normalized-
%busy  %idle   Frequency     %busy  %idle
------ ------  ------------- ------ ------
 -0.03 100.02  3.93GHz[111%]   0.01 110.97
  0.00 100.00  3.93GHz[111%]   0.01 110.99
 -0.04 100.03  3.93GHz[111%]   0.01 110.98
  0.06  99.95  3.93GHz[111%]   0.01 110.99
  0.02  99.98  3.93GHz[111%]   0.01 110.99
=====

With this patch:
=====
System Configuration
type=Dedicated mode=Capped smt=8 lcpu=240 mem=67033290112 kB cpus=0
ent=240.00

---Actual---                 -Normalized-
%busy  %idle   Frequency     %busy  %idle
------ ------  ------------- ------ ------
  0.03  99.96  3.93GHz[111%]   0.01 110.98
  0.00 100.00  3.93GHz[111%]   0.01 110.99
  0.03  99.97  3.93GHz[111%]   0.01 110.99
  0.00 100.00  3.93GHz[111%]   0.01 110.99
  0.09  99.90  3.93GHz[111%]   0.01 110.99
=====

Reported-by: Shirisha Ganta <[email protected]>
Signed-off-by: Sathvika Vasireddy <[email protected]>
Signed-off-by: Tyrel Datwyler <[email protected]>
---
 src/lparstat.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/lparstat.c b/src/lparstat.c
index 31a4ee8..eebba1f 100644
--- a/src/lparstat.c
+++ b/src/lparstat.c
@@ -492,6 +492,15 @@ void get_cpu_util_purr(struct sysentry *unused_se, char 
*buf)
        delta_purr = get_delta_value("purr");
        delta_idle_purr = get_delta_value("idle_purr");
 
+       /*
+        * Given that these values are read from different
+        * sources (purr from lparcfg and idle_purr from sysfs),
+        * a small variation in the values is possible.
+        * In such cases, round down delta_idle_purr to delta_purr.
+        */
+       if (delta_idle_purr > delta_purr)
+               delta_idle_purr = delta_purr;
+
        physc = (delta_purr - delta_idle_purr) / delta_tb;
        physc *= 100.00;
 
@@ -507,6 +516,15 @@ void get_cpu_idle_purr(struct sysentry *unused_se, char 
*buf)
        delta_purr = get_delta_value("purr");
        delta_idle_purr = get_delta_value("idle_purr");
 
+       /*
+        * Given that these values are read from different
+        * sources (purr from lparcfg and idle_purr from sysfs),
+        * a small variation in the values is possible.
+        * In such cases, round down delta_idle_purr to delta_purr.
+        */
+       if (delta_idle_purr > delta_purr)
+               delta_idle_purr = delta_purr;
+
        physc = (delta_purr - delta_idle_purr) / delta_tb;
        idle = (delta_purr / delta_tb) - physc;
        idle *= 100.00;
-- 
2.40.1


++++++ lparstat-Fix-offline-threads-uninitialized-entries.patch ++++++
>From 7a5625f2bc012fbbf0cd8384cb4e7761c5de3bb7 Mon Sep 17 00:00:00 2001
From: Laurent Dufour <[email protected]>
Date: Tue, 2 May 2023 19:59:27 +0200
Subject: [PATCH 3/3] lparstat: Fix offline threads uninitialized entries

When some threads are offline, lparstat -E is failing like that:

$ ppc64_cpu --info # CPU 20 is offline
Core   0:    0*    1*    2*    3*    4*    5*    6*    7*
Core   1:    8*    9*   10*   11*   12*   13*   14*   15*
Core   2:   16*   17*   18*   19*   20    21*   22*   23*
Core   3:   24*   25*   26*   27*   28*   29*   30*   31*
Core   4:   32*   33*   34*   35*   36*   37*   38*   39*
Core   5:   40*   41*   42*   43*   44*   45*   46*   47*
$ lparstat -E
Failed to read /sys/devices/system/cpu/cpu0/spurr

The message is complaining about CPU0 but the real issue is that in
parse_sysfs_values() the test cpu_sysfs_fds[i].spurr >= 0 is valid even if
the entry has not been initialized (cpu_sysfs_fds is alloc cleared). So
if the number of threads online seen in assign_cpu_sysfs_fds is lower than
threads_in_system, the loop in parse_sysfs_values() will read uninitialized
entry, where .cpu=0.

To prevent that, unset entries in the cpu_sysfs_fds should have the spurr
fd set to -1.

Signed-off-by: Laurent Dufour <[email protected]>
---
 src/lparstat.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/lparstat.c b/src/lparstat.c
index a9e7bce..d2fdb3f 100644
--- a/src/lparstat.c
+++ b/src/lparstat.c
@@ -163,6 +163,10 @@ static int assign_cpu_sysfs_fds(int threads_in_system)
                cpu_idx++;
        }
 
+       /* Mark extra slots for offline threads unset, see parse_sysfs_values */
+       for (; cpu_idx < threads_in_system; cpu_idx++)
+               cpu_sysfs_fds[cpu_idx].spurr = -1;
+
        return 0;
 error:
        fprintf(stderr, "Failed to open %s: %s\n",
-- 
2.40.1


++++++ lparstat-report-mixed-SMT-state.patch ++++++
>From 5d2e43bbf0804da52202f817f7f7fc5f18aafd11 Mon Sep 17 00:00:00 2001
From: Laurent Dufour <[email protected]>
Date: Tue, 2 May 2023 16:54:35 +0200
Subject: [PATCH 2/3] lparstat: report mixed SMT state

when SMT state is mixed like this one (CPU 4 is offline):

$ ppc64_cpu --info
Core   0:    0*    1*    2*    3*    4     5*    6*    7*
Core   1:    8*    9*   10*   11*   12*   13*   14*   15*
Core   2:   16*   17*   18*   19*   20*   21*   22*   23*
Core   3:   24*   25*   26*   27*   28*   29*   30*   31*
Core   4:   32*   33*   34*   35*   36*   37*   38*   39*
Core   5:   40*   41*   42*   43*   44*   45*   46*   47*
$ ppc64_cpu --smt
SMT=7: 0
SMT=8: 1-5

ppc64_cpu --smt is handling that nicely but lparstat failed reporting the
SMT state:
$ /usr/sbin/lparstat
Failed to get smt state

System Configuration
type=Dedicated mode=Capped smt=Capped lcpu=6 mem=65969728 kB cpus=0 ent=6.00

%user  %sys %wait    %idle    physc %entc lbusy   app  vcsw phint
----- ----- -----    -----    ----- ----- ----- ----- ----- -----
 0.02  0.01  0.00    99.97     3.41 56.83  0.02  0.00 4061778   156

Makes lparstat reporting "smt=mixed" in that case.
__do_smt is now returning 0 when the SMT state is mixed instead of -1 which
is also reported when an error is detected.
This doesn't change the call made by ppc64_cpu which is using
print_smt_state=true and so is expecting a returned value equal to 0 or -1.

With that patch applied, lparstat print that in the above case:
$lparstat

System Configuration
type=Dedicated mode=Capped smt=Mixed lcpu=6 mem=65969728 kB cpus=0 ent=6.00

%user  %sys %wait    %idle    physc %entc lbusy   app  vcsw phint
----- ----- -----    -----    ----- ----- ----- ----- ----- -----
 0.01  0.01  0.00    99.97     3.43 57.17  0.02  0.00 4105654   156

Signed-off-by: Laurent Dufour <[email protected]>
---
 src/common/cpu_info_helpers.c | 4 ++--
 src/lparstat.c                | 4 +++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/common/cpu_info_helpers.c b/src/common/cpu_info_helpers.c
index 925f220..c05d96d 100644
--- a/src/common/cpu_info_helpers.c
+++ b/src/common/cpu_info_helpers.c
@@ -245,7 +245,7 @@ int __do_smt(bool numeric, int cpus_in_system, int 
threads_per_cpu,
                        if (smt_state == 0)
                                smt_state = thread + 1;
                        else if (smt_state > 0)
-                               smt_state = -1; /* mix of SMT modes */
+                               smt_state = 0; /* mix of SMT modes */
                }
        }
 
@@ -257,7 +257,7 @@ int __do_smt(bool numeric, int cpus_in_system, int 
threads_per_cpu,
                        printf("SMT=1\n");
                else
                        printf("SMT is off\n");
-       } else if (smt_state == -1) {
+       } else if (smt_state == 0) {
                for (thread = 0; thread < threads_per_cpu; thread++) {
                        if (CPU_COUNT_S(cpu_state_size,
                                                cpu_states[thread])) {
diff --git a/src/lparstat.c b/src/lparstat.c
index eebba1f..a9e7bce 100644
--- a/src/lparstat.c
+++ b/src/lparstat.c
@@ -884,13 +884,15 @@ void get_smt_mode(struct sysentry *se, char *buf)
        }
 
        smt_state = parse_smt_state();
-       if (smt_state < 0) {
+       if (smt_state == -1) {
                fprintf(stderr, "Failed to get smt state\n");
                return;
        }
 
        if (smt_state == 1)
                sprintf(buf, "Off");
+       else if (smt_state == 0)
+               sprintf(buf, "Mixed");
        else
                sprintf(buf, "%d", smt_state);
 }
-- 
2.40.1

Reply via email to