X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.h;h=325355174bd37c1134bb3d492a3f4aecee5e10c7;hb=HEAD;hp=6b841e9c263bf1b1960d00b551d78e7ebb986467;hpb=590a7bdf84a4c1fb9b128a1680eb719c888396bd;p=fio.git diff --git a/fio.h b/fio.h index 6b841e9c..4bb6cfa7 100644 --- a/fio.h +++ b/fio.h @@ -71,6 +71,16 @@ struct fio_sem; +#define MAX_TRIM_RANGE 256 + +/* + * Range for trim command + */ +struct trim_range { + unsigned long long start; + unsigned long long len; +}; + /* * offset generator types */ @@ -144,6 +154,7 @@ enum { FIO_RAND_POISSON3_OFF, FIO_RAND_PRIO_CMDS, FIO_RAND_DEDUPE_WORKING_SET_IX, + FIO_RAND_FDP_OFF, FIO_RAND_NR_OFFS, }; @@ -247,8 +258,9 @@ struct thread_data { size_t orig_buffer_size; volatile int runstate; volatile bool terminate; - bool last_was_sync; - enum fio_ddir last_ddir; + + enum fio_ddir last_ddir_completed; + enum fio_ddir last_ddir_issued; int mmapfd; @@ -262,6 +274,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; @@ -275,7 +288,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; @@ -386,7 +399,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; @@ -606,9 +620,17 @@ static inline void fio_ro_check(const struct thread_data *td, struct io_u *io_u) !(io_u->ddir == DDIR_TRIM && !td_trim(td))); } +static inline bool multi_range_trim(struct thread_data *td, struct io_u *io_u) +{ + if (io_u->ddir == DDIR_TRIM && td->o.num_range > 1) + return true; + + return false; +} + static inline bool should_fsync(struct thread_data *td) { - if (td->last_was_sync) + if (ddir_sync(td->last_ddir_issued)) return false; if (td_write(td) || td->o.override_sync) return true; @@ -638,7 +660,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); @@ -686,8 +707,8 @@ enum { TD_NR, }; -#define TD_ENG_FLAG_SHIFT 18 -#define TD_ENG_FLAG_MASK ((1ULL << 18) - 1) +#define TD_ENG_FLAG_SHIFT (__TD_F_LAST) +#define TD_ENG_FLAG_MASK ((1ULL << (__TD_F_LAST)) - 1) static inline void td_set_ioengine_flags(struct thread_data *td) {