Save a division, if delta is non-zero.
[fio.git] / stat.c
diff --git a/stat.c b/stat.c
index dda2687eea05c9d05b68b4c9adbbb59326ad8d4b..e974da77ff7ec557728daef9ea5c9e6243018af6 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -302,7 +302,7 @@ static void __init_disk_util(struct thread_data *td, struct fio_file *f)
                sprintf(foo, "%s", tmp);
        }
 
-       if (td->ioscheduler && !td->sysfs_root)
+       if (td->o.ioscheduler && !td->sysfs_root)
                td->sysfs_root = strdup(foo);
 
        disk_util_add(dev, foo);
@@ -313,7 +313,7 @@ void init_disk_util(struct thread_data *td)
        struct fio_file *f;
        unsigned int i;
 
-       if (!td->do_disk_util ||
+       if (!td->o.do_disk_util ||
            (td->io_ops->flags & (FIO_DISKLESSIO | FIO_NODISKUTIL)))
                return;
 
@@ -433,6 +433,8 @@ static void stat_calc_dist(struct thread_stat *ts, double *io_u_dist)
        for (i = 0; i < FIO_IO_U_MAP_NR; i++) {
                io_u_dist[i] = (double) ts->io_u_map[i] / (double) ts_total_io_u(ts);
                io_u_dist[i] *= 100.0;
+               if (io_u_dist[i] < 0.1 && ts->io_u_map[i])
+                       io_u_dist[i] = 0.1;
        }
 }
 
@@ -446,6 +448,8 @@ static void stat_calc_lat(struct thread_stat *ts, double *io_u_lat)
        for (i = 0; i < FIO_IO_U_LAT_NR; i++) {
                io_u_lat[i] = (double) ts->io_u_lat[i] / (double) ts_total_io_u(ts);
                io_u_lat[i] *= 100.0;
+               if (io_u_lat[i] < 0.01 && ts->io_u_lat[i])
+                       io_u_lat[i] = 0.01;
        }
 }
 
@@ -529,8 +533,8 @@ static void show_thread_status(struct thread_stat *ts,
 
        log_info("  IO depths    : 1=%3.1f%%, 2=%3.1f%%, 4=%3.1f%%, 8=%3.1f%%, 16=%3.1f%%, 32=%3.1f%%, >=64=%3.1f%%\n", io_u_dist[0], io_u_dist[1], io_u_dist[2], io_u_dist[3], io_u_dist[4], io_u_dist[5], io_u_dist[6]);
 
-       log_info("     lat (msec): 2=%3.1f%%, 4=%3.1f%%, 10=%3.1f%%, 20=%3.1f%%, 50=%3.1f%%, 100=%3.1f%%\n", io_u_lat[0], io_u_lat[1], io_u_lat[2], io_u_lat[3], io_u_lat[4], io_u_lat[5]);
-       log_info("     lat (msec): 250=%3.1f%%, 500=%3.1f%%, 750=%3.1f%%, 1000=%3.1f%%, >=2000=%3.1f%%\n", io_u_lat[6], io_u_lat[7], io_u_lat[8], io_u_lat[9], io_u_lat[10]);
+       log_info("     lat (msec): 2=%3.2f%%, 4=%3.2f%%, 10=%3.2f%%, 20=%3.2f%%, 50=%3.2f%%, 100=%3.2f%%\n", io_u_lat[0], io_u_lat[1], io_u_lat[2], io_u_lat[3], io_u_lat[4], io_u_lat[5]);
+       log_info("     lat (msec): 250=%3.2f%%, 500=%3.2f%%, 750=%3.2f%%, 1000=%3.2f%%, >=2000=%3.2f%%\n", io_u_lat[6], io_u_lat[7], io_u_lat[8], io_u_lat[9], io_u_lat[10]);
 }
 
 static void show_ddir_status_terse(struct thread_stat *ts,
@@ -595,8 +599,8 @@ static void show_thread_status_terse(struct thread_stat *ts,
 
        log_info(";%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%", io_u_dist[0], io_u_dist[1], io_u_dist[2], io_u_dist[3], io_u_dist[4], io_u_dist[5], io_u_dist[6]);
 
-       log_info(";%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%\n", io_u_lat[0], io_u_lat[1], io_u_lat[2], io_u_lat[3], io_u_lat[4], io_u_lat[5]);
-       log_info(";%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%", io_u_lat[6], io_u_lat[7], io_u_lat[8], io_u_lat[9], io_u_lat[10]);
+       log_info(";%3.2f%%;%3.2f%%;%3.2f%%;%3.2f%%;%3.2f%%;%3.2f%%\n", io_u_lat[0], io_u_lat[1], io_u_lat[2], io_u_lat[3], io_u_lat[4], io_u_lat[5]);
+       log_info(";%3.2f%%;%3.2f%%;%3.2f%%;%3.2f%%;%3.2f%%", io_u_lat[6], io_u_lat[7], io_u_lat[8], io_u_lat[9], io_u_lat[10]);
 
        if (ts->description)
                log_info(";%s", ts->description);
@@ -652,7 +656,7 @@ void show_run_stats(void)
        nr_ts = 0;
        last_ts = -1;
        for_each_td(td, i) {
-               if (!td->group_reporting) {
+               if (!td->o.group_reporting) {
                        nr_ts++;
                        continue;
                }
@@ -681,8 +685,8 @@ void show_run_stats(void)
        last_ts = -1;
        idx = 0;
        for_each_td(td, i) {
-               if (idx && (!td->group_reporting ||
-                   (td->group_reporting && last_ts != td->groupid))) {
+               if (idx && (!td->o.group_reporting ||
+                   (td->o.group_reporting && last_ts != td->groupid))) {
                        idx = 0;
                        j++;
                }
@@ -698,8 +702,8 @@ void show_run_stats(void)
                        /*
                         * These are per-group shared already
                         */
-                       ts->name = td->name;
-                       ts->description = td->description;
+                       ts->name = td->o.name;
+                       ts->description = td->o.description;
                        ts->groupid = td->groupid;
 
                        /*
@@ -813,8 +817,10 @@ static inline void add_stat_sample(struct io_stat *is, unsigned long data)
                is->min_val = data;
 
        delta = val - is->mean;
-       is->mean += delta / (is->samples + 1.0);
-       is->S += delta * (val - is->mean);
+       if (delta) {
+               is->mean += delta / (is->samples + 1.0);
+               is->S += delta * (val - is->mean);
+       }
 
        is->samples++;
 }
@@ -877,7 +883,7 @@ void add_bw_sample(struct thread_data *td, enum fio_ddir ddir,
        unsigned long spent = mtime_since(&ts->stat_sample_time[ddir], t);
        unsigned long rate;
 
-       if (spent < td->bw_avg_time)
+       if (spent < td->o.bw_avg_time)
                return;
 
        rate = (td->this_io_bytes[ddir] - ts->stat_io_bytes[ddir]) / spent;