From: Vincent Fu Date: Wed, 13 Jul 2016 18:38:57 +0000 (-0400) Subject: Fix bug where measurements were not printed in the correct order when steady state... X-Git-Tag: fio-2.16~3^2~32 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=412c7d91f9bac0b5e857a0daa4233d0ff5e01154;hp=6da94b076ca08f884dc83c9978bc995848dea0e8 Fix bug where measurements were not printed in the correct order when steady state was not attained ss->head points to the beginning of the buffer up through the point where the buffer is filled for the first time. afterwards, when a new element is added, ss->head is advanced to point to the second element in the buffer. if steady state is attained upon adding a new element, ss->head is not advanced so it actually does point to the head of the buffer. --- diff --git a/stat.c b/stat.c index 68a4a276..4bfacf71 100644 --- a/stat.c +++ b/stat.c @@ -1262,7 +1262,7 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts, struct steadystate_data *ss = ts->ss; unsigned long long sum_iops, sum_bw; double mean_iops, mean_bw; - int i, x; + int i, j, k; char ss_buf[64]; snprintf(ss_buf, sizeof(ss_buf), "%s%s:%f%s", @@ -1287,12 +1287,23 @@ 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(); + + /* + ** if ss was attained or the buffer is not full, + ** ss->head points to the first element in the list. + ** otherwise it actually points to the second element + ** in the list + */ + if (ss->attained || ss->sum_y == 0) + j = ss->head; + else + j = ss->head == 0 ? ss->dur - 1 : ss->head - 1; for (i = 0, sum_iops = 0, sum_bw = 0; i < ss->dur; i++) { - x = (ss->head + i) % ss->dur; - 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]); + k = (j + i) % ss->dur; + sum_bw += ss->bw_data[k]; + sum_iops += ss->iops_data[k]; + json_array_add_value_int(bw, ss->bw_data[k]); + json_array_add_value_int(iops, ss->iops_data[k]); } mean_bw = (double) sum_bw / ss->dur; mean_iops = (double) sum_iops / ss->dur;