verify: add new experimental mode that requires no meta data
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 8bb5b0346eddde2f13aa17b87f8408d4ae281d8c..ed793ae560e180bc4255315de441c00be27b4f8b 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -40,14 +40,20 @@ struct thread_data;
 #include "stat.h"
 #include "flow.h"
 
-#ifdef FIO_HAVE_GUASI
-#include <guasi.h>
-#endif
-
 #ifdef FIO_HAVE_SOLARISAIO
 #include <sys/asynch.h>
 #endif
 
+#ifdef CONFIG_LIBNUMA
+#include <linux/mempolicy.h>
+#include <numa.h>
+
+/*
+ * "local" is pseudo-policy
+ */
+#define MPOL_LOCAL MPOL_MAX
+#endif
+
 /*
  * What type of allocation to use for io buffers
  */
@@ -143,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];
@@ -152,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;
@@ -167,6 +175,12 @@ struct thread_options {
        unsigned int bs_unaligned;
        unsigned int fsync_on_close;
 
+       unsigned int random_distribution;
+       double zipf_theta;
+       double pareto_h;
+
+       unsigned int random_generator;
+
        unsigned int hugepage_size;
        unsigned int rw_min_bs;
        unsigned int thinktime;
@@ -188,6 +202,8 @@ struct thread_options {
        enum fio_memtype mem_type;
        unsigned int mem_align;
 
+       unsigned int max_latency;
+
        unsigned int stonewall;
        unsigned int new_group;
        unsigned int numjobs;
@@ -195,6 +211,14 @@ struct thread_options {
        unsigned int cpumask_set;
        os_cpu_mask_t verify_cpumask;
        unsigned int verify_cpumask_set;
+#ifdef CONFIG_LIBNUMA
+       struct bitmask *numa_cpunodesmask;
+       unsigned int numa_cpumask_set;
+       unsigned short numa_mem_mode;
+       unsigned int numa_mem_prefer_node;
+       struct bitmask *numa_memnodesmask;
+       unsigned int numa_memmask_set;
+#endif
        unsigned int iolog;
        unsigned int rwmixcycle;
        unsigned int rwmix[2];
@@ -283,11 +307,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;
@@ -342,7 +389,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;
@@ -470,6 +517,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
         */
@@ -534,6 +583,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;
@@ -548,6 +598,7 @@ 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;
@@ -563,14 +614,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;
@@ -662,6 +708,7 @@ enum {
        TD_CREATED,
        TD_INITIALIZED,
        TD_RAMP,
+       TD_SETTING_UP,
        TD_RUNNING,
        TD_PRE_READING,
        TD_VERIFYING,
@@ -795,4 +842,15 @@ enum {
        FIO_OUTPUT_NORMAL,
 };
 
+enum {
+       FIO_RAND_DIST_RANDOM    = 0,
+       FIO_RAND_DIST_ZIPF,
+       FIO_RAND_DIST_PARETO,
+};
+
+enum {
+       FIO_RAND_GEN_TAUSWORTHE = 0,
+       FIO_RAND_GEN_LFSR,
+};
+
 #endif