Add support for absolute random zones
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index d5d6bfe42fcde0d1dcb8711cc31e4e774a673fd4..a44f1aae47212b9e4065255a68c34dee25480f29 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -72,25 +72,48 @@ enum {
 };
 
 enum {
-       TD_F_VER_BACKLOG        = 1U << 0,
-       TD_F_TRIM_BACKLOG       = 1U << 1,
-       TD_F_READ_IOLOG         = 1U << 2,
-       TD_F_REFILL_BUFFERS     = 1U << 3,
-       TD_F_SCRAMBLE_BUFFERS   = 1U << 4,
-       TD_F_VER_NONE           = 1U << 5,
-       TD_F_PROFILE_OPS        = 1U << 6,
-       TD_F_COMPRESS           = 1U << 7,
-       TD_F_RESERVED           = 1U << 8, /* not used */
-       TD_F_COMPRESS_LOG       = 1U << 9,
-       TD_F_VSTATE_SAVED       = 1U << 10,
-       TD_F_NEED_LOCK          = 1U << 11,
-       TD_F_CHILD              = 1U << 12,
-       TD_F_NO_PROGRESS        = 1U << 13,
-       TD_F_REGROW_LOGS        = 1U << 14,
+       __TD_F_VER_BACKLOG      = 0,
+       __TD_F_TRIM_BACKLOG,
+       __TD_F_READ_IOLOG,
+       __TD_F_REFILL_BUFFERS,
+       __TD_F_SCRAMBLE_BUFFERS,
+       __TD_F_VER_NONE,
+       __TD_F_PROFILE_OPS,
+       __TD_F_COMPRESS,
+       __TD_F_COMPRESS_LOG,
+       __TD_F_VSTATE_SAVED,
+       __TD_F_NEED_LOCK,
+       __TD_F_CHILD,
+       __TD_F_NO_PROGRESS,
+       __TD_F_REGROW_LOGS,
+       __TD_F_MMAP_KEEP,
+       __TD_F_DIRS_CREATED,
+       __TD_F_LAST,            /* not a real bit, keep last */
+};
+
+enum {
+       TD_F_VER_BACKLOG        = 1U << __TD_F_VER_BACKLOG,
+       TD_F_TRIM_BACKLOG       = 1U << __TD_F_TRIM_BACKLOG,
+       TD_F_READ_IOLOG         = 1U << __TD_F_READ_IOLOG,
+       TD_F_REFILL_BUFFERS     = 1U << __TD_F_REFILL_BUFFERS,
+       TD_F_SCRAMBLE_BUFFERS   = 1U << __TD_F_SCRAMBLE_BUFFERS,
+       TD_F_VER_NONE           = 1U << __TD_F_VER_NONE,
+       TD_F_PROFILE_OPS        = 1U << __TD_F_PROFILE_OPS,
+       TD_F_COMPRESS           = 1U << __TD_F_COMPRESS,
+       TD_F_COMPRESS_LOG       = 1U << __TD_F_COMPRESS_LOG,
+       TD_F_VSTATE_SAVED       = 1U << __TD_F_VSTATE_SAVED,
+       TD_F_NEED_LOCK          = 1U << __TD_F_NEED_LOCK,
+       TD_F_CHILD              = 1U << __TD_F_CHILD,
+       TD_F_NO_PROGRESS        = 1U << __TD_F_NO_PROGRESS,
+       TD_F_REGROW_LOGS        = 1U << __TD_F_REGROW_LOGS,
+       TD_F_MMAP_KEEP          = 1U << __TD_F_MMAP_KEEP,
+       TD_F_DIRS_CREATED       = 1U << __TD_F_DIRS_CREATED,
 };
 
 enum {
        FIO_RAND_BS_OFF         = 0,
+       FIO_RAND_BS1_OFF,
+       FIO_RAND_BS2_OFF,
        FIO_RAND_VER_OFF,
        FIO_RAND_MIX_OFF,
        FIO_RAND_FILE_OFF,
@@ -135,6 +158,8 @@ void sk_out_drop(void);
 struct zone_split_index {
        uint8_t size_perc;
        uint8_t size_perc_prev;
+       uint64_t size;
+       uint64_t size_prev;
 };
 
 /*
@@ -214,7 +239,7 @@ struct thread_data {
 
        unsigned long rand_seeds[FIO_RAND_NR_OFFS];
 
-       struct frand_state bsrange_state;
+       struct frand_state bsrange_state[DDIR_RWDIR_CNT];
        struct frand_state verify_state;
        struct frand_state trim_state;
        struct frand_state delay_state;
@@ -332,7 +357,7 @@ struct thread_data {
        struct timespec terminate_time;
        unsigned int ts_cache_nr;
        unsigned int ts_cache_mask;
-       unsigned int ramp_time_over;
+       bool ramp_time_over;
 
        /*
         * Time since last latency_window was started
@@ -588,12 +613,6 @@ enum {
 #define TD_ENG_FLAG_SHIFT      16
 #define TD_ENG_FLAG_MASK       ((1U << 16) - 1)
 
-static inline enum fio_ioengine_flags td_ioengine_flags(struct thread_data *td)
-{
-       return (enum fio_ioengine_flags)
-               ((td->flags >> TD_ENG_FLAG_SHIFT) & TD_ENG_FLAG_MASK);
-}
-
 static inline void td_set_ioengine_flags(struct thread_data *td)
 {
        td->flags = (~(TD_ENG_FLAG_MASK << TD_ENG_FLAG_SHIFT) & td->flags) |
@@ -796,6 +815,7 @@ enum {
        FIO_RAND_DIST_PARETO,
        FIO_RAND_DIST_GAUSS,
        FIO_RAND_DIST_ZONED,
+       FIO_RAND_DIST_ZONED_ABS,
 };
 
 #define FIO_DEF_ZIPF           1.1