X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=fio.h;h=028ef4cb9ec2e79b0296639a2ddc69b2bfdd24a1;hb=c0a5d35ec77fae5cfe382d35ab18915ed6766504;hp=5ca2ad366766e6f715c88c13ac7ad5b167e0d16e;hpb=ac684785b41aaf17593b375be8d3e89b83974c1a;p=fio.git diff --git a/fio.h b/fio.h index 5ca2ad36..028ef4cb 100644 --- a/fio.h +++ b/fio.h @@ -23,10 +23,6 @@ #include "os/os.h" #include "mutex.h" -#ifdef FIO_HAVE_SYSLET -#include "syslet.h" -#endif - #ifdef FIO_HAVE_GUASI #include #endif @@ -99,14 +95,6 @@ struct io_piece { }; }; -#ifdef FIO_HAVE_SYSLET -struct syslet_req { - struct syslet_uatom atom; /* the atom to submit */ - struct syslet_uatom *head; /* head of the sequence */ - long ret; /* syscall return value */ -}; -#endif - enum { IO_U_F_FREE = 1 << 0, IO_U_F_FLIGHT = 1 << 1, @@ -128,9 +116,6 @@ struct io_u { #ifdef FIO_HAVE_SGIO struct sg_io_hdr hdr; #endif -#ifdef FIO_HAVE_SYSLET - struct syslet_req req; -#endif #ifdef FIO_HAVE_GUASI guasi_req_t greq; #endif @@ -199,7 +184,6 @@ enum { VERIFY_SHA256, /* sha256 sum data blocks */ VERIFY_SHA512, /* sha512 sum data blocks */ VERIFY_META, /* block_num, timestamp etc. */ - VERIFY_PATTERN, /* verify a specific pattern */ VERIFY_NULL, /* pretend to verify */ }; @@ -279,16 +263,15 @@ enum fio_ioengine_flags { FIO_NODISKUTIL = 1 << 4, /* diskutil can't handle filename */ FIO_UNIDIR = 1 << 5, /* engine is uni-directional */ FIO_NOIO = 1 << 6, /* thread does only pseudo IO */ + FIO_SIGQUIT = 1 << 7, /* needs SIGQUIT to exit */ }; enum fio_file_flags { FIO_FILE_OPEN = 1 << 0, /* file is open */ FIO_FILE_CLOSING = 1 << 1, /* file being closed */ - FIO_FILE_EXISTS = 1 << 2, /* file there */ - FIO_FILE_EXTEND = 1 << 3, /* needs extend */ - FIO_FILE_NOSORT = 1 << 4, /* don't sort verify blocks */ - FIO_FILE_DONE = 1 << 5, /* io completed to this file */ - FIO_SIZE_KNOWN = 1 << 6, /* size has been set */ + FIO_FILE_EXTEND = 1 << 2, /* needs extend */ + FIO_FILE_DONE = 1 << 3, /* io completed to this file */ + FIO_SIZE_KNOWN = 1 << 4, /* size has been set */ }; /* @@ -388,6 +371,11 @@ struct thread_stat { unsigned long total_run_time; }; +struct bssplit { + unsigned int bs; + unsigned char perc; +}; + struct thread_options { int pad; char *description; @@ -403,6 +391,7 @@ struct thread_options { unsigned int iodepth_batch; unsigned long long size; + unsigned int fill_device; unsigned long long file_size_low; unsigned long long file_size_high; unsigned long long start_offset; @@ -410,6 +399,8 @@ struct thread_options { unsigned int bs[2]; unsigned int min_bs[2]; unsigned int max_bs[2]; + struct bssplit *bssplit; + unsigned int bssplit_nr; unsigned int nr_files; unsigned int open_files; @@ -675,6 +666,7 @@ extern unsigned long long mlock_size; extern unsigned long page_mask, page_size; extern int read_only; extern int eta_print; +extern char *job_section; extern struct thread_data *threads; @@ -689,7 +681,7 @@ static inline void fio_ro_check(struct thread_data *td, struct io_u *io_u) } #define BLOCKS_PER_MAP (8 * sizeof(long)) -#define TO_MAP_BLOCK(td, f, b) ((b) - ((f)->file_offset / (td)->o.rw_min_bs)) +#define TO_MAP_BLOCK(td, f, b) (b) #define RAND_MAP_IDX(td, f, b) (TO_MAP_BLOCK(td, f, b) / BLOCKS_PER_MAP) #define RAND_MAP_BIT(td, f, b) (TO_MAP_BLOCK(td, f, b) & (BLOCKS_PER_MAP - 1)) @@ -777,8 +769,8 @@ extern void add_agg_sample(unsigned long, enum fio_ddir); /* * Time functions */ -extern unsigned long utime_since(struct timeval *, struct timeval *); -extern unsigned long utime_since_now(struct timeval *); +extern unsigned long long utime_since(struct timeval *, struct timeval *); +extern unsigned long long utime_since_now(struct timeval *); extern unsigned long mtime_since(struct timeval *, struct timeval *); extern unsigned long mtime_since_now(struct timeval *); extern unsigned long time_since_now(struct timeval *); @@ -898,7 +890,7 @@ extern int __must_check td_io_init(struct thread_data *); extern int __must_check td_io_prep(struct thread_data *, struct io_u *); extern int __must_check td_io_queue(struct thread_data *, struct io_u *); extern int __must_check td_io_sync(struct thread_data *, struct fio_file *); -extern int __must_check td_io_getevents(struct thread_data *, int, int, struct timespec *); +extern int __must_check td_io_getevents(struct thread_data *, unsigned int, unsigned int, struct timespec *); extern int __must_check td_io_commit(struct thread_data *); extern int __must_check td_io_open_file(struct thread_data *, struct fio_file *); extern void td_io_close_file(struct thread_data *, struct fio_file *); @@ -935,7 +927,7 @@ struct ioengine_ops { int (*prep)(struct thread_data *, struct io_u *); int (*queue)(struct thread_data *, struct io_u *); int (*commit)(struct thread_data *); - int (*getevents)(struct thread_data *, int, int, struct timespec *); + int (*getevents)(struct thread_data *, unsigned int, unsigned int, struct timespec *); struct io_u *(*event)(struct thread_data *, int); int (*cancel)(struct thread_data *, struct io_u *); void (*cleanup)(struct thread_data *); @@ -945,7 +937,7 @@ struct ioengine_ops { void *dlhandle; }; -#define FIO_IOOPS_VERSION 7 +#define FIO_IOOPS_VERSION 8 extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *); extern void register_ioengine(struct ioengine_ops *); @@ -980,4 +972,51 @@ static inline void clear_error(struct thread_data *td) td->verror[0] = '\0'; } +enum { + FD_PROCESS = 0, + FD_FILE, + FD_IO, + FD_MEM, + FD_BLKTRACE, + FD_VERIFY, + FD_RANDOM, + FD_DEBUG_MAX, +}; + +#ifdef FIO_INC_DEBUG +struct debug_level { + const char *name; + unsigned long shift; +}; +extern struct debug_level debug_levels[]; + +extern unsigned long fio_debug; + +#define dprint(type, str, args...) \ + do { \ + assert(type < FD_DEBUG_MAX); \ + if ((((1 << type)) & fio_debug) == 0) \ + break; \ + log_info("%-8s ", debug_levels[(type)].name); \ + log_info(str, ##args); \ + } while (0) + +static inline void dprint_io_u(struct io_u *io_u, const char *p) +{ + struct fio_file *f = io_u->file; + + dprint(FD_IO, "%s: io_u %p: off=%llu/len=%lu/ddir=%d", p, io_u, + io_u->offset, io_u->buflen, io_u->ddir); + if (fio_debug & (1 << FD_IO)) { + if (f) + log_info("/%s", f->file_name); + + log_info("\n"); + } +} +#else +#define dprint(type, str, args...) +#define dprint_io_u(io_u, p) +#endif + #endif