43 lines
1.4 KiB
Diff
43 lines
1.4 KiB
Diff
diff -up sysstat-9.0.6.1/mpstat.c.tl sysstat-9.0.6.1/mpstat.c
|
|
--- sysstat-9.0.6.1/mpstat.c.tl 2009-09-12 20:59:04.000000000 +0200
|
|
+++ sysstat-9.0.6.1/mpstat.c 2010-04-19 10:42:01.000000000 +0200
|
|
@@ -272,10 +272,21 @@ void write_stats_core(int prev, int curr
|
|
/* Recalculate itv for current proc */
|
|
pc_itv = get_per_cpu_interval(scc, scp);
|
|
|
|
- if (!pc_itv) {
|
|
- /* Current CPU is offline */
|
|
+ /* if the CPU is offline it is omited from /proc/stat
|
|
+ so the sum of all values is zero */
|
|
+ if ((scc->cpu_user + scc->cpu_nice + scc->cpu_sys +
|
|
+ scc->cpu_iowait + scc->cpu_idle + scc->cpu_steal +
|
|
+ scc->cpu_hardirq + scc->cpu_softirq) == 0) {
|
|
printf(" 0.00 0.00 0.00 0.00 0.00 0.00"
|
|
" 0.00 0.00 0.00\n");
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ /* if the CPU is tickless then
|
|
+ there is no change in CPU values but the sum of values is not null */
|
|
+ if (!pc_itv) {
|
|
+ printf(" 0.00 0.00 0.00 0.00 0.00 0.00"
|
|
+ " 0.00 0.00 100.00\n");
|
|
}
|
|
else {
|
|
printf(" %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f"
|
|
@@ -643,6 +654,14 @@ void rw_mpstat_loop(int dis_hdr, int row
|
|
scc = st_cpu[curr] + cpu;
|
|
scp = st_cpu[!curr] + cpu;
|
|
*scc = *scp;
|
|
+ scc->cpu_user = 0;
|
|
+ scc->cpu_nice = 0;
|
|
+ scc->cpu_sys = 0;
|
|
+ scc->cpu_iowait = 0;
|
|
+ scc->cpu_idle = 0;
|
|
+ scc->cpu_steal = 0;
|
|
+ scc->cpu_hardirq = 0;
|
|
+ scc->cpu_softirq = 0;
|
|
}
|
|
|
|
/* Get time */
|