X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=stat.h;h=e87dae08fe1ee2f4ea3e0a215356ee5ef5c05fc7;hp=9595e59ecef31c8c5207b0c418489ba242076feb;hb=1d6d3455a9ad610a423f5d4ca849fbe82049997c;hpb=a5bbbd8a324a33fb54b6073850bc8ee653c71030 diff --git a/stat.h b/stat.h index 9595e59e..e87dae08 100644 --- a/stat.h +++ b/stat.h @@ -112,6 +112,28 @@ struct group_run_stats { #define FIO_IO_U_LIST_MAX_LEN 20 /* The size of the default and user-specified list of percentiles */ +/* + * Trim cycle count measurements + */ +#define MAX_NR_BLOCK_INFOS 8192 +#define BLOCK_INFO_STATE_SHIFT 29 +#define BLOCK_INFO_TRIMS(block_info) \ + ((block_info) & ((1 << BLOCK_INFO_STATE_SHIFT) - 1)) +#define BLOCK_INFO_STATE(block_info) \ + ((block_info) >> BLOCK_INFO_STATE_SHIFT) +#define BLOCK_INFO(state, trim_cycles) \ + ((trim_cycles) | ((state) << BLOCK_INFO_STATE_SHIFT)) +#define BLOCK_INFO_SET_STATE(block_info, state) \ + BLOCK_INFO(state, BLOCK_INFO_TRIMS(block_info)) +enum block_info_state { + BLOCK_STATE_UNINIT, + BLOCK_STATE_TRIMMED, + BLOCK_STATE_WRITTEN, + BLOCK_STATE_TRIM_FAILURE, + BLOCK_STATE_WRITE_FAILURE, + BLOCK_STATE_COUNT, +}; + #define MAX_PATTERN_SIZE 512 #define FIO_JOBNAME_SIZE 128 #define FIO_JOBDESC_SIZE 256 @@ -158,6 +180,8 @@ struct thread_stat { uint32_t io_u_lat_u[FIO_IO_U_LAT_U_NR]; uint32_t io_u_lat_m[FIO_IO_U_LAT_M_NR]; uint32_t io_u_plat[DDIR_RWDIR_CNT][FIO_IO_U_PLAT_NR]; + uint32_t pad; + uint64_t total_io_u[3]; uint64_t short_io_u[3]; uint64_t drop_io_u[3]; @@ -171,17 +195,21 @@ struct thread_stat { /* * IO Error related stats */ - uint16_t continue_on_error; - uint16_t filler[3]; + union { + uint16_t continue_on_error; + uint64_t pad2; + }; uint64_t total_err_count; uint32_t first_error; + uint64_t nr_block_infos; + uint32_t block_infos[MAX_NR_BLOCK_INFOS]; + uint32_t kb_base; uint32_t unit_base; uint32_t latency_depth; uint64_t latency_target; - uint16_t pad; fio_fp64_t latency_percentile; uint64_t latency_window; } __attribute__((packed)); @@ -211,6 +239,8 @@ struct jobs_eta { uint8_t run_str[]; } __attribute__((packed)); +extern struct fio_mutex *stat_mutex; + extern struct jobs_eta *get_jobs_eta(int force, size_t *size); extern void stat_init(void); @@ -256,4 +286,6 @@ static inline int usec_to_msec(unsigned long *min, unsigned long *max, #define __THREAD_RUNSTR_SZ(nr) ((nr) * 5) #define THREAD_RUNSTR_SZ __THREAD_RUNSTR_SZ(thread_number) +uint32_t *io_u_block_info(struct thread_data *td, struct io_u *io_u); + #endif