X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=4111bffbef7cfacb5ad8f1dfe27265bf898880ec;hp=6e9311be9517347892e1adc4dd8037f57676c31d;hb=4b87898e8d76aaf05baec83077a11311c1447397;hpb=687270767de17dbad53c50e03e5d73d52505405c diff --git a/fio.h b/fio.h index 6e9311be..4111bffb 100644 --- a/fio.h +++ b/fio.h @@ -14,6 +14,7 @@ #include #include "list.h" +#include "rbtree.h" #include "md5.h" #include "crc32.h" #include "arch.h" @@ -24,6 +25,10 @@ #include "syslet.h" #endif +#ifdef FIO_HAVE_GUASI +#include +#endif + enum fio_ddir { DDIR_READ = 0, DDIR_WRITE, @@ -74,7 +79,10 @@ struct io_log { * When logging io actions, this matches a single sent io_u */ struct io_piece { - struct list_head list; + union { + struct rb_node rb_node; + struct list_head list; + }; struct fio_file *file; unsigned long long offset; unsigned long len; @@ -110,6 +118,9 @@ struct io_u { #endif #ifdef FIO_HAVE_SYSLET struct syslet_req req; +#endif +#ifdef FIO_HAVE_GUASI + guasi_req_t greq; #endif }; struct timeval start_time; @@ -318,6 +329,7 @@ struct thread_options { char *opendir; char *ioengine; enum td_ddir td_ddir; + unsigned int ddir_nr; unsigned int iodepth; unsigned int iodepth_low; unsigned int iodepth_batch; @@ -368,16 +380,17 @@ struct thread_options { enum fio_memtype mem_type; unsigned int stonewall; + unsigned int new_group; unsigned int numjobs; os_cpu_mask_t cpumask; unsigned int iolog; unsigned int read_iolog; unsigned int rwmixcycle; - unsigned int rwmixread; - unsigned int rwmixwrite; + unsigned int rwmix[2]; unsigned int nice; unsigned int file_service_type; unsigned int group_reporting; + unsigned int fadvise_hint; char *read_iolog_file; char *write_iolog_file; @@ -403,12 +416,14 @@ struct thread_options { unsigned int cpucycle; }; +#define FIO_VERROR_SIZE 128 + /* * This describes a single thread/process executing a fio job. */ struct thread_data { struct thread_options o; - char verror[128]; + char verror[FIO_VERROR_SIZE]; pthread_t thread; int thread_number; int groupid; @@ -484,18 +499,22 @@ struct thread_data { struct timeval start; /* start of this loop */ struct timeval epoch; /* time job was started */ + struct timeval rw_end[2]; + unsigned int rw_end_set[2]; /* * read/write mixed workload state */ os_random_state_t rwmix_state; + unsigned long long rwmix_bytes; struct timeval rwmix_switch; enum fio_ddir rwmix_ddir; + unsigned int ddir_nr; /* * IO historic logs */ - struct list_head io_hist_list; + struct rb_root io_hist_tree; struct list_head io_log_list; /* @@ -676,6 +695,8 @@ extern int fio_cmd_option_parse(struct thread_data *, const char *, char *); extern void fio_fill_default_options(struct thread_data *); extern int fio_show_option_help(const char *); extern void fio_options_dup_and_init(struct option *); +extern void options_mem_dupe(struct thread_data *); +extern void options_mem_free(struct thread_data *); #define FIO_GETOPT_JOB 0x89988998 #define FIO_NR_OPTIONS 128 @@ -693,6 +714,7 @@ extern void get_file(struct fio_file *); extern void put_file(struct thread_data *, struct fio_file *); extern int add_dir_files(struct thread_data *, const char *); extern int init_random_map(struct thread_data *); +extern void dup_files(struct thread_data *, struct thread_data *); /* * ETA/status stuff