stat: remove unnecessary bool parameter to sum_thread_stats()
authorNiklas Cassel <niklas.cassel@wdc.com>
Mon, 10 Jan 2022 09:01:39 +0000 (09:01 +0000)
committerJens Axboe <axboe@kernel.dk>
Mon, 10 Jan 2022 16:22:14 +0000 (09:22 -0700)
We can deduce if it is the first struct io_stat src being added to the
struct io_stat dst by checking if the current amount of samples in dst
is zero.

Therefore, remove the bool parameter "first" to sum_stat().
Since sum_stat() was the only user of the bool parameter "first" to
the sum_thread_stats() function, we can remove it from sum_thread_stats()
as well.

Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com>
Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Link: https://lore.kernel.org/r/20220110090133.69955-1-Niklas.Cassel@wdc.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
client.c
gclient.c
rate-submit.c
stat.c
stat.h

index 8b230617f79bd0dbab6853e9388a1e7fa8f700ce..be8411d8232f4c547e04b246209beff433ba9efa 100644 (file)
--- a/client.c
+++ b/client.c
@@ -1111,7 +1111,7 @@ static void handle_ts(struct fio_client *client, struct fio_net_cmd *cmd)
        if (sum_stat_clients <= 1)
                return;
 
        if (sum_stat_clients <= 1)
                return;
 
-       sum_thread_stats(&client_ts, &p->ts, sum_stat_nr == 1);
+       sum_thread_stats(&client_ts, &p->ts);
        sum_group_stats(&client_gs, &p->rs);
 
        client_ts.members++;
        sum_group_stats(&client_gs, &p->rs);
 
        client_ts.members++;
index e0e0e7bf920cd0bc3933e5c9f62ae024be4437b4..ac0635361cd22e18436772e75bc2fde95ed90cc2 100644 (file)
--- a/gclient.c
+++ b/gclient.c
@@ -292,7 +292,7 @@ static void gfio_thread_status_op(struct fio_client *client,
        if (sum_stat_clients == 1)
                return;
 
        if (sum_stat_clients == 1)
                return;
 
-       sum_thread_stats(&client_ts, &p->ts, sum_stat_nr == 1);
+       sum_thread_stats(&client_ts, &p->ts);
        sum_group_stats(&client_gs, &p->rs);
 
        client_ts.members++;
        sum_group_stats(&client_gs, &p->rs);
 
        client_ts.members++;
index 13dbe7a2e9ff8f3face1619e750b83018ba222df..752c30a5f171d6f0e541ef79ce9fc5c341195d58 100644 (file)
@@ -195,7 +195,7 @@ static void io_workqueue_exit_worker_fn(struct submit_worker *sw,
        struct thread_data *td = sw->priv;
 
        (*sum_cnt)++;
        struct thread_data *td = sw->priv;
 
        (*sum_cnt)++;
-       sum_thread_stats(&sw->wq->td->ts, &td->ts, *sum_cnt == 1);
+       sum_thread_stats(&sw->wq->td->ts, &td->ts);
 
        fio_options_free(td);
        close_and_free_files(td);
 
        fio_options_free(td);
        close_and_free_files(td);
diff --git a/stat.c b/stat.c
index 99de12945360f8d09357f4957639203f490a33c5..36742a25987a7fef0fe3b3887f57bc76226c4adb 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -495,7 +495,7 @@ static void show_mixed_ddir_status(struct group_run_stats *rs,
        ts_lcl->unified_rw_rep = UNIFIED_MIXED;
        init_thread_stat_min_vals(ts_lcl);
 
        ts_lcl->unified_rw_rep = UNIFIED_MIXED;
        init_thread_stat_min_vals(ts_lcl);
 
-       sum_thread_stats(ts_lcl, ts, 1);
+       sum_thread_stats(ts_lcl, ts);
 
        assert(ddir_rw(ddir));
 
 
        assert(ddir_rw(ddir));
 
@@ -1479,7 +1479,7 @@ static void show_mixed_ddir_status_terse(struct thread_stat *ts,
        ts_lcl->percentile_precision = ts->percentile_precision;
        memcpy(ts_lcl->percentile_list, ts->percentile_list, sizeof(ts->percentile_list));
        
        ts_lcl->percentile_precision = ts->percentile_precision;
        memcpy(ts_lcl->percentile_list, ts->percentile_list, sizeof(ts->percentile_list));
        
-       sum_thread_stats(ts_lcl, ts, 1);
+       sum_thread_stats(ts_lcl, ts);
 
        /* add the aggregated stats to json parent */
        show_ddir_status_terse(ts_lcl, rs, DDIR_READ, ver, out);
 
        /* add the aggregated stats to json parent */
        show_ddir_status_terse(ts_lcl, rs, DDIR_READ, ver, out);
@@ -1677,7 +1677,7 @@ static void add_mixed_ddir_status_json(struct thread_stat *ts,
        ts_lcl->percentile_precision = ts->percentile_precision;
        memcpy(ts_lcl->percentile_list, ts->percentile_list, sizeof(ts->percentile_list));
 
        ts_lcl->percentile_precision = ts->percentile_precision;
        memcpy(ts_lcl->percentile_list, ts->percentile_list, sizeof(ts->percentile_list));
 
-       sum_thread_stats(ts_lcl, ts, 1);
+       sum_thread_stats(ts_lcl, ts);
 
        /* add the aggregated stats to json parent */
        add_ddir_status_json(ts_lcl, rs, DDIR_READ, parent);
 
        /* add the aggregated stats to json parent */
        add_ddir_status_json(ts_lcl, rs, DDIR_READ, parent);
@@ -2089,9 +2089,10 @@ static void __sum_stat(struct io_stat *dst, struct io_stat *src, bool first)
  * numbers. For group_reporting, we should just add those up, not make
  * them the mean of everything.
  */
  * numbers. For group_reporting, we should just add those up, not make
  * them the mean of everything.
  */
-static void sum_stat(struct io_stat *dst, struct io_stat *src, bool first,
-                    bool pure_sum)
+static void sum_stat(struct io_stat *dst, struct io_stat *src, bool pure_sum)
 {
 {
+       bool first = dst->samples == 0;
+
        if (src->samples == 0)
                return;
 
        if (src->samples == 0)
                return;
 
@@ -2141,49 +2142,41 @@ void sum_group_stats(struct group_run_stats *dst, struct group_run_stats *src)
                dst->sig_figs = src->sig_figs;
 }
 
                dst->sig_figs = src->sig_figs;
 }
 
-void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src,
-                     bool first)
+void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src)
 {
        int k, l, m;
 
 {
        int k, l, m;
 
-       sum_stat(&dst->sync_stat, &src->sync_stat, first, false);
-
        for (l = 0; l < DDIR_RWDIR_CNT; l++) {
                if (dst->unified_rw_rep != UNIFIED_MIXED) {
        for (l = 0; l < DDIR_RWDIR_CNT; l++) {
                if (dst->unified_rw_rep != UNIFIED_MIXED) {
-                       sum_stat(&dst->clat_stat[l], &src->clat_stat[l], first, false);
-                       sum_stat(&dst->clat_high_prio_stat[l], &src->clat_high_prio_stat[l], first, false);
-                       sum_stat(&dst->clat_low_prio_stat[l], &src->clat_low_prio_stat[l], first, false);
-                       sum_stat(&dst->slat_stat[l], &src->slat_stat[l], first, false);
-                       sum_stat(&dst->lat_stat[l], &src->lat_stat[l], first, false);
-                       sum_stat(&dst->bw_stat[l], &src->bw_stat[l], first, true);
-                       sum_stat(&dst->iops_stat[l], &src->iops_stat[l], first, true);
+                       sum_stat(&dst->clat_stat[l], &src->clat_stat[l], false);
+                       sum_stat(&dst->clat_high_prio_stat[l], &src->clat_high_prio_stat[l], false);
+                       sum_stat(&dst->clat_low_prio_stat[l], &src->clat_low_prio_stat[l], false);
+                       sum_stat(&dst->slat_stat[l], &src->slat_stat[l], false);
+                       sum_stat(&dst->lat_stat[l], &src->lat_stat[l], false);
+                       sum_stat(&dst->bw_stat[l], &src->bw_stat[l], true);
+                       sum_stat(&dst->iops_stat[l], &src->iops_stat[l], true);
 
                        dst->io_bytes[l] += src->io_bytes[l];
 
                        if (dst->runtime[l] < src->runtime[l])
                                dst->runtime[l] = src->runtime[l];
                } else {
 
                        dst->io_bytes[l] += src->io_bytes[l];
 
                        if (dst->runtime[l] < src->runtime[l])
                                dst->runtime[l] = src->runtime[l];
                } else {
-                       sum_stat(&dst->clat_stat[0], &src->clat_stat[l], first, false);
-                       sum_stat(&dst->clat_high_prio_stat[0], &src->clat_high_prio_stat[l], first, false);
-                       sum_stat(&dst->clat_low_prio_stat[0], &src->clat_low_prio_stat[l], first, false);
-                       sum_stat(&dst->slat_stat[0], &src->slat_stat[l], first, false);
-                       sum_stat(&dst->lat_stat[0], &src->lat_stat[l], first, false);
-                       sum_stat(&dst->bw_stat[0], &src->bw_stat[l], first, true);
-                       sum_stat(&dst->iops_stat[0], &src->iops_stat[l], first, true);
+                       sum_stat(&dst->clat_stat[0], &src->clat_stat[l], false);
+                       sum_stat(&dst->clat_high_prio_stat[0], &src->clat_high_prio_stat[l], false);
+                       sum_stat(&dst->clat_low_prio_stat[0], &src->clat_low_prio_stat[l], false);
+                       sum_stat(&dst->slat_stat[0], &src->slat_stat[l], false);
+                       sum_stat(&dst->lat_stat[0], &src->lat_stat[l], false);
+                       sum_stat(&dst->bw_stat[0], &src->bw_stat[l], true);
+                       sum_stat(&dst->iops_stat[0], &src->iops_stat[l], true);
 
                        dst->io_bytes[0] += src->io_bytes[l];
 
                        if (dst->runtime[0] < src->runtime[l])
                                dst->runtime[0] = src->runtime[l];
 
                        dst->io_bytes[0] += src->io_bytes[l];
 
                        if (dst->runtime[0] < src->runtime[l])
                                dst->runtime[0] = src->runtime[l];
-
-                       /*
-                        * We're summing to the same destination, so override
-                        * 'first' after the first iteration of the loop
-                        */
-                       first = false;
                }
        }
 
                }
        }
 
+       sum_stat(&dst->sync_stat, &src->sync_stat, false);
        dst->usr_time += src->usr_time;
        dst->sys_time += src->sys_time;
        dst->ctx += src->ctx;
        dst->usr_time += src->usr_time;
        dst->sys_time += src->sys_time;
        dst->ctx += src->ctx;
@@ -2417,7 +2410,7 @@ void __show_run_stats(void)
                for (k = 0; k < ts->nr_block_infos; k++)
                        ts->block_infos[k] = td->ts.block_infos[k];
 
                for (k = 0; k < ts->nr_block_infos; k++)
                        ts->block_infos[k] = td->ts.block_infos[k];
 
-               sum_thread_stats(ts, &td->ts, idx == 1);
+               sum_thread_stats(ts, &td->ts);
 
                if (td->o.ss_dur) {
                        ts->ss_state = td->ss.state;
 
                if (td->o.ss_dur) {
                        ts->ss_state = td->ss.state;
diff --git a/stat.h b/stat.h
index 9ef8caa438870a97eb6ff6fb7a4786d86d9db4af..15ca4eff59213caaf90d8297667dd9d47ebb965a 100644 (file)
--- a/stat.h
+++ b/stat.h
@@ -325,7 +325,7 @@ extern void __show_run_stats(void);
 extern int __show_running_run_stats(void);
 extern void show_running_run_stats(void);
 extern void check_for_running_stats(void);
 extern int __show_running_run_stats(void);
 extern void show_running_run_stats(void);
 extern void check_for_running_stats(void);
-extern void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src, bool first);
+extern void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src);
 extern void sum_group_stats(struct group_run_stats *dst, struct group_run_stats *src);
 extern void init_thread_stat_min_vals(struct thread_stat *ts);
 extern void init_thread_stat(struct thread_stat *ts);
 extern void sum_group_stats(struct group_run_stats *dst, struct group_run_stats *src);
 extern void init_thread_stat_min_vals(struct thread_stat *ts);
 extern void init_thread_stat(struct thread_stat *ts);