From: Florian Forster Date: Wed, 17 Oct 2012 14:08:07 +0000 (+0200) Subject: disk plugin: Multiply the average read/write latency with the interval. X-Git-Tag: collectd-5.0.5~2^2 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=b3c87d5576e385a407081f86c9a3b84fa6983c0f;p=collectd.git disk plugin: Multiply the average read/write latency with the interval. 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! --- diff --git a/src/disk.c b/src/disk.c index 6187459f..4a78f1bd 100644 --- a/src/disk.c +++ b/src/disk.c @@ -235,6 +235,16 @@ static void disk_submit (const char *plugin_instance, 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) { @@ -579,13 +589,11 @@ static int disk_read (void) 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;