Extend zpool-iostat to account for ZIO_PRIORITY_REBUILD (#12319)
Previously, zpool-iostat did not display any data regarding rebuild I/Os in either the latency/size histograms (-w/-l/-r) or the queue data (-q). This fix essentially utilizes the existing infrastructure for tracking rebuild queue data and displays this data in the proper places within zpool-iostat's output. Signed-off-by: Trevor Bautista <tbautista@newmexicoconsortium.org> Signed-off-by: Trevor Bautista <tbautista@lanl.gov> Co-authored-by: Trevor Bautista <tbautista@newmexicoconsortium.org> Reviewed-by: Richard Elling <Richard.Elling@RichardElling.com> Reviewed-by: Tony Hutter <hutter2@llnl.gov>
This commit is contained in:
parent
b0f3f393d1
commit
00888c0898
|
@ -211,7 +211,7 @@ enum iostat_type {
|
||||||
* of all the nvlists a flag requires. Also specifies the order in
|
* of all the nvlists a flag requires. Also specifies the order in
|
||||||
* which data gets printed in zpool iostat.
|
* which data gets printed in zpool iostat.
|
||||||
*/
|
*/
|
||||||
static const char *vsx_type_to_nvlist[IOS_COUNT][13] = {
|
static const char *vsx_type_to_nvlist[IOS_COUNT][15] = {
|
||||||
[IOS_L_HISTO] = {
|
[IOS_L_HISTO] = {
|
||||||
ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_TOT_W_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_TOT_W_LAT_HISTO,
|
||||||
|
@ -223,6 +223,7 @@ static const char *vsx_type_to_nvlist[IOS_COUNT][13] = {
|
||||||
ZPOOL_CONFIG_VDEV_ASYNC_W_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_ASYNC_W_LAT_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_SCRUB_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_SCRUB_LAT_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO,
|
||||||
|
ZPOOL_CONFIG_VDEV_REBUILD_LAT_HISTO,
|
||||||
NULL},
|
NULL},
|
||||||
[IOS_LATENCY] = {
|
[IOS_LATENCY] = {
|
||||||
ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO,
|
||||||
|
@ -230,6 +231,7 @@ static const char *vsx_type_to_nvlist[IOS_COUNT][13] = {
|
||||||
ZPOOL_CONFIG_VDEV_DISK_R_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_DISK_R_LAT_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_DISK_W_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_DISK_W_LAT_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO,
|
||||||
|
ZPOOL_CONFIG_VDEV_REBUILD_LAT_HISTO,
|
||||||
NULL},
|
NULL},
|
||||||
[IOS_QUEUES] = {
|
[IOS_QUEUES] = {
|
||||||
ZPOOL_CONFIG_VDEV_SYNC_R_ACTIVE_QUEUE,
|
ZPOOL_CONFIG_VDEV_SYNC_R_ACTIVE_QUEUE,
|
||||||
|
@ -238,6 +240,7 @@ static const char *vsx_type_to_nvlist[IOS_COUNT][13] = {
|
||||||
ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE,
|
ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE,
|
||||||
ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE,
|
ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE,
|
||||||
ZPOOL_CONFIG_VDEV_TRIM_ACTIVE_QUEUE,
|
ZPOOL_CONFIG_VDEV_TRIM_ACTIVE_QUEUE,
|
||||||
|
ZPOOL_CONFIG_VDEV_REBUILD_ACTIVE_QUEUE,
|
||||||
NULL},
|
NULL},
|
||||||
[IOS_RQ_HISTO] = {
|
[IOS_RQ_HISTO] = {
|
||||||
ZPOOL_CONFIG_VDEV_SYNC_IND_R_HISTO,
|
ZPOOL_CONFIG_VDEV_SYNC_IND_R_HISTO,
|
||||||
|
@ -252,6 +255,8 @@ static const char *vsx_type_to_nvlist[IOS_COUNT][13] = {
|
||||||
ZPOOL_CONFIG_VDEV_AGG_SCRUB_HISTO,
|
ZPOOL_CONFIG_VDEV_AGG_SCRUB_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_IND_TRIM_HISTO,
|
ZPOOL_CONFIG_VDEV_IND_TRIM_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_AGG_TRIM_HISTO,
|
ZPOOL_CONFIG_VDEV_AGG_TRIM_HISTO,
|
||||||
|
ZPOOL_CONFIG_VDEV_IND_REBUILD_HISTO,
|
||||||
|
ZPOOL_CONFIG_VDEV_AGG_REBUILD_HISTO,
|
||||||
NULL},
|
NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3844,22 +3849,23 @@ typedef struct name_and_columns {
|
||||||
unsigned int columns; /* Center name to this number of columns */
|
unsigned int columns; /* Center name to this number of columns */
|
||||||
} name_and_columns_t;
|
} name_and_columns_t;
|
||||||
|
|
||||||
#define IOSTAT_MAX_LABELS 13 /* Max number of labels on one line */
|
#define IOSTAT_MAX_LABELS 15 /* Max number of labels on one line */
|
||||||
|
|
||||||
static const name_and_columns_t iostat_top_labels[][IOSTAT_MAX_LABELS] =
|
static const name_and_columns_t iostat_top_labels[][IOSTAT_MAX_LABELS] =
|
||||||
{
|
{
|
||||||
[IOS_DEFAULT] = {{"capacity", 2}, {"operations", 2}, {"bandwidth", 2},
|
[IOS_DEFAULT] = {{"capacity", 2}, {"operations", 2}, {"bandwidth", 2},
|
||||||
{NULL}},
|
{NULL}},
|
||||||
[IOS_LATENCY] = {{"total_wait", 2}, {"disk_wait", 2}, {"syncq_wait", 2},
|
[IOS_LATENCY] = {{"total_wait", 2}, {"disk_wait", 2}, {"syncq_wait", 2},
|
||||||
{"asyncq_wait", 2}, {"scrub", 1}, {"trim", 1}, {NULL}},
|
{"asyncq_wait", 2}, {"scrub", 1}, {"trim", 1}, {"rebuild", 1},
|
||||||
|
{NULL}},
|
||||||
[IOS_QUEUES] = {{"syncq_read", 2}, {"syncq_write", 2},
|
[IOS_QUEUES] = {{"syncq_read", 2}, {"syncq_write", 2},
|
||||||
{"asyncq_read", 2}, {"asyncq_write", 2}, {"scrubq_read", 2},
|
{"asyncq_read", 2}, {"asyncq_write", 2}, {"scrubq_read", 2},
|
||||||
{"trimq_write", 2}, {NULL}},
|
{"trimq_write", 2}, {"rebuildq_write", 2}, {NULL}},
|
||||||
[IOS_L_HISTO] = {{"total_wait", 2}, {"disk_wait", 2}, {"syncq_wait", 2},
|
[IOS_L_HISTO] = {{"total_wait", 2}, {"disk_wait", 2}, {"syncq_wait", 2},
|
||||||
{"asyncq_wait", 2}, {NULL}},
|
{"asyncq_wait", 2}, {NULL}},
|
||||||
[IOS_RQ_HISTO] = {{"sync_read", 2}, {"sync_write", 2},
|
[IOS_RQ_HISTO] = {{"sync_read", 2}, {"sync_write", 2},
|
||||||
{"async_read", 2}, {"async_write", 2}, {"scrub", 2},
|
{"async_read", 2}, {"async_write", 2}, {"scrub", 2},
|
||||||
{"trim", 2}, {NULL}},
|
{"trim", 2}, {"rebuild", 2}, {NULL}},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Shorthand - if "columns" field not set, default to 1 column */
|
/* Shorthand - if "columns" field not set, default to 1 column */
|
||||||
|
@ -3868,14 +3874,17 @@ static const name_and_columns_t iostat_bottom_labels[][IOSTAT_MAX_LABELS] =
|
||||||
[IOS_DEFAULT] = {{"alloc"}, {"free"}, {"read"}, {"write"}, {"read"},
|
[IOS_DEFAULT] = {{"alloc"}, {"free"}, {"read"}, {"write"}, {"read"},
|
||||||
{"write"}, {NULL}},
|
{"write"}, {NULL}},
|
||||||
[IOS_LATENCY] = {{"read"}, {"write"}, {"read"}, {"write"}, {"read"},
|
[IOS_LATENCY] = {{"read"}, {"write"}, {"read"}, {"write"}, {"read"},
|
||||||
{"write"}, {"read"}, {"write"}, {"wait"}, {"wait"}, {NULL}},
|
{"write"}, {"read"}, {"write"}, {"wait"}, {"wait"}, {"wait"},
|
||||||
|
{NULL}},
|
||||||
[IOS_QUEUES] = {{"pend"}, {"activ"}, {"pend"}, {"activ"}, {"pend"},
|
[IOS_QUEUES] = {{"pend"}, {"activ"}, {"pend"}, {"activ"}, {"pend"},
|
||||||
{"activ"}, {"pend"}, {"activ"}, {"pend"}, {"activ"},
|
{"activ"}, {"pend"}, {"activ"}, {"pend"}, {"activ"},
|
||||||
{"pend"}, {"activ"}, {NULL}},
|
{"pend"}, {"activ"}, {"pend"}, {"activ"}, {NULL}},
|
||||||
[IOS_L_HISTO] = {{"read"}, {"write"}, {"read"}, {"write"}, {"read"},
|
[IOS_L_HISTO] = {{"read"}, {"write"}, {"read"}, {"write"}, {"read"},
|
||||||
{"write"}, {"read"}, {"write"}, {"scrub"}, {"trim"}, {NULL}},
|
{"write"}, {"read"}, {"write"}, {"scrub"}, {"trim"}, {"rebuild"},
|
||||||
|
{NULL}},
|
||||||
[IOS_RQ_HISTO] = {{"ind"}, {"agg"}, {"ind"}, {"agg"}, {"ind"}, {"agg"},
|
[IOS_RQ_HISTO] = {{"ind"}, {"agg"}, {"ind"}, {"agg"}, {"ind"}, {"agg"},
|
||||||
{"ind"}, {"agg"}, {"ind"}, {"agg"}, {"ind"}, {"agg"}, {NULL}},
|
{"ind"}, {"agg"}, {"ind"}, {"agg"}, {"ind"}, {"agg"},
|
||||||
|
{"ind"}, {"agg"}, {NULL}},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *histo_to_title[] = {
|
static const char *histo_to_title[] = {
|
||||||
|
@ -4507,6 +4516,8 @@ print_iostat_queues(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE,
|
ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE,
|
||||||
ZPOOL_CONFIG_VDEV_TRIM_PEND_QUEUE,
|
ZPOOL_CONFIG_VDEV_TRIM_PEND_QUEUE,
|
||||||
ZPOOL_CONFIG_VDEV_TRIM_ACTIVE_QUEUE,
|
ZPOOL_CONFIG_VDEV_TRIM_ACTIVE_QUEUE,
|
||||||
|
ZPOOL_CONFIG_VDEV_REBUILD_PEND_QUEUE,
|
||||||
|
ZPOOL_CONFIG_VDEV_REBUILD_ACTIVE_QUEUE,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct stat_array *nva;
|
struct stat_array *nva;
|
||||||
|
@ -4546,6 +4557,7 @@ print_iostat_latency(iostat_cbdata_t *cb, nvlist_t *oldnv,
|
||||||
ZPOOL_CONFIG_VDEV_ASYNC_W_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_ASYNC_W_LAT_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_SCRUB_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_SCRUB_LAT_HISTO,
|
||||||
ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO,
|
ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO,
|
||||||
|
ZPOOL_CONFIG_VDEV_REBUILD_LAT_HISTO,
|
||||||
};
|
};
|
||||||
struct stat_array *nva;
|
struct stat_array *nva;
|
||||||
|
|
||||||
|
|
|
@ -411,6 +411,7 @@ print_vdev_latency_stats(nvlist_t *nvroot, const char *pool_name,
|
||||||
#ifdef ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO
|
#ifdef ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO
|
||||||
{ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO, "trim", 0},
|
{ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO, "trim", 0},
|
||||||
#endif
|
#endif
|
||||||
|
{ZPOOL_CONFIG_VDEV_REBUILD_LAT_HISTO, "rebuild", 0},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -506,6 +507,8 @@ print_vdev_size_stats(nvlist_t *nvroot, const char *pool_name,
|
||||||
{ZPOOL_CONFIG_VDEV_IND_TRIM_HISTO, "trim_write_ind"},
|
{ZPOOL_CONFIG_VDEV_IND_TRIM_HISTO, "trim_write_ind"},
|
||||||
{ZPOOL_CONFIG_VDEV_AGG_TRIM_HISTO, "trim_write_agg"},
|
{ZPOOL_CONFIG_VDEV_AGG_TRIM_HISTO, "trim_write_agg"},
|
||||||
#endif
|
#endif
|
||||||
|
{ZPOOL_CONFIG_VDEV_IND_REBUILD_HISTO, "rebuild_write_ind"},
|
||||||
|
{ZPOOL_CONFIG_VDEV_AGG_REBUILD_HISTO, "rebuild_write_agg"},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -585,11 +588,13 @@ print_queue_stats(nvlist_t *nvroot, const char *pool_name,
|
||||||
{ZPOOL_CONFIG_VDEV_ASYNC_R_ACTIVE_QUEUE, "async_r_active"},
|
{ZPOOL_CONFIG_VDEV_ASYNC_R_ACTIVE_QUEUE, "async_r_active"},
|
||||||
{ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE, "async_w_active"},
|
{ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE, "async_w_active"},
|
||||||
{ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE, "async_scrub_active"},
|
{ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE, "async_scrub_active"},
|
||||||
|
{ZPOOL_CONFIG_VDEV_REBUILD_ACTIVE_QUEUE, "rebuild_active"},
|
||||||
{ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE, "sync_r_pend"},
|
{ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE, "sync_r_pend"},
|
||||||
{ZPOOL_CONFIG_VDEV_SYNC_W_PEND_QUEUE, "sync_w_pend"},
|
{ZPOOL_CONFIG_VDEV_SYNC_W_PEND_QUEUE, "sync_w_pend"},
|
||||||
{ZPOOL_CONFIG_VDEV_ASYNC_R_PEND_QUEUE, "async_r_pend"},
|
{ZPOOL_CONFIG_VDEV_ASYNC_R_PEND_QUEUE, "async_r_pend"},
|
||||||
{ZPOOL_CONFIG_VDEV_ASYNC_W_PEND_QUEUE, "async_w_pend"},
|
{ZPOOL_CONFIG_VDEV_ASYNC_W_PEND_QUEUE, "async_w_pend"},
|
||||||
{ZPOOL_CONFIG_VDEV_SCRUB_PEND_QUEUE, "async_scrub_pend"},
|
{ZPOOL_CONFIG_VDEV_SCRUB_PEND_QUEUE, "async_scrub_pend"},
|
||||||
|
{ZPOOL_CONFIG_VDEV_REBUILD_PEND_QUEUE, "rebuild_pend"},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -636,11 +641,13 @@ print_top_level_vdev_stats(nvlist_t *nvroot, const char *pool_name)
|
||||||
{ZPOOL_CONFIG_VDEV_ASYNC_R_ACTIVE_QUEUE, "async_r_active_queue"},
|
{ZPOOL_CONFIG_VDEV_ASYNC_R_ACTIVE_QUEUE, "async_r_active_queue"},
|
||||||
{ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE, "async_w_active_queue"},
|
{ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE, "async_w_active_queue"},
|
||||||
{ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE, "async_scrub_active_queue"},
|
{ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE, "async_scrub_active_queue"},
|
||||||
|
{ZPOOL_CONFIG_VDEV_REBUILD_ACTIVE_QUEUE, "rebuild_active_queue"},
|
||||||
{ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE, "sync_r_pend_queue"},
|
{ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE, "sync_r_pend_queue"},
|
||||||
{ZPOOL_CONFIG_VDEV_SYNC_W_PEND_QUEUE, "sync_w_pend_queue"},
|
{ZPOOL_CONFIG_VDEV_SYNC_W_PEND_QUEUE, "sync_w_pend_queue"},
|
||||||
{ZPOOL_CONFIG_VDEV_ASYNC_R_PEND_QUEUE, "async_r_pend_queue"},
|
{ZPOOL_CONFIG_VDEV_ASYNC_R_PEND_QUEUE, "async_r_pend_queue"},
|
||||||
{ZPOOL_CONFIG_VDEV_ASYNC_W_PEND_QUEUE, "async_w_pend_queue"},
|
{ZPOOL_CONFIG_VDEV_ASYNC_W_PEND_QUEUE, "async_w_pend_queue"},
|
||||||
{ZPOOL_CONFIG_VDEV_SCRUB_PEND_QUEUE, "async_scrub_pend_queue"},
|
{ZPOOL_CONFIG_VDEV_SCRUB_PEND_QUEUE, "async_scrub_pend_queue"},
|
||||||
|
{ZPOOL_CONFIG_VDEV_REBUILD_PEND_QUEUE, "rebuild_pend_queue"},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -643,6 +643,7 @@ typedef struct zpool_load_policy {
|
||||||
#define ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE "vdev_async_w_active_queue"
|
#define ZPOOL_CONFIG_VDEV_ASYNC_W_ACTIVE_QUEUE "vdev_async_w_active_queue"
|
||||||
#define ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE "vdev_async_scrub_active_queue"
|
#define ZPOOL_CONFIG_VDEV_SCRUB_ACTIVE_QUEUE "vdev_async_scrub_active_queue"
|
||||||
#define ZPOOL_CONFIG_VDEV_TRIM_ACTIVE_QUEUE "vdev_async_trim_active_queue"
|
#define ZPOOL_CONFIG_VDEV_TRIM_ACTIVE_QUEUE "vdev_async_trim_active_queue"
|
||||||
|
#define ZPOOL_CONFIG_VDEV_REBUILD_ACTIVE_QUEUE "vdev_rebuild_active_queue"
|
||||||
|
|
||||||
/* Queue sizes */
|
/* Queue sizes */
|
||||||
#define ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE "vdev_sync_r_pend_queue"
|
#define ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE "vdev_sync_r_pend_queue"
|
||||||
|
@ -651,6 +652,7 @@ typedef struct zpool_load_policy {
|
||||||
#define ZPOOL_CONFIG_VDEV_ASYNC_W_PEND_QUEUE "vdev_async_w_pend_queue"
|
#define ZPOOL_CONFIG_VDEV_ASYNC_W_PEND_QUEUE "vdev_async_w_pend_queue"
|
||||||
#define ZPOOL_CONFIG_VDEV_SCRUB_PEND_QUEUE "vdev_async_scrub_pend_queue"
|
#define ZPOOL_CONFIG_VDEV_SCRUB_PEND_QUEUE "vdev_async_scrub_pend_queue"
|
||||||
#define ZPOOL_CONFIG_VDEV_TRIM_PEND_QUEUE "vdev_async_trim_pend_queue"
|
#define ZPOOL_CONFIG_VDEV_TRIM_PEND_QUEUE "vdev_async_trim_pend_queue"
|
||||||
|
#define ZPOOL_CONFIG_VDEV_REBUILD_PEND_QUEUE "vdev_rebuild_pend_queue"
|
||||||
|
|
||||||
/* Latency read/write histogram stats */
|
/* Latency read/write histogram stats */
|
||||||
#define ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO "vdev_tot_r_lat_histo"
|
#define ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO "vdev_tot_r_lat_histo"
|
||||||
|
@ -663,6 +665,7 @@ typedef struct zpool_load_policy {
|
||||||
#define ZPOOL_CONFIG_VDEV_ASYNC_W_LAT_HISTO "vdev_async_w_lat_histo"
|
#define ZPOOL_CONFIG_VDEV_ASYNC_W_LAT_HISTO "vdev_async_w_lat_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_SCRUB_LAT_HISTO "vdev_scrub_histo"
|
#define ZPOOL_CONFIG_VDEV_SCRUB_LAT_HISTO "vdev_scrub_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO "vdev_trim_histo"
|
#define ZPOOL_CONFIG_VDEV_TRIM_LAT_HISTO "vdev_trim_histo"
|
||||||
|
#define ZPOOL_CONFIG_VDEV_REBUILD_LAT_HISTO "vdev_rebuild_histo"
|
||||||
|
|
||||||
/* Request size histograms */
|
/* Request size histograms */
|
||||||
#define ZPOOL_CONFIG_VDEV_SYNC_IND_R_HISTO "vdev_sync_ind_r_histo"
|
#define ZPOOL_CONFIG_VDEV_SYNC_IND_R_HISTO "vdev_sync_ind_r_histo"
|
||||||
|
@ -671,12 +674,14 @@ typedef struct zpool_load_policy {
|
||||||
#define ZPOOL_CONFIG_VDEV_ASYNC_IND_W_HISTO "vdev_async_ind_w_histo"
|
#define ZPOOL_CONFIG_VDEV_ASYNC_IND_W_HISTO "vdev_async_ind_w_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_IND_SCRUB_HISTO "vdev_ind_scrub_histo"
|
#define ZPOOL_CONFIG_VDEV_IND_SCRUB_HISTO "vdev_ind_scrub_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_IND_TRIM_HISTO "vdev_ind_trim_histo"
|
#define ZPOOL_CONFIG_VDEV_IND_TRIM_HISTO "vdev_ind_trim_histo"
|
||||||
|
#define ZPOOL_CONFIG_VDEV_IND_REBUILD_HISTO "vdev_ind_rebuild_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_SYNC_AGG_R_HISTO "vdev_sync_agg_r_histo"
|
#define ZPOOL_CONFIG_VDEV_SYNC_AGG_R_HISTO "vdev_sync_agg_r_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_SYNC_AGG_W_HISTO "vdev_sync_agg_w_histo"
|
#define ZPOOL_CONFIG_VDEV_SYNC_AGG_W_HISTO "vdev_sync_agg_w_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_ASYNC_AGG_R_HISTO "vdev_async_agg_r_histo"
|
#define ZPOOL_CONFIG_VDEV_ASYNC_AGG_R_HISTO "vdev_async_agg_r_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_ASYNC_AGG_W_HISTO "vdev_async_agg_w_histo"
|
#define ZPOOL_CONFIG_VDEV_ASYNC_AGG_W_HISTO "vdev_async_agg_w_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_AGG_SCRUB_HISTO "vdev_agg_scrub_histo"
|
#define ZPOOL_CONFIG_VDEV_AGG_SCRUB_HISTO "vdev_agg_scrub_histo"
|
||||||
#define ZPOOL_CONFIG_VDEV_AGG_TRIM_HISTO "vdev_agg_trim_histo"
|
#define ZPOOL_CONFIG_VDEV_AGG_TRIM_HISTO "vdev_agg_trim_histo"
|
||||||
|
#define ZPOOL_CONFIG_VDEV_AGG_REBUILD_HISTO "vdev_agg_rebuild_histo"
|
||||||
|
|
||||||
/* Number of slow IOs */
|
/* Number of slow IOs */
|
||||||
#define ZPOOL_CONFIG_VDEV_SLOW_IOS "vdev_slow_ios"
|
#define ZPOOL_CONFIG_VDEV_SLOW_IOS "vdev_slow_ios"
|
||||||
|
|
|
@ -201,6 +201,9 @@ Does not include disk time.
|
||||||
.It Sy scrub
|
.It Sy scrub
|
||||||
Amount of time I/O spent in scrub queue.
|
Amount of time I/O spent in scrub queue.
|
||||||
Does not include disk time.
|
Does not include disk time.
|
||||||
|
.It Sy rebuild
|
||||||
|
Amount of time I/O spent in rebuild queue.
|
||||||
|
Does not include disk time.
|
||||||
.El
|
.El
|
||||||
.It Fl l
|
.It Fl l
|
||||||
Include average latency statistics:
|
Include average latency statistics:
|
||||||
|
@ -221,6 +224,9 @@ Does not include disk time.
|
||||||
.It Sy trim
|
.It Sy trim
|
||||||
Average queuing time in trim queue.
|
Average queuing time in trim queue.
|
||||||
Does not include disk time.
|
Does not include disk time.
|
||||||
|
.It Sy rebuild
|
||||||
|
Average queuing time in rebuild queue.
|
||||||
|
Does not include disk time.
|
||||||
.El
|
.El
|
||||||
.It Fl q
|
.It Fl q
|
||||||
Include active queue statistics.
|
Include active queue statistics.
|
||||||
|
@ -242,6 +248,8 @@ Current number of entries in asynchronous priority queues.
|
||||||
Current number of entries in scrub queue.
|
Current number of entries in scrub queue.
|
||||||
.It Sy trimq_write
|
.It Sy trimq_write
|
||||||
Current number of entries in trim queue.
|
Current number of entries in trim queue.
|
||||||
|
.It Sy rebuildq_write
|
||||||
|
Current number of entries in rebuild queue.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
All queue statistics are instantaneous measurements of the number of
|
All queue statistics are instantaneous measurements of the number of
|
||||||
|
|
|
@ -4583,13 +4583,10 @@ vdev_stat_update(zio_t *zio, uint64_t psize)
|
||||||
* ZIO_PRIORITY_ASYNC_READ,
|
* ZIO_PRIORITY_ASYNC_READ,
|
||||||
* ZIO_PRIORITY_ASYNC_WRITE,
|
* ZIO_PRIORITY_ASYNC_WRITE,
|
||||||
* ZIO_PRIORITY_SCRUB,
|
* ZIO_PRIORITY_SCRUB,
|
||||||
* ZIO_PRIORITY_TRIM.
|
* ZIO_PRIORITY_TRIM,
|
||||||
|
* ZIO_PRIORITY_REBUILD.
|
||||||
*/
|
*/
|
||||||
if (priority == ZIO_PRIORITY_REBUILD) {
|
if (priority == ZIO_PRIORITY_INITIALIZING) {
|
||||||
priority = ((type == ZIO_TYPE_WRITE) ?
|
|
||||||
ZIO_PRIORITY_ASYNC_WRITE :
|
|
||||||
ZIO_PRIORITY_SCRUB);
|
|
||||||
} else if (priority == ZIO_PRIORITY_INITIALIZING) {
|
|
||||||
ASSERT3U(type, ==, ZIO_TYPE_WRITE);
|
ASSERT3U(type, ==, ZIO_TYPE_WRITE);
|
||||||
priority = ZIO_PRIORITY_ASYNC_WRITE;
|
priority = ZIO_PRIORITY_ASYNC_WRITE;
|
||||||
} else if (priority == ZIO_PRIORITY_REMOVAL) {
|
} else if (priority == ZIO_PRIORITY_REMOVAL) {
|
||||||
|
|
|
@ -256,6 +256,9 @@ vdev_config_generate_stats(vdev_t *vd, nvlist_t *nv)
|
||||||
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_TRIM_ACTIVE_QUEUE,
|
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_TRIM_ACTIVE_QUEUE,
|
||||||
vsx->vsx_active_queue[ZIO_PRIORITY_TRIM]);
|
vsx->vsx_active_queue[ZIO_PRIORITY_TRIM]);
|
||||||
|
|
||||||
|
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_REBUILD_ACTIVE_QUEUE,
|
||||||
|
vsx->vsx_active_queue[ZIO_PRIORITY_REBUILD]);
|
||||||
|
|
||||||
/* ZIOs pending */
|
/* ZIOs pending */
|
||||||
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE,
|
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SYNC_R_PEND_QUEUE,
|
||||||
vsx->vsx_pend_queue[ZIO_PRIORITY_SYNC_READ]);
|
vsx->vsx_pend_queue[ZIO_PRIORITY_SYNC_READ]);
|
||||||
|
@ -275,6 +278,9 @@ vdev_config_generate_stats(vdev_t *vd, nvlist_t *nv)
|
||||||
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_TRIM_PEND_QUEUE,
|
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_TRIM_PEND_QUEUE,
|
||||||
vsx->vsx_pend_queue[ZIO_PRIORITY_TRIM]);
|
vsx->vsx_pend_queue[ZIO_PRIORITY_TRIM]);
|
||||||
|
|
||||||
|
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_REBUILD_PEND_QUEUE,
|
||||||
|
vsx->vsx_pend_queue[ZIO_PRIORITY_REBUILD]);
|
||||||
|
|
||||||
/* Histograms */
|
/* Histograms */
|
||||||
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO,
|
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_TOT_R_LAT_HISTO,
|
||||||
vsx->vsx_total_histo[ZIO_TYPE_READ],
|
vsx->vsx_total_histo[ZIO_TYPE_READ],
|
||||||
|
@ -316,6 +322,10 @@ vdev_config_generate_stats(vdev_t *vd, nvlist_t *nv)
|
||||||
vsx->vsx_queue_histo[ZIO_PRIORITY_TRIM],
|
vsx->vsx_queue_histo[ZIO_PRIORITY_TRIM],
|
||||||
ARRAY_SIZE(vsx->vsx_queue_histo[ZIO_PRIORITY_TRIM]));
|
ARRAY_SIZE(vsx->vsx_queue_histo[ZIO_PRIORITY_TRIM]));
|
||||||
|
|
||||||
|
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_REBUILD_LAT_HISTO,
|
||||||
|
vsx->vsx_queue_histo[ZIO_PRIORITY_REBUILD],
|
||||||
|
ARRAY_SIZE(vsx->vsx_queue_histo[ZIO_PRIORITY_REBUILD]));
|
||||||
|
|
||||||
/* Request sizes */
|
/* Request sizes */
|
||||||
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_IND_R_HISTO,
|
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_IND_R_HISTO,
|
||||||
vsx->vsx_ind_histo[ZIO_PRIORITY_SYNC_READ],
|
vsx->vsx_ind_histo[ZIO_PRIORITY_SYNC_READ],
|
||||||
|
@ -341,6 +351,10 @@ vdev_config_generate_stats(vdev_t *vd, nvlist_t *nv)
|
||||||
vsx->vsx_ind_histo[ZIO_PRIORITY_TRIM],
|
vsx->vsx_ind_histo[ZIO_PRIORITY_TRIM],
|
||||||
ARRAY_SIZE(vsx->vsx_ind_histo[ZIO_PRIORITY_TRIM]));
|
ARRAY_SIZE(vsx->vsx_ind_histo[ZIO_PRIORITY_TRIM]));
|
||||||
|
|
||||||
|
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_IND_REBUILD_HISTO,
|
||||||
|
vsx->vsx_ind_histo[ZIO_PRIORITY_REBUILD],
|
||||||
|
ARRAY_SIZE(vsx->vsx_ind_histo[ZIO_PRIORITY_REBUILD]));
|
||||||
|
|
||||||
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_AGG_R_HISTO,
|
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_SYNC_AGG_R_HISTO,
|
||||||
vsx->vsx_agg_histo[ZIO_PRIORITY_SYNC_READ],
|
vsx->vsx_agg_histo[ZIO_PRIORITY_SYNC_READ],
|
||||||
ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_SYNC_READ]));
|
ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_SYNC_READ]));
|
||||||
|
@ -365,6 +379,10 @@ vdev_config_generate_stats(vdev_t *vd, nvlist_t *nv)
|
||||||
vsx->vsx_agg_histo[ZIO_PRIORITY_TRIM],
|
vsx->vsx_agg_histo[ZIO_PRIORITY_TRIM],
|
||||||
ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_TRIM]));
|
ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_TRIM]));
|
||||||
|
|
||||||
|
fnvlist_add_uint64_array(nvx, ZPOOL_CONFIG_VDEV_AGG_REBUILD_HISTO,
|
||||||
|
vsx->vsx_agg_histo[ZIO_PRIORITY_REBUILD],
|
||||||
|
ARRAY_SIZE(vsx->vsx_agg_histo[ZIO_PRIORITY_REBUILD]));
|
||||||
|
|
||||||
/* IO delays */
|
/* IO delays */
|
||||||
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SLOW_IOS, vs->vs_slow_ios);
|
fnvlist_add_uint64(nvx, ZPOOL_CONFIG_VDEV_SLOW_IOS, vs->vs_slow_ios);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue