FIO_RAND_SEQ_RAND_TRIM_OFF,
FIO_RAND_START_DELAY,
FIO_DEDUPE_OFF,
+ FIO_RAND_POISSON_OFF,
FIO_RAND_NR_OFFS,
};
enum {
IO_MODE_INLINE = 0,
- IO_MODE_OFFLOAD,
+ IO_MODE_OFFLOAD = 1,
+
+ RATE_PROCESS_LINEAR = 0,
+ RATE_PROCESS_POISSON = 1,
};
/*
struct io_log *bw_log;
struct io_log *iops_log;
- struct tp_data *tp_data;
+ struct workqueue log_compress_wq;
struct thread_data *parent;
unsigned long rate_blocks[DDIR_RWDIR_CNT];
unsigned long rate_io_issue_bytes[DDIR_RWDIR_CNT];
struct timeval lastrate[DDIR_RWDIR_CNT];
+ int64_t last_usec;
+ struct frand_state poisson_state;
/*
* Enforced rate submission/completion workqueue
extern int parse_cmd_line(int, char **, int);
extern int fio_backend(void);
extern void reset_fio_state(void);
-extern void clear_io_state(struct thread_data *);
+extern void clear_io_state(struct thread_data *, int);
extern int fio_options_parse(struct thread_data *, char **, int, int);
extern void fio_keywords_init(void);
extern void fio_keywords_exit(void);
*/
#define FIO_REAP_TIMEOUT 60
-#define TERMINATE_ALL (-1)
-extern void fio_terminate_threads(int);
+#define TERMINATE_ALL (-1U)
+extern void fio_terminate_threads(unsigned int);
extern void fio_mark_td_terminate(struct thread_data *);
/*
extern int load_blktrace(struct thread_data *, const char *, int);
#endif
+extern int io_queue_event(struct thread_data *td, struct io_u *io_u, int *ret,
+ enum fio_ddir ddir, uint64_t *bytes_issued, int from_verify,
+ struct timeval *comp_time);
+
/*
* Latency target helpers
*/
__FIO_OUTPUT_TERSE = 0,
__FIO_OUTPUT_JSON = 1,
__FIO_OUTPUT_NORMAL = 2,
- FIO_OUTPUT_NR = 3,
+ __FIO_OUTPUT_JSON_PLUS = 3,
+ FIO_OUTPUT_NR = 4,
FIO_OUTPUT_TERSE = 1U << __FIO_OUTPUT_TERSE,
FIO_OUTPUT_JSON = 1U << __FIO_OUTPUT_JSON,
FIO_OUTPUT_NORMAL = 1U << __FIO_OUTPUT_NORMAL,
+ FIO_OUTPUT_JSON_PLUS = 1U << __FIO_OUTPUT_JSON_PLUS,
};
enum {