#include "fio.h"
static int last_majdev, last_mindev;
-static struct itimerval itimer;
static struct list_head disk_list = LIST_HEAD_INIT(disk_list);
char line[256];
FILE *f;
char *p;
+ int ret;
+
+ dprint(FD_DISKUTIL, "open stat file: %s\n", du->path);
f = fopen(du->path, "r");
if (!f)
return 1;
}
- if (sscanf(p, "%u %u %llu %u %u %u %llu %u %u %u %u\n", &dus->ios[0], &dus->merges[0], &dus->sectors[0], &dus->ticks[0], &dus->ios[1], &dus->merges[1], &dus->sectors[1], &dus->ticks[1], &in_flight, &dus->io_ticks, &dus->time_in_queue) != 11) {
- fclose(f);
- return 1;
- }
+ dprint(FD_DISKUTIL, "%s: %s", du->path, p);
+ ret = sscanf(p, "%u %u %llu %u %u %u %llu %u %u %u %u\n", &dus->ios[0],
+ &dus->merges[0], &dus->sectors[0],
+ &dus->ticks[0], &dus->ios[1],
+ &dus->merges[1], &dus->sectors[1],
+ &dus->ticks[1], &in_flight,
+ &dus->io_ticks, &dus->time_in_queue);
fclose(f);
- return 0;
+ dprint(FD_DISKUTIL, "%s: stat read ok? %d\n", du->path, ret == 1);
+ return ret != 11;
}
static void update_io_tick_disk(struct disk_util *du)
struct list_head *entry;
struct disk_util *du;
+ dprint(FD_DISKUTIL, "update io ticks\n");
+
list_for_each(entry, &disk_list) {
du = list_entry(entry, struct disk_util, list);
update_io_tick_disk(du);
struct disk_util *du, *__du;
struct list_head *entry;
+ dprint(FD_DISKUTIL, "add maj/min %d/%d: %s\n", majdev, mindev, path);
+
du = malloc(sizeof(*du));
memset(du, 0, sizeof(*du));
INIT_LIST_HEAD(&du->list);
list_for_each(entry, &disk_list) {
__du = list_entry(entry, struct disk_util, list);
+ dprint(FD_DISKUTIL, "found %s in list\n", __du->name);
+
if (!strcmp(du->name, __du->name)) {
free(du->name);
free(du);
}
}
+ dprint(FD_DISKUTIL, "add %s to list\n", du->name);
+
fio_gettime(&du->time, NULL);
get_io_ticks(du, &du->last_dus);
mindev = minor(st.st_dev);
}
+ dprint(FD_DISKUTIL, "%s belongs to maj/min %d/%d\n", f->file_name,
+ majdev, mindev);
+
du = disk_util_exists(majdev, mindev);
if (du) {
if (td->o.ioscheduler && !td->sysfs_root)
last_mindev = mindev;
last_majdev = majdev;
-
+
sprintf(foo, "/sys/block");
if (!find_block_dir(majdev, mindev, foo))
return;
__init_disk_util(td, f);
}
-void disk_util_timer_arm(void)
-{
- itimer.it_value.tv_sec = 0;
- itimer.it_value.tv_usec = DISK_UTIL_MSEC * 1000;
- setitimer(ITIMER_REAL, &itimer, NULL);
-}
-
void show_disk_util(void)
{
struct disk_util_stat *dus;
if (util > 100.0)
util = 100.0;
- log_info(" %s: ios=%u/%u, merge=%u/%u, ticks=%u/%u, in_queue=%u, util=%3.2f%%\n", du->name, dus->ios[0], dus->ios[1], dus->merges[0], dus->merges[1], dus->ticks[0], dus->ticks[1], dus->time_in_queue, util);
+ log_info(" %s: ios=%u/%u, merge=%u/%u, ticks=%u/%u, "
+ "in_queue=%u, util=%3.2f%%\n", du->name,
+ dus->ios[0], dus->ios[1],
+ dus->merges[0], dus->merges[1],
+ dus->ticks[0], dus->ticks[1],
+ dus->time_in_queue, util);
}
/*