Compare commits

...

10 Commits

Author SHA1 Message Date
openeuler-ci-bot
30d86326fe
!141 [sync] PR-137: top: adapt to guest/total tics change, api
From: @openeuler-sync-bot 
Reviewed-by: @wangbin224 
Signed-off-by: @wangbin224
2024-06-26 07:24:28 +00:00
SuperSix173
d82474d24f top: adapt to guest/total tics change, <stat> api
Signed-off-by: SuperSix173 <liuchao173@huawei.com>
(cherry picked from commit 8b641df4b9364452507316908c93afc33f3ad602)
2024-06-26 14:12:33 +08:00
openeuler-ci-bot
74655f3ca2
!134 [sync] PR-133: uptime/w: fix print 0 user when systemd-pam is not installed
From: @openeuler-sync-bot 
Reviewed-by: @wangbin224 
Signed-off-by: @wangbin224
2024-05-09 11:05:30 +00:00
SuperSix173
673f7aa8f6 uptime/w: fix print 0 user when systemd-pam is not installed
Signed-off-by: SuperSix173 <liuchao173@huawei.com>
(cherry picked from commit a08f478e9694b8f8f83d385ab8f5e388827e8adf)
2024-05-09 17:28:12 +08:00
openeuler-ci-bot
dd51a179e3
!126 修复ps --sort 与 -A -H选项同时使用显示不全
From: @yinyongkang 
Reviewed-by: @SuperSix173 
Signed-off-by: @SuperSix173
2024-04-25 09:10:22 +00:00
yinyongkang
82b59a86a7 ps: don't lose tasks when --sort used with forest mode 2024-04-25 17:01:00 +08:00
openeuler-ci-bot
8b2eacada6
!123 修复uptime -p 命令,时间为60s时显示错误
From: @yinyongkang 
Reviewed-by: @SuperSix173 
Signed-off-by: @SuperSix173
2024-04-23 08:07:58 +00:00
yinyongkang
7c0c168b19 uptime: fix output on 60 seconds 2024-04-23 15:58:01 +08:00
openeuler-ci-bot
586082f0fe
!118 [sync] PR-116: library: address remaining cpu distortions, api
From: @openeuler-sync-bot 
Reviewed-by: @wangbin224 
Signed-off-by: @wangbin224
2024-04-02 11:24:27 +00:00
Liu Chao
c86d640471 library: address remaining cpu distortions, <stat> api
Signed-off-by: Liu Chao <liuchao173@huawei.com>
(cherry picked from commit c0c3b00182474729dd198a39b6d05442ed9c0e62)
2024-04-02 14:21:05 +08:00
9 changed files with 495 additions and 1 deletions

View File

@ -0,0 +1,32 @@
From 92bdeb176f3ce8793ba1a2f3d82525b5c51f7449 Mon Sep 17 00:00:00 2001
From: Jim Warner <james.warner@comcast.net>
Date: Wed, 4 Oct 2023 12:00:00 -0500
Subject: [PATCH] NEWS: acknowledge fix for the lost tasks ps issue #304
[ and eliminate 1 decades old useless initialization ]
Reference(s):
. Sep, 2023 - fix for ps issue #304
commit 09fbd70de33c451dde84254718ded2ccac48aed4
Signed-off-by: Jim Warner <james.warner@comcast.net>
---
src/ps/display.c | 2 +-
1 files changed, 1 insertions(+), 1 deletion(-)
diff --git a/src/ps/display.c b/src/ps/display.c
index 325edf38..9b5c7165 100644
--- a/src/ps/display.c
+++ b/src/ps/display.c
@@ -357,7 +357,7 @@ next_proc:
/***** forest output requires sorting by ppid; add start_time by default */
static void prep_forest_sort(void){
- sort_node *endp, *tmp_list = sort_list;
+ sort_node *endp, *tmp_list;
const format_struct *incoming;
if(!sort_list) { /* assume start time order */
--
GitLab

View File

@ -0,0 +1,79 @@
From 6418b8c1fbcfdcda4cad8efacccceb7bcdbb1de9 Mon Sep 17 00:00:00 2001
From: Jim Warner <james.warner@comcast.net>
Date: Wed, 20 Mar 2024 00:00:00 -0500
Subject: [PATCH] library: address remaining cpu distortions, <stat> api
When the potential cpu distortion was addressed in the
commit referenced below, the revision did not quite go
far enough. This was revealed in the merge plus issue
posts also shown. Thus a need for this final solution.
[ and now that all the stat_jifs fields are verified ]
[ that TICsetH macro need not check for distortions. ]
Reference(s):
https://gitlab.com/procps-ng/procps/-/merge_requests/223
https://gitlab.com/procps-ng/procps/-/issues/321
. Mar, 2017 - cpu distorions relocated/improved
commit 253ac7f709412a8699767bd70faeaf98e19614f0
Discovered-by: Chao Liu SuperSix173 <liuchao173@huawei.com>
Signed-off-by: Jim Warner <james.warner@comcast.net>
---
library/stat.c | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/library/stat.c b/library/stat.c
index c37e9b54..b04fe0a5 100644
--- a/library/stat.c
+++ b/library/stat.c
@@ -182,9 +182,10 @@ struct stat_info {
#define SYS_set(e,t,x) setDECL(e) { \
(void)T; R->result. t = S->new. x; }
// delta assignment
+// ( thanks to 'stat_derive_unique', this macro no longer needs to )
+// ( protect against a negative value when a cpu is brought online )
#define TICsetH(e,t,x) setDECL(e) { \
- (void)S; R->result. t = ( T->new. x - T->old. x ); \
- if (R->result. t < 0) R->result. t = 0; }
+ (void)S; R->result. t = ( T->new. x - T->old. x ); }
#define SYSsetH(e,t,x) setDECL(e) { \
(void)T; R->result. t = ( S->new. x - S->old. x ); }
@@ -555,6 +556,9 @@ wrap_up:
static inline void stat_derive_unique (
struct hist_tic *this)
{
+ unsigned long long *new, *old;
+ int i;
+
/* note: we calculate these derived values in a manner consistent with
the calculations for cgroup accounting, as nearly as possible
( see linux sources: ./kernel/cgroup/rstat.c, root_cgroup_cputime ) */
@@ -576,13 +580,15 @@ static inline void stat_derive_unique (
this->new.xbsy
= this->new.xtot - this->new.xidl;
- // don't distort deltas when cpus are taken offline or brought online
- if (this->new.xusr < this->old.xusr
- || (this->new.xsys < this->old.xsys)
- || (this->new.xidl < this->old.xidl)
- || (this->new.xbsy < this->old.xbsy)
- || (this->new.xtot < this->old.xtot))
- memcpy(&this->old, &this->new, sizeof(struct stat_jifs));
+ // don't distort results when cpus are brought back online
+ new = (unsigned long long *)&this->new;
+ old = (unsigned long long *)&this->old;
+ for (i = 0; i < sizeof(struct stat_jifs) / sizeof(unsigned long long); i++) {
+ if (*(new++) < *(old++)) {
+ memcpy(&this->old, &this->new, sizeof(struct stat_jifs));
+ break;
+ }
+ }
} // end: stat_derive_unique
--
2.33.0

View File

@ -0,0 +1,75 @@
From e1df029e6c8bb166a6cec05dc12f699d84631bc9 Mon Sep 17 00:00:00 2001
From: Jim Warner <james.warner@comcast.net>
Date: Sat, 22 Jun 2024 00:00:00 -0500
Subject: [PATCH 1/3] library: implement guest/total tics change, <stat> api
This patch removes guest tics from the total lest they
be counted twice. Such tics have already been included
in user/nice values. For proof, just follow this path:
fs/proc/stat.c: show_stat() --->
kernel/sched/cputime.c: kcpustat_cpu_fetch()
Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/339
. Sep, 2020 - where guest distortion occurred
commit ec21588be108d092804eb72edbba2ba214bc6190
Signed-off-by: Jim Warner <james.warner@comcast.net>
---
library/include/stat.h | 6 +++---
library/stat.c | 12 ++++++++----
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/library/include/stat.h b/library/include/stat.h
index ff7c5b17..d8ca2add 100644
--- a/library/include/stat.h
+++ b/library/include/stat.h
@@ -45,8 +45,8 @@ enum stat_item {
STAT_TIC_IRQ, // ull_int "
STAT_TIC_SOFTIRQ, // ull_int "
STAT_TIC_STOLEN, // ull_int "
- STAT_TIC_GUEST, // ull_int "
- STAT_TIC_GUEST_NICE, // ull_int "
+ STAT_TIC_GUEST, // ull_int " (note: also included in USER)
+ STAT_TIC_GUEST_NICE, // ull_int " (note: also included in NICE)
STAT_TIC_DELTA_USER, // sl_int derived from above
STAT_TIC_DELTA_NICE, // sl_int "
@@ -63,7 +63,7 @@ enum stat_item {
STAT_TIC_SUM_SYSTEM, // ull_int derived from SYSTEM + IRQ + SOFTIRQ tics
STAT_TIC_SUM_IDLE, // ull_int derived from IDLE + IOWAIT tics
STAT_TIC_SUM_BUSY, // ull_int derived from SUM_TOTAL - SUM_IDLE tics
- STAT_TIC_SUM_TOTAL, // ull_int derived from sum of all 10 tics
+ STAT_TIC_SUM_TOTAL, // ull_int derived from sum of all tics, minus 2 GUEST tics
STAT_TIC_SUM_DELTA_USER, // sl_int derived from above
STAT_TIC_SUM_DELTA_SYSTEM, // sl_int "
diff --git a/library/stat.c b/library/stat.c
index 202dfa52..96672431 100644
--- a/library/stat.c
+++ b/library/stat.c
@@ -572,11 +572,15 @@ static inline void stat_derive_unique (
this->new.xidl
= this->new.idle
+ this->new.iowait;
+ /* note: we exclude guest tics from xtot since ...
+ 'user' already includes 'guest'
+ 'nice' already includes 'gnice'
+ ( see linux sources: ./kernel/sched/cputime.c, kcpustat_cpu_fetch ) */
this->new.xtot
- = this->new.xusr + this->new.xsys + this->new.xidl
- + this->new.stolen
- + this->new.guest
- + this->new.gnice;
+ = this->new.xusr
+ + this->new.xsys
+ + this->new.xidl
+ + this->new.stolen;
this->new.xbsy
= this->new.xtot - this->new.xidl;
--
2.33.0

View File

@ -0,0 +1,63 @@
From 09fbd70de33c451dde84254718ded2ccac48aed4 Mon Sep 17 00:00:00 2001
From: Jim Warner <james.warner@comcast.net>
Date: Wed, 20 Sep 2023 00:00:00 -0500
Subject: [PATCH] ps: don't lose tasks when --sort used with forest mode
In an issue cited below the loss of tasks was revealed
whenever the --sort option is used in combination with
forest mode. One could argue against such combinations
and print an error. But we'll take an easier approach.
This patch restores the prior version 3.3.17 behavior.
Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/304
Signed-off-by: Jim Warner <james.warner@comcast.net>
---
src/ps/display.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/src/ps/display.c b/src/ps/display.c
index e1a3b0da..325edf38 100644
--- a/src/ps/display.c
+++ b/src/ps/display.c
@@ -357,12 +357,12 @@ next_proc:
/***** forest output requires sorting by ppid; add start_time by default */
static void prep_forest_sort(void){
- sort_node *tmp_list = sort_list;
+ sort_node *endp, *tmp_list = sort_list;
const format_struct *incoming;
if(!sort_list) { /* assume start time order */
- incoming = search_format_array("ppid");
- if(!incoming) { fprintf(stderr, _("could not find ppid\n")); exit(1); }
+ incoming = search_format_array("start_time");
+ if(!incoming) { fprintf(stderr, _("could not find start_time\n")); exit(1); }
tmp_list = xmalloc(sizeof(sort_node));
tmp_list->reverse = PIDS_SORT_ASCEND;
tmp_list->typecode = '?'; /* what was this for? */
@@ -371,14 +371,15 @@ static void prep_forest_sort(void){
sort_list = tmp_list;
}
/* this is required for the forest option */
- incoming = search_format_array("start_time");
- if(!incoming) { fprintf(stderr, _("could not find start_time\n")); exit(1); }
+ incoming = search_format_array("ppid");
+ if(!incoming) { fprintf(stderr, _("could not find ppid\n")); exit(1); }
tmp_list = xmalloc(sizeof(sort_node));
tmp_list->reverse = PIDS_SORT_ASCEND;
tmp_list->typecode = '?'; /* what was this for? */
tmp_list->sr = incoming->sr;
- tmp_list->next = sort_list;
- sort_list = tmp_list;
+ tmp_list->next = NULL;
+ endp = sort_list; while(endp->next) endp = endp->next;
+ endp->next = tmp_list;
}
/* we rely on the POSIX requirement for zeroed memory */
--
GitLab

View File

@ -0,0 +1,78 @@
From 3fb34669d3a7e1c0c013a907aeae2c4117ba617e Mon Sep 17 00:00:00 2001
From: Jim Warner <james.warner@comcast.net>
Date: Sat, 22 Jun 2024 00:00:00 -0500
Subject: [PATCH 3/3] top: adapt to that guest/total tics change, <stat> api
Signed-off-by: Jim Warner <james.warner@comcast.net>
---
man/top.1 | 5 +----
src/top/top.c | 9 ---------
2 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/man/top.1 b/man/top.1
index 2e4f252d..067c2ef7 100644
--- a/man/top.1
+++ b/man/top.1
@@ -59,7 +59,7 @@ memory statistics and data for other users requires root privileges
.
.\" Document /////////////////////////////////////////////////////////////
.\" ----------------------------------------------------------------------
-.TH TOP 1 "August 2023" "procps-ng" "User Commands"
+.TH TOP 1 "June 2024" "procps-ng" "User Commands"
.\" ----------------------------------------------------------------------
.nh
@@ -542,9 +542,6 @@ Depending on your kernel version, the \fBst\fR field may not be shown.
\fBst\fR : time stolen from this vm by the hypervisor
.fi
-The `sy' value above also reflects the time running a virtual \*(Pu
-for guest operating systems, including those that have been niced.
-
Beyond the first tasks/threads line, there are alternate \*(PU display
modes available via the 4-way `t' \*(CT.
They show an abbreviated summary consisting of these elements:
diff --git a/src/top/top.c b/src/top/top.c
index 1383a17a..c1a08dc2 100644
--- a/src/top/top.c
+++ b/src/top/top.c
@@ -286,7 +286,6 @@ static enum stat_item Stat_items[] = {
STAT_TIC_DELTA_NICE, STAT_TIC_DELTA_IDLE,
STAT_TIC_DELTA_IOWAIT, STAT_TIC_DELTA_IRQ,
STAT_TIC_DELTA_SOFTIRQ, STAT_TIC_DELTA_STOLEN,
- STAT_TIC_DELTA_GUEST, STAT_TIC_DELTA_GUEST_NICE,
STAT_TIC_SUM_DELTA_USER, STAT_TIC_SUM_DELTA_SYSTEM,
#ifdef CORE_TYPE_NO
STAT_TIC_SUM_DELTA_TOTAL };
@@ -299,7 +298,6 @@ enum Rel_statitems {
stat_NI, stat_IL,
stat_IO, stat_IR,
stat_SI, stat_ST,
- stat_GU, stat_GN,
stat_SUM_USR, stat_SUM_SYS,
#ifdef CORE_TYPE_NO
stat_SUM_TOT };
@@ -6410,11 +6408,6 @@ static int sum_tics (struct stat_stack *this, const char *pfx, int nobuf) {
if (1 > tot_frme) idl_frme = tot_frme = 1;
scale = 100.0 / (float)tot_frme;
- /* account for VM tics not otherwise provided for ...
- ( with xtra-procps-debug.h, can't use PID_VAL w/ assignment ) */
- this->head[stat_SY].result.sl_int += rSv(stat_GU) + rSv(stat_GN);
- this->head[stat_SUM_SYS].result.sl_int += rSv(stat_GU) + rSv(stat_GN);
-
/* display some kinda' cpu state percentages
(who or what is explained by the passed prefix) */
if (Curwin->rc.graph_cpus) {
@@ -6464,8 +6457,6 @@ static int sum_unify (struct stat_stack *this, int nobuf) {
stack[stat_IR].result.sl_int += rSv(stat_IR, sl_int);
stack[stat_SI].result.sl_int += rSv(stat_SI, sl_int);
stack[stat_ST].result.sl_int += rSv(stat_ST, sl_int);
- stack[stat_GU].result.sl_int += rSv(stat_GU, sl_int);
- stack[stat_GN].result.sl_int += rSv(stat_GN, sl_int);
stack[stat_SUM_USR].result.sl_int += rSv(stat_SUM_USR, sl_int);
stack[stat_SUM_SYS].result.sl_int += rSv(stat_SUM_SYS, sl_int);
stack[stat_SUM_TOT].result.sl_int += rSv(stat_SUM_TOT, sl_int);
--
2.33.0

View File

@ -0,0 +1,33 @@
From bfb0eadc38e789737dec7f14dd7a7ac00f5f0761 Mon Sep 17 00:00:00 2001
From: Robert Malz <mail.robert.malz@gmail.com>
Date: Thu, 21 Sep 2023 16:45:49 +1000
Subject: [PATCH] uptime: fix output on 60 seconds
When procps_uptime will return 60 seconds uptime -p will not
provide any output except "up". To stay consistent with other
time units the expected output is "up 0 minutes".
References:
#302
Signed-off-by: Craig Small <csmall@dropbear.xyz>
---
library/uptime.c | 2 +-
1 files changed, 1 insertions(+), 1 deletion(-)
diff --git a/library/uptime.c b/library/uptime.c
index b41538f5..5faeefca 100644
--- a/library/uptime.c
+++ b/library/uptime.c
@@ -258,7 +258,7 @@ PROCPS_EXPORT char *procps_uptime_sprint_short(void)
comma += 1;
}
- if (upminutes || (!upminutes && uptime_secs < 60)) {
+ if (upminutes || (!upminutes && uptime_secs <= 60)) {
pos += sprintf(shortbuf + pos, "%s%d %s",
comma > 0 ? ", " : "", upminutes,
upminutes != 1 ? "minutes" : "minute");
--
GitLab

View File

@ -0,0 +1,29 @@
From 600cc2dff859aac525d62000316d957846da4a66 Mon Sep 17 00:00:00 2001
From: Chao Liu <liuchao173@huawei.com>
Date: Tue, 7 May 2024 03:42:34 +0000
Subject: [PATCH 1/2] uptime: Fix uptime return 0 user when systemd-pam is not
installed
When systemd-pam is not installed, systemd won't create files in /run/systemd/sessions/ and sd_get_sessions will return 0. However, the actual number of users is not 0. When sd_get_sessions return 0, uptime should use getutxent for statistics.
---
library/uptime.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/library/uptime.c b/library/uptime.c
index 52720cbc..0db38ee5 100644
--- a/library/uptime.c
+++ b/library/uptime.c
@@ -71,7 +71,9 @@ PROCPS_EXPORT int procps_users(void)
#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)
if (sd_booted() > 0)
- return sd_get_sessions(NULL);
+ numuser = sd_get_sessions(NULL);
+ if (numuser > 0)
+ return numuser;
#endif
setutent();
--
2.33.0

View File

@ -0,0 +1,82 @@
From c0c707ac435d6318fa8d5542906599867877465a Mon Sep 17 00:00:00 2001
From: Chao Liu <liuchao173@huawei.com>
Date: Tue, 7 May 2024 07:20:34 +0000
Subject: [PATCH 2/2] w: Fix w print 0 user when systemd-pam is not
installed
Signed-off-by: SuperSix173 <liuchao173@huawei.com>
---
src/w.c | 53 ++++++++++++++++++++++++++---------------------------
1 file changed, 26 insertions(+), 27 deletions(-)
diff --git a/src/w.c b/src/w.c
index fd6e75f..8e30e5d 100644
--- a/src/w.c
+++ b/src/w.c
@@ -805,37 +805,36 @@ int main(int argc, char **argv)
printf(_(" IDLE WHAT\n"));
}
#if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER)
- if (sd_booted() > 0) {
- char **sessions_list;
- int sessions;
- int i;
+ char **sessions_list;
+ int sessions = 0;
+ if (sd_booted() > 0)
sessions = sd_get_sessions (&sessions_list);
- if (sessions < 0 && sessions != -ENOENT)
- error(EXIT_FAILURE, -sessions, _("error getting sessions"));
-
- if (sessions >= 0) {
- for (int i = 0; i < sessions; i++) {
- char *name;
- int r;
-
- if ((r = sd_session_get_username(sessions_list[i], &name)) < 0)
- error(EXIT_FAILURE, -r, _("get user name failed"));
-
- if (user) {
- if (!strcmp(name, user))
- showinfo(sessions_list[i], name, NULL, longform,
- maxcmd, from, userlen, fromlen,
- ip_addresses, pids);
- } else {
- showinfo(sessions_list[i], name, NULL, longform, maxcmd,
- from, userlen, fromlen, ip_addresses, pids);
- }
- free(name);
- free(sessions_list[i]);
+
+ if (sessions < 0 && sessions != -ENOENT)
+ error(EXIT_FAILURE, -sessions, _("error getting sessions"));
+
+ if (sessions > 0) {
+ for (int i = 0; i < sessions; i++) {
+ char *name;
+ int r;
+
+ if ((r = sd_session_get_username(sessions_list[i], &name)) < 0)
+ error(EXIT_FAILURE, -r, _("get user name failed"));
+
+ if (user) {
+ if (!strcmp(name, user))
+ showinfo(sessions_list[i], name, NULL, longform,
+ maxcmd, from, userlen, fromlen,
+ ip_addresses, pids);
+ } else {
+ showinfo(sessions_list[i], name, NULL, longform, maxcmd,
+ from, userlen, fromlen, ip_addresses, pids);
}
- free(sessions_list);
+ free(name);
+ free(sessions_list[i]);
}
+ free(sessions_list);
} else {
#endif
#ifdef HAVE_UTMPX_H
--
2.33.0

View File

@ -1,6 +1,6 @@
Name: procps-ng
Version: 4.0.4
Release: 1
Release: 6
Summary: Utilities that provide system information.
License: GPL+ and GPLv2 and GPLv2+ and GPLv3+ and LGPLv2+
URL: https://sourceforge.net/projects/procps-ng/
@ -11,6 +11,14 @@ Source2: README.top
Patch1: openeuler-add-M-and-N-options-for-top.patch
Patch2: openeuler-top-exit-with-error-when-pid-overflow.patch
Patch3: backport-library-address-remaining-cpu-distortions-stat-api.patch
Patch4: backport-uptime-fix-output-on-60-seconds.patch
Patch5: backport-ps-don-t-lose-tasks-when-sort-used-with-forest-mode.patch
Patch6: backport-acknowledge-fix-for-the-lost-tasks-ps-issue.patch
Patch7: openeuler-uptime-Fix-uptime-return-0-user-when-systemd-pam-is-.patch
Patch8: openeuler-w-Fix-w-print-0-user-when-systemd-pam-is-not-install.patch
Patch9: backport-library-implement-guest-total-tics-change-stat-api.patch
Patch10: backport-top-adapt-to-that-guest-total-tics-change-stat-api.patch
BuildRequires: ncurses-devel libtool autoconf automake gcc gettext-devel systemd-devel
@ -93,6 +101,21 @@ ln -s %{_bindir}/pidof %{buildroot}%{_sbindir}/pidof
%{_mandir}/man*
%changelog
* Tue Jun 25 2024 Liu Chao <liuchao173@huawei.com> - 4.0.4-6
- top: adapt to guest/total tics change, <stat> api
* Thu May 9 2024 Liu Chao <liuchao173@huawei.com> - 4.0.4-5
- uptime/w: fix print 0 user when systemd-pam is not installed
* Thu Apr 25 2024 yinyongkang <yinyongkang@kylinos.cn> - 4.0.4-4
- ps: don't lose tasks when --sort used with forest mode
* Tue Apr 23 2024 yinyongkang <yinyongkang@kylinos.cn> - 4.0.4-3
- uptime: fix output on 60 seconds
* Tue Apr 02 2024 Liu Chao <liuchao173@huawei.com> - 4.0.4-2
- library: address remaining cpu distortions, <stat> api
* Wed Nov 01 2023 liweigang <weigangli99@gmail.com> - 4.0.4-1
- update to version v4.0.4