X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=c9fa6a9fa8672b5af02181cced08bd17189882f0;hp=a9e2e3bb6443f9e224da6653e338fd80f3d36241;hb=17127517a3ccff19993e36ec3f7bc15044898f2c;hpb=2b7a01d01ea19f6e4090c7a8280bc6bf983e781f diff --git a/fio.h b/fio.h index a9e2e3bb..c9fa6a9f 100644 --- a/fio.h +++ b/fio.h @@ -75,6 +75,7 @@ struct io_sample { unsigned long time; unsigned long val; enum fio_ddir ddir; + unsigned int bs; }; /* @@ -144,7 +145,6 @@ struct io_u { void *buf; unsigned long buflen; unsigned long long offset; - unsigned long long endpos; /* * IO engine state, may be different from above when we get @@ -342,6 +342,8 @@ struct fio_file { int references; enum fio_file_flags flags; + + struct disk_util *du; }; /* @@ -432,8 +434,8 @@ struct thread_options { unsigned int ba[2]; unsigned int min_bs[2]; unsigned int max_bs[2]; - struct bssplit *bssplit; - unsigned int bssplit_nr; + struct bssplit *bssplit[2]; + unsigned int bssplit_nr[2]; unsigned int nr_files; unsigned int open_files; @@ -446,6 +448,7 @@ struct thread_options { unsigned int create_fsync; unsigned int create_on_open; unsigned int end_fsync; + unsigned int pre_read; unsigned int sync_io; unsigned int verify; unsigned int do_verify; @@ -572,6 +575,8 @@ struct thread_data { char *sysfs_root; + unsigned long rand_seeds[6]; + os_random_state_t bsrange_state; os_random_state_t verify_state; @@ -782,8 +787,29 @@ struct disk_util { unsigned long msec; struct timeval time; + + struct fio_mutex *lock; + unsigned long users; }; +static inline void disk_util_inc(struct disk_util *du) +{ + if (du) { + fio_mutex_down(du->lock); + du->users++; + fio_mutex_up(du->lock); + } +} + +static inline void disk_util_dec(struct disk_util *du) +{ + if (du) { + fio_mutex_down(du->lock); + du->users--; + fio_mutex_up(du->lock); + } +} + #define DISK_UTIL_MSEC (250) /* @@ -808,9 +834,12 @@ extern void write_iolog_close(struct thread_data *); /* * Logging */ -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 add_clat_sample(struct thread_data *, enum fio_ddir, unsigned long, + unsigned int); +extern void add_slat_sample(struct thread_data *, enum fio_ddir, unsigned long, + unsigned int); +extern void add_bw_sample(struct thread_data *, enum fio_ddir, unsigned int, + struct timeval *); extern void show_run_stats(void); extern void init_disk_util(struct thread_data *); extern void update_rusage_stat(struct thread_data *); @@ -821,7 +850,7 @@ extern void finish_log_named(struct thread_data *, struct io_log *, const char * extern void __finish_log(struct io_log *, const char *); extern struct io_log *agg_io_log[2]; extern int write_bw_log; -extern void add_agg_sample(unsigned long, enum fio_ddir); +extern void add_agg_sample(unsigned long, enum fio_ddir, unsigned int); /* * Time functions @@ -854,6 +883,7 @@ extern int fio_show_option_help(const char *); extern void fio_options_dup_and_init(struct option *); extern void options_mem_dupe(struct thread_data *); extern void options_mem_free(struct thread_data *); +extern void td_fill_rand_seeds(struct thread_data *); #define FIO_GETOPT_JOB 0x89988998 #define FIO_NR_OPTIONS 128 @@ -867,6 +897,7 @@ extern int __must_check file_invalidate_cache(struct thread_data *, struct fio_f extern int __must_check generic_open_file(struct thread_data *, struct fio_file *); extern int __must_check generic_close_file(struct thread_data *, struct fio_file *); extern int __must_check generic_get_file_size(struct thread_data *, struct fio_file *); +extern int __must_check pre_read_files(struct thread_data *); extern int add_file(struct thread_data *, const char *); extern void get_file(struct fio_file *); extern int __must_check put_file(struct thread_data *, struct fio_file *); @@ -910,6 +941,7 @@ enum { TD_INITIALIZED, TD_RAMP, TD_RUNNING, + TD_PRE_READING, TD_VERIFYING, TD_FSYNCING, TD_EXITED, @@ -1033,6 +1065,8 @@ static inline void fio_file_reset(struct fio_file *f) { f->last_free_lookup = 0; f->last_pos = f->file_offset; + if (f->file_map) + memset(f->file_map, 0, f->num_maps * sizeof(int)); } static inline void clear_error(struct thread_data *td)