X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=28f459750bf53949541609015d62b3cead4ea97d;hp=4d4af0a7917f12b5b666ca38ea06a038659dc3b3;hb=d6b72507e72d3f2ed334fa5665880b0ab59dbfdd;hpb=e2c81040bf2be672f120c87b2045af16ff21c93a diff --git a/fio.h b/fio.h index 4d4af0a7..28f45975 100644 --- a/fio.h +++ b/fio.h @@ -73,6 +73,7 @@ enum { TD_F_PROFILE_OPS = 64, TD_F_COMPRESS = 128, TD_F_NOIO = 256, + TD_F_COMPRESS_LOG = 512, }; enum { @@ -88,6 +89,7 @@ enum { FIO_RAND_SEQ_RAND_WRITE_OFF, FIO_RAND_SEQ_RAND_TRIM_OFF, FIO_RAND_START_DELAY, + FIO_DEDUPE_OFF, FIO_RAND_NR_OFFS, }; @@ -101,6 +103,7 @@ struct thread_data { char verror[FIO_VERROR_SIZE]; pthread_t thread; unsigned int thread_number; + unsigned int subjob_number; unsigned int groupid; struct thread_stat ts; @@ -112,6 +115,8 @@ struct thread_data { struct io_log *bw_log; struct io_log *iops_log; + struct tp_data *tp_data; + uint64_t stat_io_bytes[DDIR_RWDIR_CNT]; struct timeval bw_sample_time; @@ -132,8 +137,7 @@ struct thread_data { unsigned int nr_normal_files; union { unsigned int next_file; - os_random_state_t next_file_state; - struct frand_state __next_file_state; + struct frand_state next_file_state; }; int error; int sig; @@ -155,24 +159,14 @@ struct thread_data { unsigned long rand_seeds[FIO_RAND_NR_OFFS]; - union { - os_random_state_t bsrange_state; - struct frand_state __bsrange_state; - }; - union { - os_random_state_t verify_state; - struct frand_state __verify_state; - }; - union { - os_random_state_t trim_state; - struct frand_state __trim_state; - }; - union { - os_random_state_t delay_state; - struct frand_state __delay_state; - }; + struct frand_state bsrange_state; + struct frand_state verify_state; + struct frand_state trim_state; + struct frand_state delay_state; struct frand_state buf_state; + struct frand_state buf_state_prev; + struct frand_state dedupe_state; unsigned int verify_batch; unsigned int trim_batch; @@ -242,15 +236,13 @@ struct thread_data { /* * State for random io, a bitmap of blocks done vs not done */ - union { - os_random_state_t random_state; - struct frand_state __random_state; - }; + struct frand_state random_state; struct timeval start; /* start of this loop */ struct timeval epoch; /* time job was started */ struct timeval last_issue; struct timeval tv_cache; + struct timeval terminate_time; unsigned int tv_cache_nr; unsigned int tv_cache_mask; unsigned int ramp_time_over; @@ -269,10 +261,7 @@ struct thread_data { /* * read/write mixed workload state */ - union { - os_random_state_t rwmix_state; - struct frand_state __rwmix_state; - }; + struct frand_state rwmix_state; unsigned long rwmix_issues; enum fio_ddir rwmix_ddir; unsigned int ddir_seq_nr; @@ -280,10 +269,7 @@ struct thread_data { /* * rand/seq mixed workload state */ - union { - os_random_state_t seq_rand_state[DDIR_RWDIR_CNT]; - struct frand_state __seq_rand_state[DDIR_RWDIR_CNT]; - }; + struct frand_state seq_rand_state[DDIR_RWDIR_CNT]; /* * IO history logs for verification. We use a tree for sorting, @@ -318,10 +304,7 @@ struct thread_data { /* * For generating file sizes */ - union { - os_random_state_t file_size_state; - struct frand_state __file_size_state; - }; + struct frand_state file_size_state; /* * Error counts @@ -395,10 +378,12 @@ extern int nr_clients; extern int log_syslog; extern int status_interval; extern const char fio_version_string[]; +extern int helper_do_stat; +extern pthread_cond_t helper_cond; extern struct thread_data *threads; -static inline void fio_ro_check(struct thread_data *td, struct io_u *io_u) +static inline void fio_ro_check(const struct thread_data *td, struct io_u *io_u) { assert(!(io_u->ddir == DDIR_WRITE && !td_write(td))); } @@ -483,8 +468,15 @@ extern void td_set_runstate(struct thread_data *, int); extern int td_bump_runstate(struct thread_data *, int); extern void td_restore_runstate(struct thread_data *, int); +/* + * Allow 60 seconds for a job to quit on its own, otherwise reap with + * a vengeance. + */ +#define FIO_REAP_TIMEOUT 60 + #define TERMINATE_ALL (-1) extern void fio_terminate_threads(int); +extern void fio_mark_td_terminate(struct thread_data *); /* * Memory helpers