sysstat/sysstat-9.0.6.1-tickless.patch
2010-04-19 09:12:40 +00:00

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 */