Collect and show zone reset statistics
[fio.git] / stat.c
diff --git a/stat.c b/stat.c
index 428590e795a7f8a9db2fa76ce06ff8b69e134165..abdbb0e3fb9ba226382c1e511ccbe54e4b449aa7 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -14,6 +14,7 @@
 #include "lib/output_buffer.h"
 #include "helper_thread.h"
 #include "smalloc.h"
+#include "zbd.h"
 
 #define LOG_MSEC_SLACK 1
 
@@ -419,7 +420,7 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
        unsigned long runt;
        unsigned long long min, max, bw, iops;
        double mean, dev;
-       char *io_p, *bw_p, *bw_p_alt, *iops_p;
+       char *io_p, *bw_p, *bw_p_alt, *iops_p, *zbd_w_st = NULL;
        int i2p;
 
        if (ddir_sync(ddir)) {
@@ -450,12 +451,16 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
 
        iops = (1000 * (uint64_t)ts->total_io_u[ddir]) / runt;
        iops_p = num2str(iops, ts->sig_figs, 1, 0, N2S_NONE);
+       if (ddir == DDIR_WRITE)
+               zbd_w_st = zbd_write_status(ts);
 
-       log_buf(out, "  %s: IOPS=%s, BW=%s (%s)(%s/%llumsec)\n",
+       log_buf(out, "  %s: IOPS=%s, BW=%s (%s)(%s/%llumsec)%s\n",
                        rs->unified_rw_rep ? "mixed" : str[ddir],
                        iops_p, bw_p, bw_p_alt, io_p,
-                       (unsigned long long) ts->runtime[ddir]);
+                       (unsigned long long) ts->runtime[ddir],
+                       zbd_w_st ? : "");
 
+       free(zbd_w_st);
        free(io_p);
        free(bw_p);
        free(bw_p_alt);
@@ -619,8 +624,8 @@ static int block_state_category(int block_state)
 
 static int compare_block_infos(const void *bs1, const void *bs2)
 {
-       uint32_t block1 = *(uint32_t *)bs1;
-       uint32_t block2 = *(uint32_t *)bs2;
+       uint64_t block1 = *(uint64_t *)bs1;
+       uint64_t block2 = *(uint64_t *)bs2;
        int state1 = BLOCK_INFO_STATE(block1);
        int state2 = BLOCK_INFO_STATE(block2);
        int bscat1 = block_state_category(state1);
@@ -1205,7 +1210,7 @@ static void show_thread_status_terse_all(struct thread_stat *ts,
                log_buf(out, ";%3.2f%%", io_u_lat_m[i]);
 
        /* disk util stats, if any */
-       if (ver >= 3)
+       if (ver >= 3 && is_running_backend())
                show_disk_util(1, NULL, out);
 
        /* Additional output if continue_on_error set - default off*/
@@ -1655,6 +1660,7 @@ void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src,
        dst->total_run_time += src->total_run_time;
        dst->total_submit += src->total_submit;
        dst->total_complete += src->total_complete;
+       dst->nr_zone_resets += src->nr_zone_resets;
 }
 
 void init_group_run_stat(struct group_run_stats *gs)
@@ -1922,6 +1928,8 @@ void __show_run_stats(void)
                if (is_backend) {
                        fio_server_send_job_options(opt_lists[i], i);
                        fio_server_send_ts(ts, rs);
+                       if (output_format & FIO_OUTPUT_TERSE)
+                               show_thread_status_terse(ts, rs, &output[__FIO_OUTPUT_TERSE]);
                } else {
                        if (output_format & FIO_OUTPUT_TERSE)
                                show_thread_status_terse(ts, rs, &output[__FIO_OUTPUT_TERSE]);
@@ -2253,7 +2261,7 @@ static struct io_logs *get_cur_log(struct io_log *iolog)
 }
 
 static void __add_log_sample(struct io_log *iolog, union io_sample_data data,
-                            enum fio_ddir ddir, unsigned int bs,
+                            enum fio_ddir ddir, unsigned long long bs,
                             unsigned long t, uint64_t offset)
 {
        struct io_logs *cur_log;
@@ -2335,6 +2343,7 @@ void reset_io_stats(struct thread_data *td)
 
        ts->total_submit = 0;
        ts->total_complete = 0;
+       ts->nr_zone_resets = 0;
 }
 
 static void __add_stat_to_log(struct io_log *iolog, enum fio_ddir ddir,
@@ -2371,7 +2380,7 @@ static void _add_stat_to_log(struct io_log *iolog, unsigned long elapsed,
 static unsigned long add_log_sample(struct thread_data *td,
                                    struct io_log *iolog,
                                    union io_sample_data data,
-                                   enum fio_ddir ddir, unsigned int bs,
+                                   enum fio_ddir ddir, unsigned long long bs,
                                    uint64_t offset)
 {
        unsigned long elapsed, this_window;
@@ -2433,7 +2442,7 @@ void finalize_logs(struct thread_data *td, bool unit_logs)
                _add_stat_to_log(td->iops_log, elapsed, td->o.log_max != 0);
 }
 
-void add_agg_sample(union io_sample_data data, enum fio_ddir ddir, unsigned int bs)
+void add_agg_sample(union io_sample_data data, enum fio_ddir ddir, unsigned long long bs)
 {
        struct io_log *iolog;
 
@@ -2463,7 +2472,8 @@ static void add_clat_percentile_sample(struct thread_stat *ts,
 }
 
 void add_clat_sample(struct thread_data *td, enum fio_ddir ddir,
-                    unsigned long long nsec, unsigned int bs, uint64_t offset)
+                    unsigned long long nsec, unsigned long long bs,
+                    uint64_t offset)
 {
        unsigned long elapsed, this_window;
        struct thread_stat *ts = &td->ts;
@@ -2522,7 +2532,7 @@ void add_clat_sample(struct thread_data *td, enum fio_ddir ddir,
 }
 
 void add_slat_sample(struct thread_data *td, enum fio_ddir ddir,
-                    unsigned long usec, unsigned int bs, uint64_t offset)
+                    unsigned long usec, unsigned long long bs, uint64_t offset)
 {
        struct thread_stat *ts = &td->ts;
 
@@ -2540,7 +2550,8 @@ void add_slat_sample(struct thread_data *td, enum fio_ddir ddir,
 }
 
 void add_lat_sample(struct thread_data *td, enum fio_ddir ddir,
-                   unsigned long long nsec, unsigned int bs, uint64_t offset)
+                   unsigned long long nsec, unsigned long long bs,
+                   uint64_t offset)
 {
        struct thread_stat *ts = &td->ts;
 
@@ -2623,7 +2634,7 @@ static int __add_samples(struct thread_data *td, struct timespec *parent_tv,
                add_stat_sample(&stat[ddir], rate);
 
                if (log) {
-                       unsigned int bs = 0;
+                       unsigned long long bs = 0;
 
                        if (td->o.min_bs[ddir] == td->o.max_bs[ddir])
                                bs = td->o.min_bs[ddir];