#include "profile.h"
#include "fio_time.h"
#include "gettime.h"
-#include "lib/getopt.h"
+#include "oslib/getopt.h"
#include "lib/rand.h"
#include "lib/rbtree.h"
#include "client.h"
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_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,
+ 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;
};
/*
*/
struct thread_data {
struct thread_options o;
+ struct flist_head opt_list;
unsigned long flags;
void *eo;
char verror[FIO_VERROR_SIZE];
struct io_log *slat_log;
struct io_log *clat_log;
+ struct io_log *clat_hist_log;
struct io_log *lat_log;
struct io_log *bw_log;
struct io_log *iops_log;
- struct tp_data *tp_data;
+ struct workqueue log_compress_wq;
struct thread_data *parent;
uint64_t stat_io_blocks[DDIR_RWDIR_CNT];
struct timeval iops_sample_time;
- /*
- * Tracks the last iodepth number of completed writes, if data
- * verification is enabled
- */
- uint64_t *last_write_comp;
- unsigned int last_write_idx;
-
volatile int update_rusage;
struct fio_mutex *rusage_sem;
struct rusage ru_start;
unsigned int next_file;
struct frand_state next_file_state;
};
+ union {
+ struct zipf_state next_file_zipf;
+ struct gauss_state next_file_gauss;
+ };
+ union {
+ double zipf_theta;
+ double pareto_h;
+ double gauss_dev;
+ };
int error;
int sig;
int done;
struct frand_state buf_state;
struct frand_state buf_state_prev;
struct frand_state dedupe_state;
+ struct frand_state zone_state;
+
+ struct zone_split_index **zone_state_index;
unsigned int verify_batch;
unsigned int trim_batch;
*/
struct ioengine_ops *io_ops;
+ /*
+ * IO engine private data and dlhandle.
+ */
+ void *io_ops_data;
+ void *io_ops_dlhandle;
+
/*
* Queue depth of io_u's that fio MIGHT do
*/
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 log_syslog;
extern int status_interval;
extern const char fio_version_string[];
-extern int helper_do_stat;
-extern pthread_cond_t helper_cond;
extern char *trigger_file;
extern char *trigger_cmd;
extern char *trigger_remote_cmd;
extern int __must_check parse_options(int, char **);
extern int parse_jobs_ini(char *, int, int, int);
extern int parse_cmd_line(int, char **, int);
-extern int fio_backend(void);
+extern int fio_backend(struct sk_out *);
extern void reset_fio_state(void);
-extern void clear_io_state(struct thread_data *);
-extern int fio_options_parse(struct thread_data *, char **, int, int);
+extern void clear_io_state(struct thread_data *, int);
+extern int fio_options_parse(struct thread_data *, char **, int);
extern void fio_keywords_init(void);
extern void fio_keywords_exit(void);
extern int fio_cmd_option_parse(struct thread_data *, const char *, char *);
extern void fio_options_mem_dupe(struct thread_data *);
extern void options_mem_dupe(void *data, struct fio_option *options);
extern void td_fill_rand_seeds(struct thread_data *);
+extern void td_fill_verify_state_seed(struct thread_data *);
extern void add_job_opts(const char **, int);
extern char *num2str(uint64_t, int, int, int, int);
extern int ioengine_load(struct thread_data *);
extern int fio_running_or_pending_io_threads(void);
extern int fio_set_fd_nonblocking(int, const char *);
extern void sig_show_status(int sig);
+extern struct thread_data *get_global_options(void);
extern uintptr_t page_mask;
extern uintptr_t page_size;
extern void td_set_runstate(struct thread_data *, int);
extern int td_bump_runstate(struct thread_data *, int);
extern void td_restore_runstate(struct thread_data *, int);
+extern const char *runstate_to_name(int runstate);
/*
* Allow 60 seconds for a job to quit on its own, otherwise reap with
*/
#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_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 {
FIO_RAND_DIST_ZIPF,
FIO_RAND_DIST_PARETO,
FIO_RAND_DIST_GAUSS,
+ FIO_RAND_DIST_ZONED,
};
#define FIO_DEF_ZIPF 1.1