X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=stat.c;h=bf87917c2956eb60729fa9ea95ac93b1cbe1ed50;hp=7c843e6b1423497ba3b0bf6b44227285d9c1e6c7;hb=ce4d13ca162df4127ec3b5911553802c53396705;hpb=5d89c625949d8d4ae4abaefbc77b90d79cc8d09a diff --git a/stat.c b/stat.c index 7c843e6b..bf87917c 100644 --- a/stat.c +++ b/stat.c @@ -170,7 +170,7 @@ unsigned int calc_clat_percentiles(uint64_t *io_u_plat, unsigned long long nr, is_last = false; for (i = 0; i < FIO_IO_U_PLAT_NR && !is_last; i++) { sum += io_u_plat[i]; - while (sum >= (plist[j].u.f / 100.0 * nr)) { + while (sum >= ((long double) plist[j].u.f / 100.0 * nr)) { assert(plist[j].u.f <= 100.0); ovals[j] = plat_idx_to_val(i); @@ -187,6 +187,9 @@ unsigned int calc_clat_percentiles(uint64_t *io_u_plat, unsigned long long nr, } } + if (!is_last) + log_err("fio: error calculating latency percentiles\n"); + *output = ovals; return len; } @@ -1088,7 +1091,8 @@ static void add_ddir_status_json(struct thread_stat *ts, len = 0; percentile_object = json_create_object(); - json_object_add_value_object(tmp_object, "percentile", percentile_object); + if (ts->clat_percentiles) + json_object_add_value_object(tmp_object, "percentile", percentile_object); for (i = 0; i < len; i++) { snprintf(buf, sizeof(buf), "%f", ts->percentile_list[i].u.f); json_object_add_value_int(percentile_object, (const char *)buf, ovals[i]); @@ -1127,6 +1131,8 @@ static void add_ddir_status_json(struct thread_stat *ts, 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 (ts->lat_percentiles) + json_object_add_value_object(tmp_object, "percentile", percentile_object); if (output_format & FIO_OUTPUT_JSON_PLUS && ts->lat_percentiles) json_object_add_value_object(tmp_object, "bins", clat_bins_object); @@ -1238,12 +1244,13 @@ static void show_thread_status_terse_all(struct thread_stat *ts, /* Additional output if continue_on_error set - default off*/ if (ts->continue_on_error) log_buf(out, ";%llu;%d", (unsigned long long) ts->total_err_count, ts->first_error); - if (ver == 2) - log_buf(out, "\n"); /* Additional output if description is set */ - if (strlen(ts->description)) + if (strlen(ts->description)) { + if (ver == 2) + log_buf(out, "\n"); log_buf(out, ";%s", ts->description); + } log_buf(out, "\n"); } @@ -1676,11 +1683,14 @@ void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src, dst->io_u_submit[k] += src->io_u_submit[k]; dst->io_u_complete[k] += src->io_u_complete[k]; } - for (k = 0; k < FIO_IO_U_LAT_N_NR; k++) { + + for (k = 0; k < FIO_IO_U_LAT_N_NR; k++) dst->io_u_lat_n[k] += src->io_u_lat_n[k]; + for (k = 0; k < FIO_IO_U_LAT_U_NR; k++) dst->io_u_lat_u[k] += src->io_u_lat_u[k]; + for (k = 0; k < FIO_IO_U_LAT_M_NR; k++) dst->io_u_lat_m[k] += src->io_u_lat_m[k]; - } + for (k = 0; k < FIO_IO_U_PLAT_NR; k++) dst->io_u_sync_plat[k] += src->io_u_sync_plat[k];