X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=ed1257cc35bfb46d94bb8b4458da2f4e1f339ed9;hp=22aaf345ae8daa093df160a7f10523702d0c5e1c;hb=12d9d841526ad75a67bb43a90edeefd05f85f11e;hpb=3845591fadea480177223e28c9d1c03642d34f0e diff --git a/fio.h b/fio.h index 22aaf345..ed1257cc 100644 --- a/fio.h +++ b/fio.h @@ -473,6 +473,7 @@ struct thread_options { unsigned int fsync_blocks; unsigned int start_delay; unsigned long long timeout; + unsigned long long ramp_time; unsigned int overwrite; unsigned int bw_avg_time; unsigned int loops; @@ -495,6 +496,9 @@ 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; char *read_iolog_file; char *write_iolog_file; @@ -609,6 +613,7 @@ struct thread_data { struct timeval rw_end[2]; struct timeval last_issue; unsigned int rw_end_set[2]; + unsigned int ramp_time_over; /* * read/write mixed workload state @@ -630,12 +635,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 */ @@ -666,13 +665,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) \ @@ -751,6 +743,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; @@ -760,6 +756,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; }; @@ -817,6 +822,8 @@ 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 set_genesis_time(void); +extern int ramp_time_over(struct thread_data *); +extern int in_ramp_time(struct thread_data *); /* * Init/option functions @@ -883,6 +890,7 @@ enum { TD_NOT_CREATED = 0, TD_CREATED, TD_INITIALIZED, + TD_RAMP, TD_RUNNING, TD_VERIFYING, TD_FSYNCING, @@ -890,6 +898,8 @@ enum { TD_REAPED, }; +extern void td_set_runstate(struct thread_data *, int); + /* * Verify helpers */ @@ -917,13 +927,16 @@ 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); void io_u_mark_submit(struct thread_data *, unsigned int); +/* + * Reset stats after ramp time completes + */ +extern void reset_all_stats(struct thread_data *); + /* * io engine entry points */ @@ -1027,4 +1040,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