X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=8c46b3f905b2d9eb5b320ca96d05e2b8117b8e8d;hp=c1c71465b8789ada64ebf51a8c611358ca1e6fac;hb=0aabe160c38efc3c42157fac2a9af08e070341c6;hpb=433afcb4fe81e775c15af9d39a6f4db8a53d693a;ds=sidebyside diff --git a/fio.h b/fio.h index c1c71465..8c46b3f9 100644 --- a/fio.h +++ b/fio.h @@ -280,7 +280,10 @@ struct thread_data { struct fio_file *files; unsigned int nr_files; unsigned int nr_uniq_files; - unsigned int next_file; + union { + unsigned int next_file; + os_random_state_t next_file_state; + }; int error; pid_t pid; char *orig_buffer; @@ -340,6 +343,7 @@ struct thread_data { unsigned int rwmixread; unsigned int rwmixwrite; unsigned int nice; + unsigned int file_service_type; char *read_iolog_file; char *write_iolog_file; @@ -436,6 +440,14 @@ struct thread_data { struct itimerval timer; }; +/* + * roundrobin available files, or choose one at random. + */ +enum { + FIO_FSERVICE_RANDOM = 1, + FIO_FSERVICE_RR = 2, +}; + /* * 30 second per-io_u timeout, with 5 second intervals to avoid resetting * the timer on each queue operation. @@ -443,18 +455,20 @@ struct thread_data { #define IO_U_TIMEOUT_INC 5 #define IO_U_TIMEOUT 30 -#define __td_verror(td, err, msg) \ +#define __td_verror(td, err, msg, func) \ do { \ if ((td)->error) \ break; \ int e = (err); \ (td)->error = e; \ - snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, error=%s", __FILE__, __LINE__, (msg)); \ + snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, func=%s, error=%s", __FILE__, __LINE__, (func), (msg)); \ } while (0) -#define td_verror(td, err) __td_verror((td), (err), strerror((err))) -#define td_vmsg(td, err, msg) __td_verror((td), (err), (msg)) +#define td_verror(td, err, func) \ + __td_verror((td), (err), strerror((err)), (func)) +#define td_vmsg(td, err, msg, func) \ + __td_verror((td), (err), (msg), (func)) extern int exitall_on_terminate; extern int thread_number; @@ -577,6 +591,7 @@ extern void usec_sleep(struct thread_data *, unsigned long); extern void rate_throttle(struct thread_data *, unsigned long, unsigned int, int); extern void fill_start_time(struct timeval *); extern void fio_gettime(struct timeval *, void *); +extern void set_genesis_time(void); /* * Init functions