Merge branch 'epoch' of https://github.com/cronburg/fio
[fio.git] / iolog.h
diff --git a/iolog.h b/iolog.h
index 0438fa7b2993b5b44d170da03fb75ce7dc2d8a5d..ca344f1970208018882492ea717e05d735f5d15b 100644 (file)
--- a/iolog.h
+++ b/iolog.h
@@ -18,6 +18,12 @@ struct io_stat {
        fio_fp64_t S;
 };
 
+struct io_hist {
+       uint64_t samples;
+       unsigned long hist_last;
+       struct flist_head list;
+};
+
 /*
  * A single data sample
  */
@@ -39,6 +45,7 @@ enum {
        IO_LOG_TYPE_SLAT,
        IO_LOG_TYPE_BW,
        IO_LOG_TYPE_IOPS,
+       IO_LOG_TYPE_HIST,
 };
 
 #define DEF_LOG_ENTRIES                1024
@@ -103,6 +110,15 @@ struct io_log {
        unsigned long avg_msec;
        unsigned long avg_last;
 
+       /*
+        * Windowed latency histograms, for keeping track of when we need to
+        * save a copy of the histogram every approximately hist_msec
+        * milliseconds.
+        */
+       struct io_hist hist_window[DDIR_RWDIR_CNT];
+       unsigned long hist_msec;
+       int hist_coarseness;
+
        pthread_mutex_t chunk_lock;
        unsigned int chunk_seq;
        struct flist_head chunk_list;
@@ -218,6 +234,8 @@ extern int iolog_file_inflate(const char *);
 struct log_params {
        struct thread_data *td;
        unsigned long avg_msec;
+       unsigned long hist_msec;
+       int hist_coarseness;
        int log_type;
        int log_offset;
        int log_gz;