From: Vincent Fu Date: Wed, 13 Jul 2016 18:00:59 +0000 (-0400) Subject: JSON output, code formatting changes X-Git-Tag: fio-2.16~3^2~33 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=6da94b076ca08f884dc83c9978bc995848dea0e8 JSON output, code formatting changes 1. Change 'criterion' to match the specified limit. It will always be a string. If the specified limit was a percentage, 'criterion' will also be a percentage (e.g., "0.0123%"). If the specified limit was not a percentage, 'criterion' will be a number (e.g., "12345"). 2. Move JSON mean IOPS, BW to the top of the steadystate['data'] section --- diff --git a/stat.c b/stat.c index 42fe0faf..68a4a276 100644 --- a/stat.c +++ b/stat.c @@ -1260,11 +1260,12 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts, struct json_object *data; struct json_array *iops, *bw; struct steadystate_data *ss = ts->ss; - double mean_iops = 0.0, mean_bw = 0.0; + unsigned long long sum_iops, sum_bw; + double mean_iops, mean_bw; int i, x; - char ss_option[64]; + char ss_buf[64]; - snprintf(ss_option, sizeof(ss_option), "%s%s:%f%s", + snprintf(ss_buf, sizeof(ss_buf), "%s%s:%f%s", ss->check_iops ? "iops" : "bw", ss->check_slope ? "_slope" : "", (float) ss->limit, @@ -1272,11 +1273,13 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts, tmp = json_create_object(); json_object_add_value_object(root, "steadystate", tmp); - json_object_add_value_string(tmp, "ss", ss_option); + json_object_add_value_string(tmp, "ss", ss_buf); json_object_add_value_int(tmp, "duration", (int)ss->dur); json_object_add_value_int(tmp, "steadystate_ramptime", ss->ramp_time / 1000000L); json_object_add_value_int(tmp, "attained", ss->attained); - json_object_add_value_float(tmp, "criterion", ss->pct ? ss->criterion / 100 : ss->criterion); + + snprintf(ss_buf, sizeof(ss_buf), "%f%s", (float) ss->criterion, ss->pct ? "%" : ""); + json_object_add_value_string(tmp, "criterion", ss_buf); json_object_add_value_float(tmp, "max_deviation", ss->deviation); json_object_add_value_float(tmp, "slope", ss->slope); @@ -1284,19 +1287,19 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts, json_object_add_value_object(tmp, "data", data); bw = json_create_array(); iops = json_create_array(); - json_object_add_value_array(data, "iops", iops); - json_object_add_value_array(data, "bw", bw); - for (i = 0; i < ss->dur; i++) { + for (i = 0, sum_iops = 0, sum_bw = 0; i < ss->dur; i++) { x = (ss->head + i) % ss->dur; - mean_bw += (double) ss->bw_data[x]; - mean_iops += (double) ss->iops_data[x]; + sum_bw += ss->bw_data[x]; + sum_iops += ss->iops_data[x]; json_array_add_value_int(bw, ss->bw_data[x]); json_array_add_value_int(iops, ss->iops_data[x]); } - mean_bw /= ss->dur; - mean_iops /= ss->dur; + mean_bw = (double) sum_bw / ss->dur; + mean_iops = (double) sum_iops / ss->dur; json_object_add_value_float(data, "bw_mean", mean_bw); json_object_add_value_float(data, "iops_mean", mean_iops); + json_object_add_value_array(data, "iops", iops); + json_object_add_value_array(data, "bw", bw); } return root; diff --git a/steadystate.c b/steadystate.c index c12ea245..3b9b6ef7 100644 --- a/steadystate.c +++ b/steadystate.c @@ -180,12 +180,12 @@ bool steadystate_slope(unsigned long iops, unsigned long bw, struct thread_data * calculations. */ ss->slope = (ss->sum_xy - (double) ss->sum_x * ss->sum_y / ss->dur) / (ss->sum_x_sq - (double) ss->sum_x * ss->sum_x / ss->dur); - ss->criterion = ss->pct ? ss->slope / (ss->sum_y / ss->dur) * 100.0: ss->slope; + ss->criterion = ss->pct ? 100.0 * ss->slope / (ss->sum_y / ss->dur) : ss->slope; dprint(FD_STEADYSTATE, "sum_y: %llu, sum_xy: %llu, slope: %f, criterion: %f, limit: %f\n", ss->sum_y, ss->sum_xy, ss->slope, ss->criterion, ss->limit); - result = ss->criterion * (ss->criterion < 0.0 ? -1 : 1); + result = ss->criterion * (ss->criterion < 0.0 ? -1.0 : 1.0); if (result < ss->limit) return true; } @@ -225,10 +225,10 @@ bool steadystate_deviation(unsigned long iops, unsigned long bw, struct thread_d for (i = 0; i < ss->dur; i++) { diff = (double) (ss->check_iops ? ss->iops_data[i] : ss->bw_data[i]) - mean; - ss->deviation = max(ss->deviation, diff * (diff < 0.0 ? -1 : 1)); + ss->deviation = max(ss->deviation, diff * (diff < 0.0 ? -1.0 : 1.0)); } - ss->criterion = ss->pct ? ss->deviation / mean * 100.0 : ss->deviation; + ss->criterion = ss->pct ? 100.0 * ss->deviation / mean : ss->deviation; dprint(FD_STEADYSTATE, "sum_y: %llu, mean: %f, max diff: %f, objective: %f, limit: %f\n", ss->sum_y, mean, ss->deviation, ss->criterion, ss->limit);