X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=a9e2e3bb6443f9e224da6653e338fd80f3d36241;hp=9131792f6548b8fc916349b1f62d1242e8cd6f67;hb=2b7a01d01ea19f6e4090c7a8280bc6bf983e781f;hpb=b29ee5b3dee417016164198fb240344ef666de2b diff --git a/fio.h b/fio.h index 9131792f..a9e2e3bb 100644 --- a/fio.h +++ b/fio.h @@ -429,6 +429,7 @@ struct thread_options { unsigned long long start_offset; unsigned int bs[2]; + unsigned int ba[2]; unsigned int min_bs[2]; unsigned int max_bs[2]; struct bssplit *bssplit; @@ -443,6 +444,7 @@ struct thread_options { unsigned int invalidate_cache; unsigned int create_serialize; unsigned int create_fsync; + unsigned int create_on_open; unsigned int end_fsync; unsigned int sync_io; unsigned int verify; @@ -496,9 +498,17 @@ struct thread_options { unsigned int zero_buffers; unsigned int refill_buffers; unsigned int time_based; + unsigned int disable_clat; + unsigned int disable_slat; + unsigned int disable_bw; + unsigned int gtod_reduce; + unsigned int gtod_cpu; + unsigned int gtod_offload; char *read_iolog_file; char *write_iolog_file; + char *bw_log_file; + char *lat_log_file; /* * Pre-run and post-run shell @@ -534,6 +544,7 @@ struct thread_data { int groupid; struct thread_stat ts; struct fio_file **files; + unsigned int files_size; unsigned int files_index; unsigned int nr_open_files; unsigned int nr_done_files; @@ -609,6 +620,9 @@ struct thread_data { struct timeval epoch; /* time job was started */ struct timeval rw_end[2]; struct timeval last_issue; + struct timeval tv_cache; + unsigned int tv_cache_nr; + unsigned int tv_cache_mask; unsigned int rw_end_set[2]; unsigned int ramp_time_over; @@ -632,12 +646,6 @@ struct thread_data { */ struct flist_head io_log_list; - /* - * timeout handling - */ - struct timeval timeout_end; - struct itimerval timer; - /* * for fileservice, how often to switch to a new file */ @@ -652,11 +660,13 @@ struct thread_data { }; /* - * roundrobin available files, or choose one at random. + * roundrobin available files, or choose one at random, or do each one + * serially. */ enum { FIO_FSERVICE_RANDOM = 1, FIO_FSERVICE_RR = 2, + FIO_FSERVICE_SEQ = 3, }; /* @@ -668,13 +678,6 @@ enum { FIO_ETA_NEVER, }; -/* - * 30 second per-io_u timeout, with 5 second intervals to avoid resetting - * the timer on each queue operation. - */ -#define IO_U_TIMEOUT_INC 5 -#define IO_U_TIMEOUT 30 - #define __td_verror(td, err, msg, func) \ do { \ if ((td)->error) \ @@ -703,6 +706,8 @@ extern int read_only; extern int eta_print; extern unsigned long done_secs; extern char *job_section; +extern int fio_gtod_offload; +extern int fio_gtod_cpu; extern struct thread_data *threads; @@ -753,6 +758,10 @@ struct disk_util_stat { */ struct disk_util { struct flist_head list; + /* If this disk is a slave, hook it into the master's + * list using this head. + */ + struct flist_head slavelist; char *name; char *sysfs_root; @@ -762,6 +771,15 @@ struct disk_util { struct disk_util_stat dus; struct disk_util_stat last_dus; + /* For software raids, this entry maintains pointers to the + * entries for the slave devices. The disk_util entries for + * the slaves devices should primarily be maintained through + * the disk_list list, i.e. for memory allocation and + * de-allocation, etc. Whereas this list should be used only + * for aggregating a software RAID's disk util figures. + */ + struct flist_head slaves; + unsigned long msec; struct timeval time; }; @@ -799,6 +817,7 @@ extern void update_rusage_stat(struct thread_data *); extern void update_io_ticks(void); extern void setup_log(struct io_log **); extern void finish_log(struct thread_data *, struct io_log *, const char *); +extern void finish_log_named(struct thread_data *, struct io_log *, const char *, const char *); extern void __finish_log(struct io_log *, const char *); extern struct io_log *agg_io_log[2]; extern int write_bw_log; @@ -813,11 +832,13 @@ extern unsigned long mtime_since(struct timeval *, struct timeval *); extern unsigned long mtime_since_now(struct timeval *); extern unsigned long time_since_now(struct timeval *); extern unsigned long mtime_since_genesis(void); -extern void __usec_sleep(unsigned int); +extern void usec_spin(unsigned int); extern void usec_sleep(struct thread_data *, unsigned long); extern void rate_throttle(struct thread_data *, unsigned long, unsigned int); extern void fill_start_time(struct timeval *); extern void fio_gettime(struct timeval *, void *); +extern void fio_gtod_init(void); +extern void fio_gtod_update(void); extern void set_genesis_time(void); extern int ramp_time_over(struct thread_data *); extern int in_ramp_time(struct thread_data *); @@ -842,10 +863,10 @@ extern void options_mem_free(struct thread_data *); extern void close_files(struct thread_data *); extern void close_and_free_files(struct thread_data *); extern int __must_check setup_files(struct thread_data *); -extern int __must_check open_files(struct thread_data *); extern int __must_check file_invalidate_cache(struct thread_data *, struct fio_file *); 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 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 *); @@ -924,8 +945,6 @@ extern long __must_check io_u_sync_complete(struct thread_data *, struct io_u *) extern long __must_check io_u_queued_complete(struct thread_data *, int); extern void io_u_queued(struct thread_data *, struct io_u *); extern void io_u_log_error(struct thread_data *, struct io_u *); -extern void io_u_init_timeout(void); -extern void io_u_set_timeout(struct thread_data *); extern void io_u_mark_depth(struct thread_data *, unsigned int); extern void io_u_fill_buffer(struct thread_data *td, struct io_u *, unsigned int); void io_u_mark_complete(struct thread_data *, unsigned int); @@ -947,6 +966,7 @@ extern int __must_check td_io_getevents(struct thread_data *, unsigned int, unsi extern int __must_check td_io_commit(struct thread_data *); extern int __must_check td_io_open_file(struct thread_data *, struct fio_file *); extern int td_io_close_file(struct thread_data *, struct fio_file *); +extern int __must_check td_io_get_file_size(struct thread_data *, struct fio_file *); /* * blktrace support @@ -972,11 +992,12 @@ struct ioengine_ops { void (*cleanup)(struct thread_data *); int (*open_file)(struct thread_data *, struct fio_file *); int (*close_file)(struct thread_data *, struct fio_file *); + int (*get_file_size)(struct thread_data *, struct fio_file *); void *data; void *dlhandle; }; -#define FIO_IOOPS_VERSION 9 +#define FIO_IOOPS_VERSION 10 extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *); extern void register_ioengine(struct ioengine_ops *); @@ -1039,4 +1060,13 @@ static inline void dprint_io_u(struct io_u *io_u, const char *p) #define dprint_io_u(io_u, p) #endif +static inline int fio_fill_issue_time(struct thread_data *td) +{ + if (td->o.read_iolog_file || + !td->o.disable_clat || !td->o.disable_slat || !td->o.disable_bw) + return 1; + + return 0; +} + #endif