Add filename_format option
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 1526d191a6eab03911696c2e7c45aab566be2385..db594ab8e4d01250fe7360a48b23d3a3211f350a 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -40,15 +40,11 @@ struct thread_data;
 #include "stat.h"
 #include "flow.h"
 
-#ifdef FIO_HAVE_GUASI
-#include <guasi.h>
-#endif
-
-#ifdef FIO_HAVE_SOLARISAIO
+#ifdef CONFIG_SOLARISAIO
 #include <sys/asynch.h>
 #endif
 
-#ifdef FIO_HAVE_LIBNUMA
+#ifdef CONFIG_LIBNUMA
 #include <linux/mempolicy.h>
 #include <numa.h>
 
@@ -106,6 +102,7 @@ struct thread_options {
        char *name;
        char *directory;
        char *filename;
+       char *filename_format;
        char *opendir;
        char *ioengine;
        enum td_ddir td_ddir;
@@ -139,7 +136,6 @@ struct thread_options {
        unsigned int nr_files;
        unsigned int open_files;
        enum file_lock_mode file_lock_mode;
-       unsigned int lockfile_batch;
 
        unsigned int odirect;
        unsigned int invalidate_cache;
@@ -153,6 +149,7 @@ struct thread_options {
        unsigned int verify;
        unsigned int do_verify;
        unsigned int verifysort;
+       unsigned int verifysort_nr;
        unsigned int verify_interval;
        unsigned int verify_offset;
        char verify_pattern[MAX_PATTERN_SIZE];
@@ -162,6 +159,7 @@ struct thread_options {
        unsigned int verify_async;
        unsigned long long verify_backlog;
        unsigned int verify_batch;
+       unsigned int experimental_verify;
        unsigned int use_thread;
        unsigned int unlink;
        unsigned int do_disk_util;
@@ -181,6 +179,8 @@ struct thread_options {
        double zipf_theta;
        double pareto_h;
 
+       unsigned int random_generator;
+
        unsigned int hugepage_size;
        unsigned int rw_min_bs;
        unsigned int thinktime;
@@ -211,7 +211,7 @@ struct thread_options {
        unsigned int cpumask_set;
        os_cpu_mask_t verify_cpumask;
        unsigned int verify_cpumask_set;
-#ifdef FIO_HAVE_LIBNUMA
+#ifdef CONFIG_LIBNUMA
        struct bitmask *numa_cpunodesmask;
        unsigned int numa_cpumask_set;
        unsigned short numa_mem_mode;
@@ -237,6 +237,7 @@ struct thread_options {
        unsigned int disable_clat;
        unsigned int disable_slat;
        unsigned int disable_bw;
+       unsigned int unified_rw_rep;
        unsigned int gtod_reduce;
        unsigned int gtod_cpu;
        unsigned int gtod_offload;
@@ -247,7 +248,7 @@ struct thread_options {
        unsigned int trim_zero;
        unsigned long long trim_backlog;
        unsigned int clat_percentiles;
-       unsigned int overwrite_plist;
+       unsigned int percentile_precision;      /* digits after decimal for percentiles */
        fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN];
 
        char *read_iolog_file;
@@ -307,11 +308,34 @@ struct thread_options {
        unsigned int sync_file_range;
 };
 
+enum {
+       TD_F_VER_BACKLOG        = 1,
+       TD_F_TRIM_BACKLOG       = 2,
+       TD_F_READ_IOLOG         = 4,
+       TD_F_REFILL_BUFFERS     = 8,
+       TD_F_SCRAMBLE_BUFFERS   = 16,
+       TD_F_VER_NONE           = 32,
+       TD_F_PROFILE_OPS        = 64,
+};
+
+enum {
+       FIO_RAND_BS_OFF         = 0,
+       FIO_RAND_VER_OFF,
+       FIO_RAND_MIX_OFF,
+       FIO_RAND_FILE_OFF,
+       FIO_RAND_BLOCK_OFF,
+       FIO_RAND_FILE_SIZE_OFF,
+       FIO_RAND_TRIM_OFF,
+       FIO_RAND_BUF_OFF,
+       FIO_RAND_NR_OFFS,
+};
+
 /*
  * This describes a single thread/process executing a fio job.
  */
 struct thread_data {
        struct thread_options o;
+       unsigned long flags;
        void *eo;
        char verror[FIO_VERROR_SIZE];
        pthread_t thread;
@@ -331,10 +355,13 @@ struct thread_data {
        uint64_t stat_io_blocks[DDIR_RWDIR_CNT];
        struct timeval iops_sample_time;
 
+       volatile int update_rusage;
+       struct fio_mutex *rusage_sem;
        struct rusage ru_start;
        struct rusage ru_end;
 
        struct fio_file **files;
+       unsigned char *file_locks;
        unsigned int files_size;
        unsigned int files_index;
        unsigned int nr_open_files;
@@ -366,7 +393,7 @@ struct thread_data {
 
        char *sysfs_root;
 
-       unsigned long rand_seeds[8];
+       unsigned long rand_seeds[FIO_RAND_NR_OFFS];
 
        union {
                os_random_state_t bsrange_state;
@@ -430,22 +457,22 @@ struct thread_data {
        /*
         * Rate state
         */
-       unsigned long long rate_bps[DDIR_RWDIR_CNT];
+       uint64_t rate_bps[DDIR_RWDIR_CNT];
        long rate_pending_usleep[DDIR_RWDIR_CNT];
        unsigned long rate_bytes[DDIR_RWDIR_CNT];
        unsigned long rate_blocks[DDIR_RWDIR_CNT];
        struct timeval lastrate[DDIR_RWDIR_CNT];
 
-       unsigned long long total_io_size;
-       unsigned long long fill_device_size;
+       uint64_t total_io_size;
+       uint64_t fill_device_size;
 
        unsigned long io_issues[DDIR_RWDIR_CNT];
-       unsigned long long io_blocks[DDIR_RWDIR_CNT];
-       unsigned long long this_io_blocks[DDIR_RWDIR_CNT];
-       unsigned long long io_bytes[DDIR_RWDIR_CNT];
-       unsigned long long io_skip_bytes;
-       unsigned long long this_io_bytes[DDIR_RWDIR_CNT];
-       unsigned long long zone_bytes;
+       uint64_t io_blocks[DDIR_RWDIR_CNT];
+       uint64_t this_io_blocks[DDIR_RWDIR_CNT];
+       uint64_t io_bytes[DDIR_RWDIR_CNT];
+       uint64_t io_skip_bytes;
+       uint64_t this_io_bytes[DDIR_RWDIR_CNT];
+       uint64_t zone_bytes;
        struct fio_mutex *mutex;
 
        /*
@@ -494,6 +521,8 @@ struct thread_data {
        struct flist_head trim_list;
        unsigned long trim_entries;
 
+       struct flist_head next_rand_list;
+
        /*
         * for fileservice, how often to switch to a new file
         */
@@ -542,7 +571,7 @@ enum {
                int e = (err);                                          \
                (td)->error = e;                                        \
                if (!(td)->first_error)                                 \
-                       snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, func=%s, error=%s", __FILE__, __LINE__, (func), (msg));               \
+                       snprintf(td->verror, sizeof(td->verror), "file:%s:%d, func=%s, error=%s", __FILE__, __LINE__, (func), (msg));           \
        } while (0)
 
 
@@ -558,6 +587,7 @@ enum {
 
 extern int exitall_on_terminate;
 extern unsigned int thread_number;
+extern unsigned int stat_number;
 extern unsigned int nr_process, nr_thread;
 extern int shm_id;
 extern int groupid;
@@ -567,18 +597,19 @@ extern unsigned long long mlock_size;
 extern uintptr_t page_mask, page_size;
 extern int read_only;
 extern int eta_print;
+extern int eta_new_line;
 extern unsigned long done_secs;
 extern char *job_section;
 extern int fio_gtod_offload;
 extern int fio_gtod_cpu;
 extern enum fio_cs fio_clock_source;
+extern int fio_clock_source_set;
 extern int warnings_fatal;
 extern int terse_version;
 extern int is_backend;
 extern int nr_clients;
 extern int log_syslog;
 extern const char fio_version_string[];
-extern const fio_fp64_t def_percentile_list[FIO_IO_U_LIST_MAX_LEN];
 
 extern struct thread_data *threads;
 
@@ -587,14 +618,9 @@ static inline void fio_ro_check(struct thread_data *td, struct io_u *io_u)
        assert(!(io_u->ddir == DDIR_WRITE && !td_write(td)));
 }
 
-#define BLOCKS_PER_MAP         (8 * sizeof(unsigned long))
-#define TO_MAP_BLOCK(f, b)     (b)
-#define RAND_MAP_IDX(f, b)     (TO_MAP_BLOCK(f, b) / BLOCKS_PER_MAP)
-#define RAND_MAP_BIT(f, b)     (TO_MAP_BLOCK(f, b) & (BLOCKS_PER_MAP - 1))
-
 #define REAL_MAX_JOBS          2048
 
-static inline enum error_type td_error_type(enum fio_ddir ddir, int err)
+static inline enum error_type_bit td_error_type(enum fio_ddir ddir, int err)
 {
        if (err == EILSEQ)
                return ERROR_TYPE_VERIFY_BIT;
@@ -633,8 +659,6 @@ static inline int should_fsync(struct thread_data *td)
 {
        if (td->last_was_sync)
                return 0;
-       if (td->o.odirect)
-               return 0;
        if (td_write(td) || td_rw(td) || td->o.override_sync)
                return 1;
 
@@ -685,8 +709,8 @@ enum {
        TD_NOT_CREATED = 0,
        TD_CREATED,
        TD_INITIALIZED,
-       TD_SETTING_UP,
        TD_RAMP,
+       TD_SETTING_UP,
        TD_RUNNING,
        TD_PRE_READING,
        TD_VERIFYING,
@@ -770,7 +794,7 @@ static inline int __should_check_rate(struct thread_data *td,
 }
 
 static inline int should_check_rate(struct thread_data *td,
-                                   unsigned long *bytes_done)
+                                   uint64_t *bytes_done)
 {
        int ret = 0;
 
@@ -784,6 +808,14 @@ static inline int should_check_rate(struct thread_data *td,
        return ret;
 }
 
+static inline unsigned int td_max_bs(struct thread_data *td)
+{
+       unsigned int max_bs;
+
+       max_bs = max(td->o.max_bs[DDIR_READ], td->o.max_bs[DDIR_WRITE]);
+       return max(td->o.max_bs[DDIR_TRIM], max_bs);
+}
+
 static inline int is_power_of_2(unsigned int val)
 {
        return (val != 0 && ((val & (val - 1)) == 0));
@@ -826,4 +858,9 @@ enum {
        FIO_RAND_DIST_PARETO,
 };
 
+enum {
+       FIO_RAND_GEN_TAUSWORTHE = 0,
+       FIO_RAND_GEN_LFSR,
+};
+
 #endif