X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.h;h=1322656fd4497501577804124438f38f55765e93;hb=f53eaac02ec46bdf7f87058f30667be80975caf6;hp=09c441491be9a41221042d6d837038adb55d0100;hpb=9943adfb8adf50e6f54ab6aff613c99a3a75d224;p=fio.git diff --git a/fio.h b/fio.h index 09c44149..1322656f 100644 --- a/fio.h +++ b/fio.h @@ -144,6 +144,7 @@ enum { FIO_RAND_POISSON3_OFF, FIO_RAND_PRIO_CMDS, FIO_RAND_DEDUPE_WORKING_SET_IX, + FIO_RAND_FDP_OFF, FIO_RAND_NR_OFFS, }; @@ -163,6 +164,7 @@ enum { F_ADV_TYPE, F_ADV_RANDOM, F_ADV_SEQUENTIAL, + F_ADV_NOREUSE, }; /* @@ -261,6 +263,7 @@ struct thread_data { struct frand_state verify_state_last_do_io; struct frand_state trim_state; struct frand_state delay_state; + struct frand_state fdp_state; struct frand_state buf_state; struct frand_state buf_state_prev; @@ -274,7 +277,7 @@ struct thread_data { unsigned long long num_unique_pages; struct zone_split_index **zone_state_index; - unsigned int num_open_zones; + unsigned int num_write_zones; unsigned int verify_batch; unsigned int trim_batch; @@ -376,7 +379,7 @@ struct thread_data { uint64_t *thinktime_blocks_counter; struct timespec last_thinktime; - uint64_t last_thinktime_blocks; + int64_t last_thinktime_blocks; /* * State for random io, a bitmap of blocks done vs not done @@ -385,7 +388,8 @@ struct thread_data { struct timespec start; /* start of this loop */ struct timespec epoch; /* time job was started */ - unsigned long long alternate_epoch; /* Time job was started, clock_gettime's clock_id epoch based. */ + unsigned long long alternate_epoch; /* Time job was started, as clock_gettime(log_alternate_epoch_clock_id) */ + unsigned long long job_start; /* Time job was started, as clock_gettime(job_start_clock_id) */ struct timespec last_issue; long time_offset; struct timespec ts_cache; @@ -637,7 +641,6 @@ extern void fio_options_dup_and_init(struct option *); extern char *fio_option_dup_subs(const char *); extern void fio_options_mem_dupe(struct thread_data *); extern void td_fill_rand_seeds(struct thread_data *); -extern void td_fill_verify_state_seed(struct thread_data *); extern void add_job_opts(const char **, int); extern int ioengine_load(struct thread_data *); extern bool parse_dryrun(void); @@ -753,9 +756,24 @@ extern void lat_target_reset(struct thread_data *); /* * Iterates all threads/processes within all the defined jobs + * Usage: + * for_each_td(var_name_for_td) { + * << bodoy of your loop >> + * Note: internally-scoped loop index availble as __td_index + * } end_for_each_td() */ -#define for_each_td(td, i) \ - for ((i) = 0, (td) = &segments[0].threads[0]; (i) < (int) thread_number; (i)++, (td) = tnumber_to_td((i))) +#define for_each_td(td) \ +{ \ + int __td_index; \ + struct thread_data *(td); \ + for (__td_index = 0, (td) = &segments[0].threads[0];\ + __td_index < (int) thread_number; __td_index++, (td) = tnumber_to_td(__td_index)) +#define for_each_td_index() \ +{ \ + int __td_index; \ + for (__td_index = 0; __td_index < (int) thread_number; __td_index++) +#define end_for_each() } + #define for_each_file(td, f, i) \ if ((td)->files_index) \ for ((i) = 0, (f) = (td)->files[0]; \