X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=c92629df5f280509cc4d43eb34db46ac3d37e67b;hp=7a4b9c69fbe3b94dc62a8a828f2238ebc493c6ea;hb=1621031e8a7cbb91afad124da405fc4eabda764f;hpb=890abcad90e450484f89733d1bc1ad8a30016311;ds=inline diff --git a/fio.h b/fio.h index 7a4b9c69..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; @@ -448,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); @@ -597,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