[PATCH] Support for hugetlb backed shared memory
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 434c34b237ed718cb1c8312fc77629281d35c39f..c4facfbe995b2f0ed20e88353fb645a528721ec9 100644 (file)
--- a/fio.h
+++ b/fio.h
 #include "arch.h"
 #include "os.h"
 
+enum fio_ddir {
+       DDIR_READ = 0,
+       DDIR_WRITE,
+       DDIR_SYNC,
+};
+
 struct io_stat {
        unsigned long val;
        unsigned long val_sq;
@@ -29,7 +35,7 @@ struct io_stat {
 struct io_sample {
        unsigned long time;
        unsigned long val;
-       unsigned int ddir;
+       enum fio_ddir ddir;
 };
 
 struct io_log {
@@ -43,7 +49,7 @@ struct io_piece {
        struct fio_file *file;
        unsigned long long offset;
        unsigned int len;
-       int ddir;
+       enum fio_ddir ddir;
 };
 
 /*
@@ -71,7 +77,7 @@ struct io_u {
        unsigned int resid;
        unsigned int error;
 
-       unsigned char ddir;
+       enum fio_ddir ddir;
 
        /*
         * io engine private data
@@ -111,18 +117,13 @@ struct group_run_stats {
        unsigned long long agg[2];
 };
 
-enum fio_ddir {
-       DDIR_READ = 0,
-       DDIR_WRITE,
-       DDIR_SYNC,
-};
-
 /*
  * What type of allocation to use for io buffers
  */
 enum fio_memtype {
        MEM_MALLOC = 0, /* ordinary malloc */
        MEM_SHM,        /* use shared memory segments */
+       MEM_SHMHUGE,    /* use shared memory segments with huge pages */
        MEM_MMAP,       /* use anonynomous mmap */
 };
 
@@ -156,9 +157,12 @@ struct fio_file {
        unsigned long long real_file_size;
        unsigned long long file_offset;
        unsigned long long last_pos;
+       unsigned long long last_completed_pos;
 
        unsigned long *file_map;
        unsigned int num_maps;
+
+       unsigned int unlink;
 };
 
 /*
@@ -307,6 +311,7 @@ struct thread_data {
 
        struct timeval start;   /* start of this loop */
        struct timeval epoch;   /* time job was started */
+       struct timeval end_time;/* time job ended */
 
        /*
         * fio system usage accounting
@@ -348,7 +353,6 @@ struct thread_data {
 #define td_verror(td, err)     __td_verror((td), (err), strerror((err)))
 #define td_vmsg(td, err, msg)  __td_verror((td), (err), (msg))
 
-extern int rate_quit;
 extern int exitall_on_terminate;
 extern int thread_number;
 extern int shm_id;
@@ -356,8 +360,8 @@ extern int groupid;
 extern int terse_output;
 extern FILE *f_out;
 extern FILE *f_err;
-extern const char *fio_inst_prefix;
 extern int temp_stall_ts;
+extern unsigned long long mlock_size;
 
 extern struct thread_data *threads;
 
@@ -412,6 +416,7 @@ struct io_completion_data {
 
        int error;                      /* output */
        unsigned long bytes_done[2];    /* output */
+       struct timeval time;            /* output */
 };
 
 #define DISK_UTIL_MSEC (250)
@@ -436,9 +441,9 @@ extern void write_iolog_close(struct thread_data *);
 /*
  * Logging
  */
-extern void add_clat_sample(struct thread_data *, int, unsigned long);
-extern void add_slat_sample(struct thread_data *, int, unsigned long);
-extern void add_bw_sample(struct thread_data *, int);
+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 show_run_stats(void);
 extern void init_disk_util(struct thread_data *);
 extern void update_rusage_stat(struct thread_data *);
@@ -451,8 +456,8 @@ extern int setup_rate(struct thread_data *);
 /*
  * Time functions
  */
-extern void time_init(void);
 extern unsigned long utime_since(struct timeval *, struct timeval *);
+extern unsigned long utime_since_now(struct timeval *);
 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 *);
@@ -461,6 +466,7 @@ extern void __usec_sleep(unsigned int);
 extern void usec_sleep(struct thread_data *, unsigned long);
 extern void rate_throttle(struct thread_data *, unsigned long, unsigned int, int);
 extern void fill_start_time(struct timeval *);
+extern void fio_gettime(struct timeval *, void *);
 
 /*
  * Init functions
@@ -473,6 +479,7 @@ extern int init_random_state(struct thread_data *);
  */
 extern void close_files(struct thread_data *);
 extern int setup_files(struct thread_data *);
+extern int open_files(struct thread_data *);
 extern int file_invalidate_cache(struct thread_data *, struct fio_file *);
 
 /*
@@ -566,6 +573,7 @@ static inline void fio_sem_up(volatile int *sem)
        } while (0)
 
 struct ioengine_ops {
+       struct list_head list;
        char name[16];
        int version;
        int flags;
@@ -584,12 +592,16 @@ struct ioengine_ops {
 #define FIO_IOOPS_VERSION      3
 
 extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
+extern int register_ioengine(struct ioengine_ops *);
+extern void unregister_ioengine(struct ioengine_ops *);
 extern void close_ioengine(struct thread_data *);
 
 /*
  * Mark unused variables passed to ops functions as unused, to silence gcc
  */
 #define fio_unused     __attribute((__unused__))
+#define fio_init       __attribute__((constructor))
+#define fio_exit       __attribute__((destructor))
 
 #define for_each_td(td, i)     \
        for ((i) = 0, (td) = &threads[0]; (i) < (int) thread_number; (i)++, (td)++)