summaryrefslogtreecommitdiff
path: root/stat.h
diff options
context:
space:
mode:
authorDan Ehrenberg <dehrenberg@chromium.org>2015-04-14 15:58:16 -0700
committerJens Axboe <axboe@fb.com>2015-04-14 18:16:20 -0600
commit66347cfa2f73fd76257e058a3649de437c6eccbe (patch)
tree6e162d8b305c1aa9ef8bd30fdaf5f6327461dfbe /stat.h
parent0e4dd95c548cca2e7bef7db3696231130cb4b594 (diff)
downloadfio-66347cfa2f73fd76257e058a3649de437c6eccbe.tar.gz
fio-66347cfa2f73fd76257e058a3649de437c6eccbe.tar.bz2
Collect a block-wise histogram of trim and write errors
This patch collects information on how many trims or writes each trim block sized unit can undergo before its first error. It also records the way in which an error occurred, if one did. Output is provided with a histogram which can be output either in normal or json output. Terse output is omitted, since it seemed like that would require a version rev bump. Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'stat.h')
-rw-r--r--stat.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/stat.h b/stat.h
index 8b4416cf..dd340128 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,
+} state;
+
#define MAX_PATTERN_SIZE 512
#define FIO_JOBNAME_SIZE 128
#define FIO_JOBDESC_SIZE 256
@@ -180,6 +202,9 @@ struct thread_stat {
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;
@@ -261,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