X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=iolog.h;h=981081f9a1b087cfbc6b82d25e2ffbdba5ec7b9e;hb=HEAD;hp=a39863095ad3f8264e055b40c448031c9507cc9c;hpb=738694ae75722aee2aa3952257af62aee7957770;p=fio.git diff --git a/iolog.h b/iolog.h index a3986309..26dd5cca 100644 --- a/iolog.h +++ b/iolog.h @@ -26,13 +26,23 @@ struct io_hist { struct flist_head list; }; +enum { + IO_LOG_SAMPLE_AVG = 0, + IO_LOG_SAMPLE_MAX, + IO_LOG_SAMPLE_BOTH, +}; + +struct io_sample_value { + uint64_t val0; + uint64_t val1; +}; union io_sample_data { - uint64_t val; + struct io_sample_value val; struct io_u_plat_entry *plat_entry; }; -#define sample_val(value) ((union io_sample_data) { .val = value }) +#define sample_val(value) ((union io_sample_data) { .val.val0 = value }) #define sample_plat(plat) ((union io_sample_data) { .plat_entry = plat }) /* @@ -154,8 +164,13 @@ struct io_log { * If the bit following the upper bit is set, then we have the priority */ #define LOG_PRIO_SAMPLE_BIT 0x40000000U +/* + * If the bit following prioity sample vit is set, we report both avg and max + */ +#define LOG_AVG_MAX_SAMPLE_BIT 0x20000000U -#define LOG_SAMPLE_BITS (LOG_OFFSET_SAMPLE_BIT | LOG_PRIO_SAMPLE_BIT) +#define LOG_SAMPLE_BITS (LOG_OFFSET_SAMPLE_BIT | LOG_PRIO_SAMPLE_BIT |\ + LOG_AVG_MAX_SAMPLE_BIT) #define io_sample_ddir(io) ((io)->__ddir & ~LOG_SAMPLE_BITS) static inline void io_sample_set_ddir(struct io_log *log, @@ -227,10 +242,8 @@ struct io_piece { unsigned long len; unsigned int flags; enum fio_ddir ddir; - union { - unsigned long delay; - unsigned int file_action; - }; + unsigned long delay; + unsigned int file_action; }; /* @@ -259,6 +272,8 @@ extern int iolog_compress_init(struct thread_data *, struct sk_out *); extern void iolog_compress_exit(struct thread_data *); extern size_t log_chunk_sizes(struct io_log *); extern int init_io_u_buffers(struct thread_data *); +extern unsigned long long delay_since_ttime(const struct thread_data *, + unsigned long long); #ifdef CONFIG_ZLIB extern int iolog_file_inflate(const char *);