X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=136b43089285e1887a417c60d8f63a3d635e1176;hp=9159b0c2de3e207cd15bf73d683a9accdde72934;hb=f7bd62ddc75a6f69ff3b5058461ddad7f045aa20;hpb=6bb58215842760895071d9f331da4dc2dfc16f30 diff --git a/fio.h b/fio.h index 9159b0c2..136b4308 100644 --- a/fio.h +++ b/fio.h @@ -30,7 +30,7 @@ #include "helpers.h" #include "options.h" #include "profile.h" -#include "time.h" +#include "fio_time.h" #include "gettime.h" #include "lib/getopt.h" #include "lib/rand.h" @@ -71,6 +71,9 @@ enum { TD_F_SCRAMBLE_BUFFERS = 16, TD_F_VER_NONE = 32, TD_F_PROFILE_OPS = 64, + TD_F_COMPRESS = 128, + TD_F_NOIO = 256, + TD_F_COMPRESS_LOG = 512, }; enum { @@ -86,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, }; @@ -99,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; @@ -110,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; @@ -171,6 +178,8 @@ struct thread_data { }; struct frand_state buf_state; + struct frand_state buf_state_prev; + struct frand_state dedupe_state; unsigned int verify_batch; unsigned int trim_batch; @@ -249,6 +258,7 @@ struct thread_data { 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; @@ -349,7 +359,7 @@ enum { #define __td_verror(td, err, msg, func) \ do { \ - int ____e = (err); \ + unsigned int ____e = (err); \ if ((td)->error) \ break; \ (td)->error = ____e; \ @@ -438,6 +448,8 @@ extern void add_job_opts(const char **, int); extern char *num2str(unsigned long, int, int, int, int); extern int ioengine_load(struct thread_data *); extern int parse_dryrun(void); +extern int fio_running_or_pending_io_threads(void); +extern int fio_set_fd_nonblocking(int, const char *); extern uintptr_t page_mask; extern uintptr_t page_size; @@ -470,13 +482,24 @@ enum { TD_PRE_READING, TD_VERIFYING, TD_FSYNCING, + TD_FINISHING, TD_EXITED, TD_REAPED, }; 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 @@ -580,7 +603,7 @@ static inline unsigned int td_min_bs(struct thread_data *td) return min(td->o.min_bs[DDIR_TRIM], min_bs); } -static inline int is_power_of_2(unsigned int val) +static inline int is_power_of_2(unsigned long val) { return (val != 0 && ((val & (val - 1)) == 0)); } @@ -610,7 +633,9 @@ static inline void td_io_u_free_notify(struct thread_data *td) extern const char *fio_get_arch_string(int); extern const char *fio_get_os_string(int); +#ifdef FIO_INTERNAL #define ARRAY_SIZE(x) (sizeof((x)) / (sizeof((x)[0]))) +#endif enum { FIO_OUTPUT_TERSE = 0, @@ -629,4 +654,9 @@ enum { FIO_RAND_GEN_LFSR, }; +enum { + FIO_CPUS_SHARED = 0, + FIO_CPUS_SPLIT, +}; + #endif