X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=c92629df5f280509cc4d43eb34db46ac3d37e67b;hp=771df35412ea787382b5963086fc9d6466ddf56d;hb=refs%2Ftags%2Ffio-1.27.3;hpb=adb02ba8e05ccbb1c1985791d0ee52828bcbf6aa diff --git a/fio.h b/fio.h index 771df354..c92629df 100644 --- a/fio.h +++ b/fio.h @@ -228,11 +228,11 @@ struct thread_options { char *exec_prerun; char *exec_postrun; - unsigned int rate; - unsigned int ratemin; + unsigned int rate[2]; + unsigned int ratemin[2]; unsigned int ratecycle; - unsigned int rate_iops; - unsigned int rate_iops_min; + unsigned int rate_iops[2]; + unsigned int rate_iops_min[2]; char *ioscheduler; @@ -309,11 +309,11 @@ struct thread_data { /* * Rate state */ - unsigned long rate_usec_cycle; - long rate_pending_usleep; - unsigned long rate_bytes; - unsigned long rate_blocks; - struct timeval lastrate; + unsigned long rate_usec_cycle[2]; + long rate_pending_usleep[2]; + unsigned long rate_bytes[2]; + unsigned long rate_blocks[2]; + struct timeval lastrate[2]; unsigned long long total_io_size; @@ -413,12 +413,6 @@ extern int fio_gtod_cpu; extern struct thread_data *threads; -#define td_read(td) ((td)->o.td_ddir & TD_DDIR_READ) -#define td_write(td) ((td)->o.td_ddir & TD_DDIR_WRITE) -#define td_rw(td) (((td)->o.td_ddir & TD_DDIR_RW) == TD_DDIR_RW) -#define td_random(td) ((td)->o.td_ddir & TD_DDIR_RAND) -#define file_randommap(td, f) (!(td)->o.norandommap && (f)->file_map) - static inline void fio_ro_check(struct thread_data *td, struct io_u *io_u) { assert(!(io_u->ddir == DDIR_WRITE && !td_write(td))); @@ -454,7 +448,7 @@ extern unsigned long time_since_now(struct timeval *); extern unsigned long mtime_since_genesis(void); 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 long rate_throttle(struct thread_data *, unsigned long, unsigned long, enum fio_ddir); extern void fill_start_time(struct timeval *); extern void fio_gettime(struct timeval *, void *); extern void fio_gtod_init(void); @@ -603,4 +597,32 @@ static inline char *num2str(unsigned long num, int maxlen, int base, int pow2) return buf; } +static inline int __should_check_rate(struct thread_data *td, + enum fio_ddir ddir) +{ + struct thread_options *o = &td->o; + + /* + * If some rate setting was given, we need to check it + */ + if (o->rate[ddir] || o->ratemin[ddir] || o->rate_iops[ddir] || + o->rate_iops_min[ddir]) + return 1; + + return 0; +} + +static inline int should_check_rate(struct thread_data *td, + unsigned long *bytes_done) +{ + int ret = 0; + + if (bytes_done[0]) + ret |= __should_check_rate(td, 0); + if (bytes_done[1]) + ret |= __should_check_rate(td, 1); + + return ret; +} + #endif