+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_NOIO = 1U << 8,
+ 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,
+};
+
+enum {
+ FIO_RAND_BS_OFF = 0,
+ FIO_RAND_VER_OFF,
+ FIO_RAND_MIX_OFF,
+ FIO_RAND_FILE_OFF,
+ FIO_RAND_BLOCK_OFF,
+ FIO_RAND_FILE_SIZE_OFF,
+ FIO_RAND_TRIM_OFF,
+ FIO_RAND_BUF_OFF,
+ FIO_RAND_SEQ_RAND_READ_OFF,
+ FIO_RAND_SEQ_RAND_WRITE_OFF,
+ FIO_RAND_SEQ_RAND_TRIM_OFF,
+ FIO_RAND_START_DELAY,
+ FIO_DEDUPE_OFF,
+ FIO_RAND_POISSON_OFF,
+ FIO_RAND_ZONE_OFF,
+ FIO_RAND_NR_OFFS,
+};
+
+enum {
+ IO_MODE_INLINE = 0,
+ IO_MODE_OFFLOAD = 1,
+
+ RATE_PROCESS_LINEAR = 0,
+ RATE_PROCESS_POISSON = 1,
+};
+
+/*
+ * Per-thread/process specific data. Only used for the network client
+ * for now.
+ */
+struct sk_out;
+void sk_out_assign(struct sk_out *);
+void sk_out_drop(void);
+
+struct zone_split_index {
+ uint8_t size_perc;
+ uint8_t size_perc_prev;
+};
+
+/*
+ * For steady state detection
+ */
+struct steadystate_data {
+ double limit;
+ unsigned long long dur;
+ unsigned long long ramp_time;
+ bool (*evaluate)(unsigned long, unsigned long, struct thread_data *);
+ bool check_iops;
+ bool check_slope;
+ bool pct;
+
+ int attained;
+ int last_in_group;
+ int ramp_time_over;
+
+ unsigned int head;
+ unsigned int tail;
+ unsigned long *iops_data;
+ unsigned long *bw_data;
+
+ double slope;
+ double criterion;
+ double deviation;
+
+ unsigned long long sum_y;
+ unsigned long long sum_x;
+ unsigned long long sum_x_sq;
+ unsigned long long sum_xy;
+ unsigned long long oldest_y;
+
+ struct timeval prev_time;
+ unsigned long long prev_iops;
+ unsigned long long prev_bytes;
+};
+
+