X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=fio.h;h=67f0badf8cb690d0b2940038157d19745b7075f0;hp=7a0f56d3af6f5c7036a719db03b5bc61981c5bc4;hb=dbe1a0180a6cc94a780b4963f2de4ba8503b76aa;hpb=12cbb469ea5e559b241f6c31693554829e8b8400 diff --git a/fio.h b/fio.h index 7a0f56d3..67f0badf 100644 --- a/fio.h +++ b/fio.h @@ -184,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 */ }; @@ -373,6 +372,11 @@ struct thread_stat { unsigned long total_run_time; }; +struct bssplit { + unsigned int bs; + unsigned char perc; +}; + struct thread_options { int pad; char *description; @@ -388,6 +392,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; @@ -395,6 +400,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; @@ -674,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) - ((f)->file_offset / (unsigned long long) (td)->o.rw_min_bs)) #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)) @@ -883,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 *); @@ -920,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 *); @@ -930,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 *); @@ -965,4 +972,50 @@ 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_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