/* Find the group and compute the minimum value of that group */
error_bits = (idx >> FIO_IO_U_PLAT_BITS) - 1;
/* Find the group and compute the minimum value of that group */
error_bits = (idx >> FIO_IO_U_PLAT_BITS) - 1;
fio_fp64_t *plist, unsigned long long **output,
unsigned long long *maxv, unsigned long long *minv)
{
fio_fp64_t *plist, unsigned long long **output,
unsigned long long *maxv, unsigned long long *minv)
{
unsigned int len, i, j = 0;
unsigned int oval_len = 0;
unsigned long long *ovals = NULL;
unsigned int len, i, j = 0;
unsigned int oval_len = 0;
unsigned long long *ovals = NULL;
{
unsigned int divisor, len, i, j = 0;
unsigned long long minv, maxv;
unsigned long long *ovals;
{
unsigned int divisor, len, i, j = 0;
unsigned long long minv, maxv;
unsigned long long *ovals;
- int is_last, per_line, scale_down, time_width;
+ int per_line, scale_down, time_width;
+ const char *pre = is_clat ? "clat" : " lat";
+ bool is_last;
char fmt[32];
len = calc_clat_percentiles(io_u_plat, nr, plist, &ovals, &maxv, &minv);
char fmt[32];
len = calc_clat_percentiles(io_u_plat, nr, plist, &ovals, &maxv, &minv);
if (calc_lat(&ts->lat_stat[ddir], &min, &max, &mean, &dev))
display_lat(" lat", min, max, mean, dev, out);
if (calc_lat(&ts->lat_stat[ddir], &min, &max, &mean, &dev))
display_lat(" lat", min, max, mean, dev, out);
show_clat_percentiles(ts->io_u_plat[ddir],
ts->clat_stat[ddir].samples,
ts->percentile_list,
show_clat_percentiles(ts->io_u_plat[ddir],
ts->clat_stat[ddir].samples,
ts->percentile_list,
}
if (calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev)) {
double p_of_agg = 100.0, fkb_base = (double)rs->kb_base;
}
if (calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev)) {
double p_of_agg = 100.0, fkb_base = (double)rs->kb_base;
}
log_buf(out, " bw (%5s/s): min=%5llu, max=%5llu, per=%3.2f%%, "
}
log_buf(out, " bw (%5s/s): min=%5llu, max=%5llu, per=%3.2f%%, "
- "avg=%5.02f, stdev=%5.02f, samples=%5lu\n",
+ "avg=%5.02f, stdev=%5.02f, samples=%" PRIu64 "\n",
bw_str, min, max, p_of_agg, mean, dev,
(&ts->bw_stat[ddir])->samples);
}
if (calc_lat(&ts->iops_stat[ddir], &min, &max, &mean, &dev)) {
log_buf(out, " iops : min=%5llu, max=%5llu, "
bw_str, min, max, p_of_agg, mean, dev,
(&ts->bw_stat[ddir])->samples);
}
if (calc_lat(&ts->iops_stat[ddir], &min, &max, &mean, &dev)) {
log_buf(out, " iops : min=%5llu, max=%5llu, "
- "avg=%5.02f, stdev=%5.02f, samples=%5lu\n",
+ "avg=%5.02f, stdev=%5.02f, samples=%" PRIu64 "\n",
min, max, mean, dev, (&ts->iops_stat[ddir])->samples);
}
}
min, max, mean, dev, (&ts->iops_stat[ddir])->samples);
}
}
-static int show_lat(double *io_u_lat, int nr, const char **ranges,
- const char *msg, struct buf_output *out)
+static bool show_lat(double *io_u_lat, int nr, const char **ranges,
+ const char *msg, struct buf_output *out)
log_buf(out, "%s%3.2f%%", ranges[i], io_u_lat[i]);
line++;
if (line == 5)
log_buf(out, "%s%3.2f%%", ranges[i], io_u_lat[i]);
line++;
if (line == 5)
else
log_buf(out, ";%llu;%llu;%f;%f", 0ULL, 0ULL, 0.0, 0.0);
else
log_buf(out, ";%llu;%llu;%f;%f", 0ULL, 0ULL, 0.0, 0.0);
len = calc_clat_percentiles(ts->io_u_plat[ddir],
ts->clat_stat[ddir].samples,
ts->percentile_list, &ovals, &maxv,
len = calc_clat_percentiles(ts->io_u_plat[ddir],
ts->clat_stat[ddir].samples,
ts->percentile_list, &ovals, &maxv,
else
log_buf(out, ";%lu", 0UL);
if (calc_lat(&ts->iops_stat[ddir], &min, &max, &mean, &dev))
else
log_buf(out, ";%lu", 0UL);
if (calc_lat(&ts->iops_stat[ddir], &min, &max, &mean, &dev))
- log_buf(out, ";%llu;%llu;%f;%f;%lu", min, max,
+ log_buf(out, ";%llu;%llu;%f;%f;%" PRIu64, min, max,
mean, dev, (&ts->iops_stat[ddir])->samples);
else
log_buf(out, ";%llu;%llu;%f;%f;%lu", 0ULL, 0ULL, 0.0, 0.0, 0UL);
mean, dev, (&ts->iops_stat[ddir])->samples);
else
log_buf(out, ";%llu;%llu;%f;%f;%lu", 0ULL, 0ULL, 0.0, 0.0, 0UL);
- struct json_object *dir_object, *tmp_object, *percentile_object, *clat_bins_object;
+ struct json_object *dir_object, *tmp_object, *percentile_object, *clat_bins_object = NULL;
json_object_add_value_float(tmp_object, "mean", mean);
json_object_add_value_float(tmp_object, "stddev", dev);
json_object_add_value_float(tmp_object, "mean", mean);
json_object_add_value_float(tmp_object, "stddev", dev);
len = calc_clat_percentiles(ts->io_u_plat[ddir],
ts->clat_stat[ddir].samples,
ts->percentile_list, &ovals, &maxv,
len = calc_clat_percentiles(ts->io_u_plat[ddir],
ts->clat_stat[ddir].samples,
ts->percentile_list, &ovals, &maxv,
- json_object_add_value_object(tmp_object, "bins", clat_bins_object);
+ if (ts->clat_percentiles)
+ json_object_add_value_object(tmp_object, "bins", clat_bins_object);
+
for(i = 0; i < FIO_IO_U_PLAT_NR; i++) {
if (ts->io_u_plat[ddir][i]) {
snprintf(buf, sizeof(buf), "%llu", plat_idx_to_val(i));
for(i = 0; i < FIO_IO_U_PLAT_NR; i++) {
if (ts->io_u_plat[ddir][i]) {
snprintf(buf, sizeof(buf), "%llu", plat_idx_to_val(i));
json_object_add_value_int(tmp_object, "max", max);
json_object_add_value_float(tmp_object, "mean", mean);
json_object_add_value_float(tmp_object, "stddev", dev);
json_object_add_value_int(tmp_object, "max", max);
json_object_add_value_float(tmp_object, "mean", mean);
json_object_add_value_float(tmp_object, "stddev", dev);
if (ovals)
free(ovals);
if (calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev)) {
if (rs->agg[ddir]) {
if (ovals)
free(ovals);
if (calc_lat(&ts->bw_stat[ddir], &min, &max, &mean, &dev)) {
if (rs->agg[ddir]) {
struct thread_data *td;
struct thread_stat *threadstats, *ts;
int i, j, k, nr_ts, last_ts, idx;
struct thread_data *td;
struct thread_stat *threadstats, *ts;
int i, j, k, nr_ts, last_ts, idx;
struct json_object *root = NULL;
struct json_array *array = NULL;
struct buf_output output[FIO_OUTPUT_NR];
struct json_object *root = NULL;
struct json_array *array = NULL;
struct buf_output output[FIO_OUTPUT_NR];
ts->percentile_precision = td->o.percentile_precision;
memcpy(ts->percentile_list, td->o.percentile_list, sizeof(td->o.percentile_list));
opt_lists[j] = &td->opt_list;
ts->percentile_precision = td->o.percentile_precision;
memcpy(ts->percentile_list, td->o.percentile_list, sizeof(td->o.percentile_list));
opt_lists[j] = &td->opt_list;
} else if (ts->kb_base != td->o.kb_base && !kb_base_warned) {
log_info("fio: kb_base differs for jobs in group, using"
" %u as the base\n", ts->kb_base);
} else if (ts->kb_base != td->o.kb_base && !kb_base_warned) {
log_info("fio: kb_base differs for jobs in group, using"
" %u as the base\n", ts->kb_base);
} else if (ts->unit_base != td->o.unit_base && !unit_base_warned) {
log_info("fio: unit_base differs for jobs in group, using"
" %u as the base\n", ts->unit_base);
} else if (ts->unit_base != td->o.unit_base && !unit_base_warned) {
log_info("fio: unit_base differs for jobs in group, using"
" %u as the base\n", ts->unit_base);
log_err("fio: failed to unlink %s: %s\n", fio_status_file_path,
strerror(errno));
log_err("fio: disabling status file updates\n");
log_err("fio: failed to unlink %s: %s\n", fio_status_file_path,
strerror(errno));
log_err("fio: disabling status file updates\n");
if (status_interval) {
if (!status_interval_init) {
fio_gettime(&status_time, NULL);
if (status_interval) {
if (!status_interval_init) {
fio_gettime(&status_time, NULL);
} else if (mtime_since_now(&status_time) >= status_interval) {
show_running_run_stats();
fio_gettime(&status_time, NULL);
} else if (mtime_since_now(&status_time) >= status_interval) {
show_running_run_stats();
fio_gettime(&status_time, NULL);
- this_window = elapsed - iolog->avg_last;
- if (elapsed < iolog->avg_last)
- return iolog->avg_last - elapsed;
+ this_window = elapsed - iolog->avg_last[ddir];
+ if (elapsed < iolog->avg_last[ddir])
+ return iolog->avg_last[ddir] - elapsed;
- _add_stat_to_log(iolog, elapsed, td->o.log_max != 0);
+ __add_stat_to_log(iolog, ddir, elapsed, td->o.log_max != 0);
add_log_sample(td, td->lat_log, sample_val(nsec), ddir, bs,
offset);
add_log_sample(td, td->lat_log, sample_val(nsec), ddir, bs,
offset);