summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ae76b09)
raw | patch | inline | side by side (parent: ae76b09)
author | Florian Forster <octo@collectd.org> | |
Wed, 17 Oct 2012 14:08:07 +0000 (16:08 +0200) | ||
committer | Florian Forster <octo@collectd.org> | |
Wed, 17 Oct 2012 14:15:05 +0000 (16:15 +0200) |
The counter/derive will later be divided by the interval, resulting in too
small rates (for interval > 1.0).
Should fix issue #150. Thanks to Manuel Sanmartin for identifying this problem!
small rates (for interval > 1.0).
Should fix issue #150. Thanks to Manuel Sanmartin for identifying this problem!
src/disk.c | patch | blob | history |
diff --git a/src/disk.c b/src/disk.c
index 6187459f8e93fd0088d6b5646f19b204e1e1827e..4a78f1bdbfb060ad1c57109dbe6acaf8c9c4dd2a 100644 (file)
--- a/src/disk.c
+++ b/src/disk.c
plugin_dispatch_values (&vl);
} /* void disk_submit */
+#if KERNEL_LINUX
+static counter_t disk_calc_time_incr (counter_t delta_time, counter_t delta_ops)
+{
+ double avg_time = ((double) delta_time) / ((double) delta_ops);
+ double avg_time_incr = ((double) interval_g) * avg_time;
+
+ return ((counter_t) (avg_time_incr + .5));
+}
+#endif
+
#if HAVE_IOKIT_IOKITLIB_H
static signed long long dict_get_value (CFDictionaryRef dict, const char *key)
{
diff_write_time = write_time - ds->write_time;
if (diff_read_ops != 0)
- ds->avg_read_time += (diff_read_time
- + (diff_read_ops / 2))
- / diff_read_ops;
+ ds->avg_read_time += disk_calc_time_incr (
+ diff_read_time, diff_read_ops);
if (diff_write_ops != 0)
- ds->avg_write_time += (diff_write_time
- + (diff_write_ops / 2))
- / diff_write_ops;
+ ds->avg_write_time += disk_calc_time_incr (
+ diff_write_time, diff_write_ops);
ds->read_ops = read_ops;
ds->read_time = read_time;