From 294a61d0028bf06a3f1d304cf88c6ad31583a0b17aa7bfe6380d040142154d8e Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Thu, 18 Feb 2010 11:23:10 +0000 Subject: [PATCH] . OBS-URL: https://build.opensuse.org/package/show/Base:System/procps?expand=0&rev=17 --- procps-3.2.7-accuracy.dif | 17 ++++++++++------- procps.changes | 6 ++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/procps-3.2.7-accuracy.dif b/procps-3.2.7-accuracy.dif index c0acd31..1345d87 100644 --- a/procps-3.2.7-accuracy.dif +++ b/procps-3.2.7-accuracy.dif @@ -1,5 +1,5 @@ --- ps/common.h -+++ ps/common.h 2008-09-16 18:57:14.862641102 +0200 ++++ ps/common.h 2008-09-16 16:57:14.862641102 +0000 @@ -302,6 +302,7 @@ extern int running_only; extern int screen_cols; extern int screen_rows; @@ -9,7 +9,7 @@ extern unsigned simple_select; extern sort_node *sort_list; --- ps/global.c -+++ ps/global.c 2008-09-16 18:56:28.218297961 +0200 ++++ ps/global.c 2008-09-16 16:56:28.218297961 +0000 @@ -70,6 +70,7 @@ int prefer_bsd_defaults = -1 int screen_cols = -1; int screen_rows = -1; @@ -37,7 +37,7 @@ simple_select = 0; sort_list = NULL; --- ps/output.c -+++ ps/output.c 2008-09-16 19:00:48.510541613 +0200 ++++ ps/output.c 2010-02-18 11:21:40.112125962 +0000 @@ -426,11 +426,12 @@ static int pr_etime(char *restrict const static int pr_c(char *restrict const outbuf, const proc_t *restrict const pp){ unsigned long long total_time; /* jiffies used by this process */ @@ -54,7 +54,7 @@ if (pcpu > 99U) pcpu = 99U; return snprintf(outbuf, COLWID, "%2u", pcpu); } -@@ -438,11 +439,12 @@ static int pr_c(char *restrict const out +@@ -438,24 +439,26 @@ static int pr_c(char *restrict const out static int pr_pcpu(char *restrict const outbuf, const proc_t *restrict const pp){ unsigned long long total_time; /* jiffies used by this process */ unsigned pcpu = 0; /* scaled %cpu, 999 means 99.9% */ @@ -65,12 +65,15 @@ if(include_dead_children) total_time += (pp->cutime + pp->cstime); - seconds = seconds_since_boot - pp->start_time / Hertz; - if(seconds) pcpu = (total_time * 1000ULL / Hertz) / seconds; +- if (pcpu > 999U) +- return snprintf(outbuf, COLWID, "%u", pcpu/10U); + jiffies = jiffies_since_boot - pp->start_time; + if(jiffies) pcpu = (total_time * 1000ULL) / jiffies; - if (pcpu > 999U) - return snprintf(outbuf, COLWID, "%u", pcpu/10U); ++ if (pcpu/10U => 100U) /* do not confuse the user by scale effects */ ++ return snprintf(outbuf, COLWID, "100"); return snprintf(outbuf, COLWID, "%u.%u", pcpu/10U, pcpu%10U); -@@ -451,11 +453,12 @@ static int pr_pcpu(char *restrict const + } + /* this is a "per-mill" format, like %cpu with no decimal point */ static int pr_cp(char *restrict const outbuf, const proc_t *restrict const pp){ unsigned long long total_time; /* jiffies used by this process */ unsigned pcpu = 0; /* scaled %cpu, 999 means 99.9% */ diff --git a/procps.changes b/procps.changes index 4c827b2..35148b8 100644 --- a/procps.changes +++ b/procps.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Feb 18 12:12:04 CET 2010 - werner@suse.de + +- Modify accuracy for %CPU calculation to avoid apperent CPU load + above 100% (bnc#496705) + ------------------------------------------------------------------- Fri Jan 29 15:24:32 CET 2010 - werner@suse.de