Merge branch 'master' of ssh://router/data/git/fio
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index f5786ea69a1d5500d4cb9a73d24cf7e6a7f42b0a..c9fa6a9fa8672b5af02181cced08bd17189882f0 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;
 };
 
 /*
@@ -144,7 +145,6 @@ struct io_u {
        void *buf;
        unsigned long buflen;
        unsigned long long offset;
-       unsigned long long endpos;
 
        /*
         * IO engine state, may be different from above when we get
@@ -342,6 +342,8 @@ struct fio_file {
 
        int references;
        enum fio_file_flags flags;
+
+       struct disk_util *du;
 };
 
 /*
@@ -446,6 +448,7 @@ struct thread_options {
        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;
@@ -784,8 +787,29 @@ struct disk_util {
 
        unsigned long msec;
        struct timeval time;
+
+       struct fio_mutex *lock;
+       unsigned long users;
 };
 
+static inline void disk_util_inc(struct disk_util *du)
+{
+       if (du) {
+               fio_mutex_down(du->lock);
+               du->users++;
+               fio_mutex_up(du->lock);
+       }
+}
+
+static inline void disk_util_dec(struct disk_util *du)
+{
+       if (du) {
+               fio_mutex_down(du->lock);
+               du->users--;
+               fio_mutex_up(du->lock);
+       }
+}
+
 #define DISK_UTIL_MSEC (250)
 
 /*
@@ -810,9 +834,12 @@ 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 *);
@@ -823,7 +850,7 @@ extern void finish_log_named(struct thread_data *, struct io_log *, 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
@@ -870,6 +897,7 @@ extern int __must_check file_invalidate_cache(struct thread_data *, struct fio_f
 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 *);
@@ -913,6 +941,7 @@ enum {
        TD_INITIALIZED,
        TD_RAMP,
        TD_RUNNING,
+       TD_PRE_READING,
        TD_VERIFYING,
        TD_FSYNCING,
        TD_EXITED,