projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Request kernel version in reported issues
[collectd.git]
/
src
/
disk.c
diff --git
a/src/disk.c
b/src/disk.c
index
206862b
..
c78df4e
100644
(file)
--- a/
src/disk.c
+++ b/
src/disk.c
@@
-303,9
+303,7
@@
static void submit_io_time(char const *plugin_instance, derive_t io_time,
plugin_dispatch_values(&vl);
} /* void submit_io_time */
plugin_dispatch_values(&vl);
} /* void submit_io_time */
-#endif /* KERNEL_FREEBSD || KERNEL_LINUX */
-#if KERNEL_LINUX
static void submit_in_progress(char const *disk_name, gauge_t in_progress) {
value_list_t vl = VALUE_LIST_INIT;
static void submit_in_progress(char const *disk_name, gauge_t in_progress) {
value_list_t vl = VALUE_LIST_INIT;
@@
-317,7
+315,9
@@
static void submit_in_progress(char const *disk_name, gauge_t in_progress) {
plugin_dispatch_values(&vl);
}
plugin_dispatch_values(&vl);
}
+#endif /* KERNEL_FREEBSD || KERNEL_LINUX */
+#if KERNEL_LINUX
static counter_t disk_calc_time_incr(counter_t delta_time,
counter_t delta_ops) {
double interval = CDTIME_T_TO_DOUBLE(plugin_get_interval());
static counter_t disk_calc_time_incr(counter_t delta_time,
counter_t delta_ops) {
double interval = CDTIME_T_TO_DOUBLE(plugin_get_interval());
@@
-544,6
+544,7
@@
static int disk_read(void) {
const char *disk_name;
long double read_time, write_time, busy_time, total_duration;
const char *disk_name;
long double read_time, write_time, busy_time, total_duration;
+ uint64_t queue_length;
for (retry = 0, dirty = 1; retry < 5 && dirty == 1; retry++) {
if (snap != NULL)
for (retry = 0, dirty = 1; retry < 5 && dirty == 1; retry++) {
if (snap != NULL)
@@
-646,10
+647,12
@@
static int disk_read(void) {
}
if (devstat_compute_statistics(snap_iter, NULL, 1.0, DSM_TOTAL_BUSY_TIME,
&busy_time, DSM_TOTAL_DURATION,
}
if (devstat_compute_statistics(snap_iter, NULL, 1.0, DSM_TOTAL_BUSY_TIME,
&busy_time, DSM_TOTAL_DURATION,
- &total_duration, DSM_NONE) != 0) {
+ &total_duration, DSM_QUEUE_LENGTH,
+ &queue_length, DSM_NONE) != 0) {
WARNING("%s", devstat_errbuf);
} else {
submit_io_time(disk_name, busy_time, total_duration);
WARNING("%s", devstat_errbuf);
} else {
submit_io_time(disk_name, busy_time, total_duration);
+ submit_in_progress(disk_name, (gauge_t)queue_length);
}
}
geom_stats_snapshot_free(snap);
}
}
geom_stats_snapshot_free(snap);
@@
-660,7
+663,6
@@
static int disk_read(void) {
char *fields[32];
int numfields;
char *fields[32];
int numfields;
- int fieldshift = 0;
int minor = 0;
int minor = 0;
@@
-681,14
+683,8
@@
static int disk_read(void) {
diskstats_t *ds, *pre_ds;
if ((fh = fopen("/proc/diskstats", "r")) == NULL) {
diskstats_t *ds, *pre_ds;
if ((fh = fopen("/proc/diskstats", "r")) == NULL) {
- fh = fopen("/proc/partitions", "r");
- if (fh == NULL) {
- ERROR("disk plugin: fopen (/proc/{diskstats,partitions}) failed.");
- return -1;
- }
-
- /* Kernel is 2.4.* */
- fieldshift = 1;
+ ERROR("disk plugin: fopen(\"/proc/diskstats\"): %s", STRERRNO);
+ return -1;
}
while (fgets(buffer, sizeof(buffer), fh) != NULL) {
}
while (fgets(buffer, sizeof(buffer), fh) != NULL) {
@@
-697,12
+693,13
@@
static int disk_read(void) {
numfields = strsplit(buffer, fields, 32);
numfields = strsplit(buffer, fields, 32);
- if ((numfields != (14 + fieldshift)) && (numfields != 7))
+ /* need either 7 fields (partition) or at least 14 fields */
+ if ((numfields != 7) && (numfields < 14))
continue;
minor = atoll(fields[1]);
continue;
minor = atoll(fields[1]);
- disk_name = fields[2
+ fieldshift
];
+ disk_name = fields[2];
for (ds = disklist, pre_ds = disklist; ds != NULL;
pre_ds = ds, ds = ds->next)
for (ds = disklist, pre_ds = disklist; ds != NULL;
pre_ds = ds, ds = ds->next)
@@
-731,28
+728,26
@@
static int disk_read(void) {
read_sectors = atoll(fields[4]);
write_ops = atoll(fields[5]);
write_sectors = atoll(fields[6]);
read_sectors = atoll(fields[4]);
write_ops = atoll(fields[5]);
write_sectors = atoll(fields[6]);
- } else if (numfields == (14 + fieldshift)) {
- read_ops = atoll(fields[3 + fieldshift]);
- write_ops = atoll(fields[7 + fieldshift]);
+ } else {
+ assert(numfields >= 14);
+ read_ops = atoll(fields[3]);
+ write_ops = atoll(fields[7]);
- read_sectors = atoll(fields[5
+ fieldshift
]);
- write_sectors = atoll(fields[9
+ fieldshift
]);
+ read_sectors = atoll(fields[5]);
+ write_sectors = atoll(fields[9]);
- if (
(fieldshift == 0) || (minor == 0)
) {
+ if (
minor == 0
) {
is_disk = 1;
is_disk = 1;
- read_merged = atoll(fields[4
+ fieldshift
]);
- read_time = atoll(fields[6
+ fieldshift
]);
- write_merged = atoll(fields[8
+ fieldshift
]);
- write_time = atoll(fields[10
+ fieldshift
]);
+ read_merged = atoll(fields[4]);
+ read_time = atoll(fields[6]);
+ write_merged = atoll(fields[8]);
+ write_time = atoll(fields[10]);
- in_progress = atof(fields[11
+ fieldshift
]);
+ in_progress = atof(fields[11]);
- io_time = atof(fields[12
+ fieldshift
]);
- weighted_time = atof(fields[13
+ fieldshift
]);
+ io_time = atof(fields[12]);
+ weighted_time = atof(fields[13]);
}
}
- } else {
- DEBUG("numfields = %i; => unknown file format.", numfields);
- continue;
}
{
}
{