cpufreq plugin: Limit reported value of percent to 100.1
authorPavel Rochnyack <pavel2000@ngs.ru>
Sat, 27 Oct 2018 17:02:22 +0000 (00:02 +0700)
committerPavel Rochnyack <pavel2000@ngs.ru>
Sat, 27 Oct 2018 17:04:09 +0000 (00:04 +0700)
cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state \
; sleep 10 ; cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
2664000 463368
1998000 59724070
2664000 463385
1998000 59725054

The sum of counters change is 1001, which produces reported value near
to 100.1%. I got calculated ds[0] = 100.100053 and such value produces gap on
charts.

Added limit to avoid such.

src/cpufreq.c

index 3e3244c..a81cf46 100644 (file)
@@ -172,6 +172,12 @@ static void cpufreq_read_stats(int cpu) {
     gauge_t g;
     if (value_to_rate(&g, (value_t){.derive = time}, DS_TYPE_DERIVE, now,
                       &(cpu_data[cpu].time_state[state_index])) == 0) {
+      /*
+       * Due to some inaccuracy reported value can be a bit greatrer than 100.1.
+       * That produces gaps on charts.
+       */
+      if (g > 100.1)
+        g = 100.1;
       cpufreq_submit(cpu, "percent", state, &(value_t){.gauge = g});
     }
     state_index++;