X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=stat.c;h=3662fd9eee2bdd4fbbedf249cb850dbee4ab334c;hp=ae3c71af694cbd1771e556bb674c1065536146ad;hb=a781480e959e4cad32f27915bdb5dab948aa1c6e;hpb=0a7d7f9e450f823b4ca25c23516050c339778b13 diff --git a/stat.c b/stat.c index ae3c71af..3662fd9e 100644 --- a/stat.c +++ b/stat.c @@ -47,8 +47,10 @@ static unsigned int plat_val_to_idx(unsigned int val) else msb = (sizeof(val)*8) - __builtin_clz(val) - 1; - /* MSB <= (FIO_IO_U_PLAT_BITS-1), cannot be rounded off. Use - * all bits of the sample as index */ + /* + * MSB <= (FIO_IO_U_PLAT_BITS-1), cannot be rounded off. Use + * all bits of the sample as index + */ if (msb <= FIO_IO_U_PLAT_BITS) return val; @@ -58,8 +60,10 @@ static unsigned int plat_val_to_idx(unsigned int val) /* Compute the number of buckets before the group */ base = (error_bits + 1) << FIO_IO_U_PLAT_BITS; - /* Discard the error bits and apply the mask to find the - * index for the buckets in the group */ + /* + * Discard the error bits and apply the mask to find the + * index for the buckets in the group + */ offset = (FIO_IO_U_PLAT_VAL - 1) & (val >> error_bits); /* Make sure the index does not exceed (array size - 1) */ @@ -117,28 +121,36 @@ static void show_clat_percentiles(unsigned int* io_u_plat, unsigned long nr, { unsigned long sum = 0; unsigned int len, i, j = 0; + const double *plist; + int is_last = 0; static const double def_list[FIO_IO_U_LIST_MAX_LEN] = { 1.0, 5.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 95.0, 99.0, 99.5, 99.9}; - const double* plist = user_list? user_list: def_list; - for (len = 0; len 1) qsort((void*)user_list, len, sizeof(user_list[0]), double_cmp); - int is_last = 0; log_info(" clat percentiles (usec) :"); - for (i = 0; i = (plist[j]/100 * nr)) { + while (sum >= (plist[j] / 100 * nr)) { assert(plist[j] <= 100.0); - if (j!=0 && (j%4) == 0) /* for formatting */ + /* for formatting */ + if (j != 0 && (j % 4) == 0) log_info(" "); /* end of the list */ @@ -147,9 +159,10 @@ static void show_clat_percentiles(unsigned int* io_u_plat, unsigned long nr, log_info(" %2.2fth=%u%c", plist[j], plat_idx_to_val(i), (is_last? '\n' : ',')); - if (is_last) break; + if (is_last) + break; - if (j%4 == 3) /* for formatting */ + if (j % 4 == 3) /* for formatting */ log_info("\n"); j++; } @@ -605,6 +618,9 @@ static void sum_stat(struct io_stat *dst, struct io_stat *src, int nr) { double mean, S; + if (src->samples == 0) + return; + dst->min_val = min(dst->min_val, src->min_val); dst->max_val = max(dst->max_val, src->max_val);