+ last_majdev = last_mindev = -1;
+ fio_mutex_up(disk_util_mutex);
+ fio_mutex_remove(disk_util_mutex);
+}
+
+void print_disk_util(struct disk_util_stat *dus, struct disk_util_agg *agg,
+ int terse)
+{
+ double util = 0;
+
+ if (dus->msec)
+ util = (double) 100 * dus->io_ticks / (double) dus->msec;
+ if (util > 100.0)
+ util = 100.0;
+
+ 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,
+ 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.
+ */
+ show_agg_stats(agg, terse);
+
+ if (!terse)
+ log_info("\n");
+}
+
+static void print_disk_util_json(struct disk_util *du, struct json_array *array)
+{
+ double util = 0;
+ struct disk_util_stat *dus = &du->dus;
+ struct disk_util_agg *agg = &du->agg;
+ struct json_object *obj;
+
+ obj = json_create_object();
+ json_array_add_value_object(array, obj);
+
+ if (dus->msec)
+ util = (double) 100 * dus->io_ticks / (double) dus->msec;
+ if (util > 100.0)
+ util = 100.0;
+
+
+ json_object_add_value_string(obj, "name", dus->name);
+ json_object_add_value_int(obj, "read_ios", dus->ios[0]);
+ json_object_add_value_int(obj, "write_ios", dus->ios[1]);
+ json_object_add_value_int(obj, "read_merges", dus->merges[0]);
+ json_object_add_value_int(obj, "write_merges", dus->merges[1]);
+ json_object_add_value_int(obj, "read_ticks", dus->ticks[0]);
+ json_object_add_value_int(obj, "write_ticks", dus->ticks[1]);
+ json_object_add_value_int(obj, "in_queue", dus->time_in_queue);
+ json_object_add_value_float(obj, "util", util);
+