#include "options.h"
#include "profile.h"
#include "time.h"
+#include "gettime.h"
#include "lib/getopt.h"
#include "lib/rand.h"
#include "server.h"
#include "stat.h"
+#include "flow.h"
#ifdef FIO_HAVE_GUASI
#include <guasi.h>
unsigned long long file_size_high;
unsigned long long start_offset;
- unsigned int bs[2];
- unsigned int ba[2];
- unsigned int min_bs[2];
- unsigned int max_bs[2];
- struct bssplit *bssplit[2];
- unsigned int bssplit_nr[2];
+ unsigned int bs[DDIR_RWDIR_CNT];
+ unsigned int ba[DDIR_RWDIR_CNT];
+ unsigned int min_bs[DDIR_RWDIR_CNT];
+ unsigned int max_bs[DDIR_RWDIR_CNT];
+ struct bssplit *bssplit[DDIR_RWDIR_CNT];
+ unsigned int bssplit_nr[DDIR_RWDIR_CNT];
unsigned int nr_files;
unsigned int open_files;
unsigned int create_serialize;
unsigned int create_fsync;
unsigned int create_on_open;
+ unsigned int create_only;
unsigned int end_fsync;
unsigned int pre_read;
unsigned int sync_io;
unsigned int zero_buffers;
unsigned int refill_buffers;
unsigned int scramble_buffers;
+ unsigned int compress_percentage;
+ unsigned int compress_chunk;
unsigned int time_based;
unsigned int disable_lat;
unsigned int disable_clat;
char *exec_prerun;
char *exec_postrun;
- unsigned int rate[2];
- unsigned int ratemin[2];
+ unsigned int rate[DDIR_RWDIR_CNT];
+ unsigned int ratemin[DDIR_RWDIR_CNT];
unsigned int ratecycle;
- unsigned int rate_iops[2];
- unsigned int rate_iops_min[2];
+ unsigned int rate_iops[DDIR_RWDIR_CNT];
+ unsigned int rate_iops_min[DDIR_RWDIR_CNT];
char *ioscheduler;
unsigned int uid;
unsigned int gid;
+ int flow_id;
+ int flow;
+ int flow_watermark;
+ unsigned int flow_sleep;
+
+ unsigned long long offset_increment;
+
unsigned int sync_file_range;
};
struct io_log *bw_log;
struct io_log *iops_log;
- uint64_t stat_io_bytes[2];
+ uint64_t stat_io_bytes[DDIR_RWDIR_CNT];
struct timeval bw_sample_time;
- uint64_t stat_io_blocks[2];
+ uint64_t stat_io_blocks[DDIR_RWDIR_CNT];
struct timeval iops_sample_time;
struct rusage ru_start;
struct frand_state __next_file_state;
};
int error;
+ int sig;
int done;
pid_t pid;
char *orig_buffer;
/*
* Rate state
*/
- unsigned long long rate_bps[2];
- long rate_pending_usleep[2];
- unsigned long rate_bytes[2];
- unsigned long rate_blocks[2];
- struct timeval lastrate[2];
+ unsigned long long rate_bps[DDIR_RWDIR_CNT];
+ long rate_pending_usleep[DDIR_RWDIR_CNT];
+ unsigned long rate_bytes[DDIR_RWDIR_CNT];
+ unsigned long rate_blocks[DDIR_RWDIR_CNT];
+ struct timeval lastrate[DDIR_RWDIR_CNT];
unsigned long long total_io_size;
unsigned long long fill_device_size;
- unsigned long io_issues[2];
- unsigned long long io_blocks[2];
- unsigned long long this_io_blocks[2];
- unsigned long long io_bytes[2];
+ unsigned long io_issues[DDIR_RWDIR_CNT];
+ unsigned long long io_blocks[DDIR_RWDIR_CNT];
+ unsigned long long this_io_blocks[DDIR_RWDIR_CNT];
+ unsigned long long io_bytes[DDIR_RWDIR_CNT];
unsigned long long io_skip_bytes;
- unsigned long long this_io_bytes[2];
+ unsigned long long this_io_bytes[DDIR_RWDIR_CNT];
unsigned long long zone_bytes;
struct fio_mutex *mutex;
unsigned int total_err_count;
int first_error;
+ struct fio_flow *flow;
+
/*
* Can be overloaded by profiles
*/
extern int terse_output;
extern int temp_stall_ts;
extern unsigned long long mlock_size;
-extern unsigned long page_mask, page_size;
+extern uintptr_t page_mask, page_size;
extern int read_only;
extern int eta_print;
extern unsigned long done_secs;
extern int __must_check parse_options(int, char **);
extern int parse_jobs_ini(char *, int, int);
extern int parse_cmd_line(int, char **);
-extern int exec_run(void);
+extern int fio_backend(void);
extern void reset_fio_state(void);
+extern void clear_io_state(struct thread_data *);
extern int fio_options_parse(struct thread_data *, char **, int);
extern void fio_keywords_init(void);
extern int fio_cmd_option_parse(struct thread_data *, const char *, char *);
{
int ret = 0;
- if (bytes_done[0])
- ret |= __should_check_rate(td, 0);
- if (bytes_done[1])
- ret |= __should_check_rate(td, 1);
+ if (bytes_done[DDIR_READ])
+ ret |= __should_check_rate(td, DDIR_READ);
+ if (bytes_done[DDIR_WRITE])
+ ret |= __should_check_rate(td, DDIR_WRITE);
+ if (bytes_done[DDIR_TRIM])
+ ret |= __should_check_rate(td, DDIR_TRIM);
return ret;
}