pre_read fixes
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 1484749862d6aa181521e0719145674b3374ecfc..b1360dd3504f69dde093e5fd518f0fc23556a558 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -75,6 +75,7 @@ struct io_sample {
        unsigned long time;
        unsigned long val;
        enum fio_ddir ddir;
+       unsigned int bs;
 };
 
 /*
@@ -429,10 +430,11 @@ struct thread_options {
        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;
-       unsigned int bssplit_nr;
+       struct bssplit *bssplit[2];
+       unsigned int bssplit_nr[2];
 
        unsigned int nr_files;
        unsigned int open_files;
@@ -443,7 +445,9 @@ struct thread_options {
        unsigned int invalidate_cache;
        unsigned int create_serialize;
        unsigned int create_fsync;
+       unsigned int create_on_open;
        unsigned int end_fsync;
+       unsigned int pre_read;
        unsigned int sync_io;
        unsigned int verify;
        unsigned int do_verify;
@@ -496,9 +500,17 @@ struct thread_options {
        unsigned int zero_buffers;
        unsigned int refill_buffers;
        unsigned int time_based;
+       unsigned int disable_clat;
+       unsigned int disable_slat;
+       unsigned int disable_bw;
+       unsigned int gtod_reduce;
+       unsigned int gtod_cpu;
+       unsigned int gtod_offload;
 
        char *read_iolog_file;
        char *write_iolog_file;
+       char *bw_log_file;
+       char *lat_log_file;
 
        /*
         * Pre-run and post-run shell
@@ -534,6 +546,7 @@ struct thread_data {
        int groupid;
        struct thread_stat ts;
        struct fio_file **files;
+       unsigned int files_size;
        unsigned int files_index;
        unsigned int nr_open_files;
        unsigned int nr_done_files;
@@ -561,6 +574,8 @@ struct thread_data {
 
        char *sysfs_root;
 
+       unsigned long rand_seeds[6];
+
        os_random_state_t bsrange_state;
        os_random_state_t verify_state;
 
@@ -609,6 +624,9 @@ struct thread_data {
        struct timeval epoch;   /* time job was started */
        struct timeval rw_end[2];
        struct timeval last_issue;
+       struct timeval tv_cache;
+       unsigned int tv_cache_nr;
+       unsigned int tv_cache_mask;
        unsigned int rw_end_set[2];
        unsigned int ramp_time_over;
 
@@ -646,11 +664,13 @@ struct thread_data {
 };
 
 /*
- * roundrobin available files, or choose one at random.
+ * roundrobin available files, or choose one at random, or do each one
+ * serially.
  */
 enum {
        FIO_FSERVICE_RANDOM     = 1,
        FIO_FSERVICE_RR         = 2,
+       FIO_FSERVICE_SEQ        = 3,
 };
 
 /*
@@ -690,6 +710,8 @@ extern int read_only;
 extern int eta_print;
 extern unsigned long done_secs;
 extern char *job_section;
+extern int fio_gtod_offload;
+extern int fio_gtod_cpu;
 
 extern struct thread_data *threads;
 
@@ -790,19 +812,23 @@ extern void write_iolog_close(struct thread_data *);
 /*
  * Logging
  */
-extern void add_clat_sample(struct thread_data *, enum fio_ddir, unsigned long);
-extern void add_slat_sample(struct thread_data *, enum fio_ddir, unsigned long);
-extern void add_bw_sample(struct thread_data *, enum fio_ddir, struct timeval *);
+extern void add_clat_sample(struct thread_data *, enum fio_ddir, unsigned long,
+                               unsigned int);
+extern void add_slat_sample(struct thread_data *, enum fio_ddir, unsigned long,
+                               unsigned int);
+extern void add_bw_sample(struct thread_data *, enum fio_ddir, unsigned int,
+                               struct timeval *);
 extern void show_run_stats(void);
 extern void init_disk_util(struct thread_data *);
 extern void update_rusage_stat(struct thread_data *);
 extern void update_io_ticks(void);
 extern void setup_log(struct io_log **);
 extern void finish_log(struct thread_data *, struct io_log *, const char *);
+extern void finish_log_named(struct thread_data *, struct io_log *, const char *, const char *);
 extern void __finish_log(struct io_log *, const char *);
 extern struct io_log *agg_io_log[2];
 extern int write_bw_log;
-extern void add_agg_sample(unsigned long, enum fio_ddir);
+extern void add_agg_sample(unsigned long, enum fio_ddir, unsigned int);
 
 /*
  * Time functions
@@ -813,11 +839,13 @@ extern unsigned long mtime_since(struct timeval *, struct timeval *);
 extern unsigned long mtime_since_now(struct timeval *);
 extern unsigned long time_since_now(struct timeval *);
 extern unsigned long mtime_since_genesis(void);
-extern void __usec_sleep(unsigned int);
+extern void usec_spin(unsigned int);
 extern void usec_sleep(struct thread_data *, unsigned long);
 extern void rate_throttle(struct thread_data *, unsigned long, unsigned int);
 extern void fill_start_time(struct timeval *);
 extern void fio_gettime(struct timeval *, void *);
+extern void fio_gtod_init(void);
+extern void fio_gtod_update(void);
 extern void set_genesis_time(void);
 extern int ramp_time_over(struct thread_data *);
 extern int in_ramp_time(struct thread_data *);
@@ -833,6 +861,7 @@ 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 *);
+extern void td_fill_rand_seeds(struct thread_data *);
 #define FIO_GETOPT_JOB         0x89988998
 #define FIO_NR_OPTIONS         128
 
@@ -842,10 +871,11 @@ extern void options_mem_free(struct thread_data *);
 extern void close_files(struct thread_data *);
 extern void close_and_free_files(struct thread_data *);
 extern int __must_check setup_files(struct thread_data *);
-extern int __must_check open_files(struct thread_data *);
 extern int __must_check file_invalidate_cache(struct thread_data *, struct fio_file *);
 extern int __must_check generic_open_file(struct thread_data *, struct fio_file *);
 extern int __must_check generic_close_file(struct thread_data *, struct fio_file *);
+extern int __must_check generic_get_file_size(struct thread_data *, struct fio_file *);
+extern int __must_check pre_read_files(struct thread_data *);
 extern int add_file(struct thread_data *, const char *);
 extern void get_file(struct fio_file *);
 extern int __must_check put_file(struct thread_data *, struct fio_file *);
@@ -889,6 +919,7 @@ enum {
        TD_INITIALIZED,
        TD_RAMP,
        TD_RUNNING,
+       TD_PRE_READING,
        TD_VERIFYING,
        TD_FSYNCING,
        TD_EXITED,
@@ -945,6 +976,7 @@ extern int __must_check td_io_getevents(struct thread_data *, unsigned int, unsi
 extern int __must_check td_io_commit(struct thread_data *);
 extern int __must_check td_io_open_file(struct thread_data *, struct fio_file *);
 extern int td_io_close_file(struct thread_data *, struct fio_file *);
+extern int __must_check td_io_get_file_size(struct thread_data *, struct fio_file *);
 
 /*
  * blktrace support
@@ -970,11 +1002,12 @@ struct ioengine_ops {
        void (*cleanup)(struct thread_data *);
        int (*open_file)(struct thread_data *, struct fio_file *);
        int (*close_file)(struct thread_data *, struct fio_file *);
+       int (*get_file_size)(struct thread_data *, struct fio_file *);
        void *data;
        void *dlhandle;
 };
 
-#define FIO_IOOPS_VERSION      9
+#define FIO_IOOPS_VERSION      10
 
 extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
 extern void register_ioengine(struct ioengine_ops *);
@@ -1010,6 +1043,8 @@ static inline void fio_file_reset(struct fio_file *f)
 {
        f->last_free_lookup = 0;
        f->last_pos = f->file_offset;
+       if (f->file_map)
+               memset(f->file_map, 0, f->num_maps * sizeof(int));
 }
 
 static inline void clear_error(struct thread_data *td)
@@ -1037,4 +1072,13 @@ static inline void dprint_io_u(struct io_u *io_u, const char *p)
 #define dprint_io_u(io_u, p)
 #endif
 
+static inline int fio_fill_issue_time(struct thread_data *td)
+{
+       if (td->o.read_iolog_file ||
+           !td->o.disable_clat || !td->o.disable_slat || !td->o.disable_bw)
+               return 1;
+
+       return 0;
+}
+
 #endif