File reset should clear random map as well
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 1484749862d6aa181521e0719145674b3374ecfc..4077a5bed30647d9c0cc9ef8a135246b0eebca47 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -429,6 +429,7 @@ 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;
@@ -443,6 +444,7 @@ 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 sync_io;
        unsigned int verify;
@@ -496,9 +498,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 +544,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;
@@ -609,6 +620,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 +660,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 +706,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;
 
@@ -799,6 +817,7 @@ 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;
@@ -813,11 +832,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 *);
@@ -842,10 +863,10 @@ 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 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 *);
@@ -945,6 +966,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 +992,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 +1033,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 +1062,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