flist_del(&slave->slavelist);
slave->users--;
}
-
+
fio_mutex_remove(du->lock);
sfree(du);
}
!strcmp(dirent->d_name, ".."))
continue;
- sprintf(temppath, "%s/%s", slavesdir, dirent->d_name);
+ sprintf(temppath, "%s%s%s", slavesdir, FIO_OS_PATH_SEPARATOR, dirent->d_name);
/* Can we always assume that the slaves device entries
* are links to the real directories for the slave
* devices?
if (slavedu)
continue;
- sprintf(temppath, "%s/%s", slavesdir, slavepath);
+ sprintf(temppath, "%s%s%s", slavesdir, FIO_OS_PATH_SEPARATOR, slavepath);
__init_per_file_disk_util(td, majdev, mindev, temppath);
slavedu = disk_util_exists(majdev, mindev);
if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, ".."))
continue;
- sprintf(full_path, "%s/%s", path, dir->d_name);
+ sprintf(full_path, "%s%s%s", path, FIO_OS_PATH_SEPARATOR, dir->d_name);
if (!strcmp(dir->d_name, "dev")) {
if (!check_dev_match(majdev, mindev, full_path)) {
f->du = __init_disk_util(td, f);
}
-static void show_agg_stats(struct disk_util_agg *agg)
+static void show_agg_stats(struct disk_util_agg *agg, int terse)
{
if (!agg->slavecount)
return;
- log_info(", aggrios=%u/%u, aggrmerge=%u/%u, aggrticks=%u/%u,"
- " aggrin_queue=%u, aggrutil=%3.2f%%",
- agg->ios[0] / agg->slavecount,
- agg->ios[1] / agg->slavecount,
- agg->merges[0] / agg->slavecount,
- agg->merges[1] / agg->slavecount,
- agg->ticks[0] / agg->slavecount,
- agg->ticks[1] / agg->slavecount,
- agg->time_in_queue / agg->slavecount,
- agg->max_util.u.f);
+ if (!terse) {
+ log_info(", aggrios=%u/%u, aggrmerge=%u/%u, aggrticks=%u/%u,"
+ " aggrin_queue=%u, aggrutil=%3.2f%%",
+ agg->ios[0] / agg->slavecount,
+ agg->ios[1] / agg->slavecount,
+ agg->merges[0] / agg->slavecount,
+ agg->merges[1] / agg->slavecount,
+ agg->ticks[0] / agg->slavecount,
+ agg->ticks[1] / agg->slavecount,
+ agg->time_in_queue / agg->slavecount,
+ agg->max_util.u.f);
+ } else {
+ log_info(";slaves;%u;%u;%u;%u;%u;%u;%u;%3.2f%%",
+ agg->ios[0] / agg->slavecount,
+ agg->ios[1] / agg->slavecount,
+ agg->merges[0] / agg->slavecount,
+ agg->merges[1] / agg->slavecount,
+ agg->ticks[0] / agg->slavecount,
+ agg->ticks[1] / agg->slavecount,
+ agg->time_in_queue / agg->slavecount,
+ agg->max_util.u.f);
+ }
}
static void aggregate_slaves_stats(struct disk_util *masterdu)
last_majdev = last_mindev = -1;
}
-void print_disk_util(struct disk_util_stat *dus, struct disk_util_agg *agg)
+void print_disk_util(struct disk_util_stat *dus, struct disk_util_agg *agg,
+ int terse)
{
- double util;
+ double util = 0;
- util = (double) 100 * dus->io_ticks / (double) dus->msec;
+ if (dus->msec)
+ util = (double) 100 * dus->io_ticks / (double) dus->msec;
if (util > 100.0)
util = 100.0;
- if (agg->slavecount)
- log_info(" ");
+ if (!terse) {
+ if (agg->slavecount)
+ log_info(" ");
- log_info(" %s: ios=%u/%u, merge=%u/%u, ticks=%u/%u, "
- "in_queue=%u, util=%3.2f%%", dus->name,
+ log_info(" %s: ios=%u/%u, merge=%u/%u, ticks=%u/%u, "
+ "in_queue=%u, util=%3.2f%%", dus->name,
dus->ios[0], dus->ios[1],
dus->merges[0], dus->merges[1],
dus->ticks[0], dus->ticks[1],
dus->time_in_queue, util);
+ } else {
+ log_info(";%s;%u;%u;%u;%u;%u;%u;%u;%3.2f%%",
+ dus->name, dus->ios[0], dus->ios[1],
+ dus->merges[0], dus->merges[1],
+ dus->ticks[0], dus->ticks[1],
+ dus->time_in_queue, util);
+ }
/*
* If the device has slaves, aggregate the stats for
* those slave devices also.
*/
- if (agg->slavecount)
- show_agg_stats(agg);
+ show_agg_stats(agg, terse);
- log_info("\n");
+ if (!terse)
+ log_info("\n");
}
-void show_disk_util(void)
+void show_disk_util(int terse)
{
struct flist_head *entry;
struct disk_util *du;
if (flist_empty(&disk_list))
return;
- log_info("\nDisk stats (read/write):\n");
+ if (!terse)
+ log_info("\nDisk stats (read/write):\n");
flist_for_each(entry, &disk_list) {
du = flist_entry(entry, struct disk_util, list);
aggregate_slaves_stats(du);
- print_disk_util(&du->dus, &du->agg);
+ print_disk_util(&du->dus, &du->agg, terse);
}
}