f->du = __init_disk_util(td, f);
}
-static void show_agg_stats(struct disk_util_agg *agg, int terse)
+static void show_agg_stats(struct disk_util_agg *agg, int terse,
+ struct buf_output *out)
{
if (!agg->slavecount)
return;
if (!terse) {
- log_info(", aggrios=%llu/%llu, aggrmerge=%llu/%llu, "
+ log_buf(out, ", aggrios=%llu/%llu, aggrmerge=%llu/%llu, "
"aggrticks=%llu/%llu, aggrin_queue=%llu, "
"aggrutil=%3.2f%%",
(unsigned long long) agg->ios[0] / agg->slavecount,
(unsigned long long) agg->time_in_queue / agg->slavecount,
agg->max_util.u.f);
} else {
- log_info(";slaves;%llu;%llu;%llu;%llu;%llu;%llu;%llu;%3.2f%%",
+ log_buf(out, ";slaves;%llu;%llu;%llu;%llu;%llu;%llu;%llu;%3.2f%%",
(unsigned long long) agg->ios[0] / agg->slavecount,
(unsigned long long) agg->ios[1] / agg->slavecount,
(unsigned long long) agg->merges[0] / agg->slavecount,
}
void print_disk_util(struct disk_util_stat *dus, struct disk_util_agg *agg,
- int terse)
+ int terse, struct buf_output *out)
{
double util = 0;
if (!terse) {
if (agg->slavecount)
- log_info(" ");
+ log_buf(out, " ");
- log_info(" %s: ios=%llu/%llu, merge=%llu/%llu, "
+ log_buf(out, " %s: ios=%llu/%llu, merge=%llu/%llu, "
"ticks=%llu/%llu, in_queue=%llu, util=%3.2f%%",
dus->name,
(unsigned long long) dus->s.ios[0],
(unsigned long long) dus->s.time_in_queue,
util);
} else {
- log_info(";%s;%llu;%llu;%llu;%llu;%llu;%llu;%llu;%3.2f%%",
+ log_buf(out, ";%s;%llu;%llu;%llu;%llu;%llu;%llu;%llu;%3.2f%%",
dus->name,
(unsigned long long) dus->s.ios[0],
(unsigned long long) dus->s.ios[1],
* If the device has slaves, aggregate the stats for
* those slave devices also.
*/
- show_agg_stats(agg, terse);
+ show_agg_stats(agg, terse, out);
if (!terse)
- log_info("\n");
+ log_buf(out, "\n");
}
void json_array_add_disk_util(struct disk_util_stat *dus,
}
}
-void show_disk_util(int terse, struct json_object *parent)
+void show_disk_util(int terse, struct json_object *parent,
+ struct buf_output *out)
{
struct flist_head *entry;
struct disk_util *du;
+ bool do_json;
+
+ if (!disk_util_mutex)
+ return;
fio_mutex_down(disk_util_mutex);
return;
}
- if (output_format == FIO_OUTPUT_JSON)
- assert(parent);
+ if ((output_format & FIO_OUTPUT_JSON) && parent)
+ do_json = true;
+ else
+ do_json = false;
- if (!terse && output_format != FIO_OUTPUT_JSON)
- log_info("\nDisk stats (read/write):\n");
+ if (!terse && !do_json)
+ log_buf(out, "\nDisk stats (read/write):\n");
- if (output_format == FIO_OUTPUT_JSON)
+ if (do_json)
json_object_add_disk_utils(parent, &disk_list);
- else
+ else if (output_format & ~(FIO_OUTPUT_JSON | FIO_OUTPUT_JSON_PLUS)) {
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, terse);
+ print_disk_util(&du->dus, &du->agg, terse, out);
}
+ }
fio_mutex_up(disk_util_mutex);
}