aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs/vdev.c
diff options
context:
space:
mode:
authorTony Hutter <[email protected]>2018-03-04 17:34:51 -0800
committerBrian Behlendorf <[email protected]>2018-03-04 17:34:51 -0800
commit80d52c3919b8cbf1cf21be07037335a22922440f (patch)
treeecfb01fd8f25ddb8f56d36aa1db5a0aad76ebc18 /module/zfs/vdev.c
parent5666a994f2b17f1d720efa83d4c64b1ed7bb53d0 (diff)
Change checksum & IO delay ratelimit values
Change checksum & IO delay ratelimit thresholds from 5/sec to 20/sec. This allows zed to actually trigger if a bunch of these events arrive in a short period of time (zed has a threshold of 10 events in 10 sec). Previously, if you had, say, 100 checksum errors in 1 sec, it would get ratelimited to 5/sec which wouldn't trigger zed to fault the drive. Also, convert the checksum and IO delay thresholds to module params for easy testing. Reviewed-by: loli10K <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Giuseppe Di Natale <[email protected]> Signed-off-by: Tony Hutter <[email protected]> Closes #7252
Diffstat (limited to 'module/zfs/vdev.c')
-rw-r--r--module/zfs/vdev.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c
index 7fd0bd1ac..c73b2e7f2 100644
--- a/module/zfs/vdev.c
+++ b/module/zfs/vdev.c
@@ -57,6 +57,16 @@
int metaslabs_per_vdev = 200;
/*
+ * Rate limit delay events to this many IO delays per second.
+ */
+unsigned int zfs_delays_per_second = 20;
+
+/*
+ * Rate limit checksum events after this many checksum errors per second.
+ */
+unsigned int zfs_checksums_per_second = 20;
+
+/*
* Virtual device management.
*/
@@ -351,8 +361,8 @@ vdev_alloc_common(spa_t *spa, uint_t id, uint64_t guid, vdev_ops_t *ops)
* and checksum events so that we don't overwhelm ZED with thousands
* of events when a disk is acting up.
*/
- zfs_ratelimit_init(&vd->vdev_delay_rl, DELAYS_PER_SECOND, 1);
- zfs_ratelimit_init(&vd->vdev_checksum_rl, CHECKSUMS_PER_SECOND, 1);
+ zfs_ratelimit_init(&vd->vdev_delay_rl, &zfs_delays_per_second, 1);
+ zfs_ratelimit_init(&vd->vdev_checksum_rl, &zfs_checksums_per_second, 1);
list_link_init(&vd->vdev_config_dirty_node);
list_link_init(&vd->vdev_state_dirty_node);
@@ -3752,5 +3762,14 @@ module_param(metaslabs_per_vdev, int, 0644);
MODULE_PARM_DESC(metaslabs_per_vdev,
"Divide added vdev into approximately (but no more than) this number "
"of metaslabs");
+
+module_param(zfs_delays_per_second, uint, 0644);
+MODULE_PARM_DESC(zfs_delays_per_second, "Rate limit delay events to this many "
+ "IO delays per second");
+
+module_param(zfs_checksums_per_second, uint, 0644);
+ MODULE_PARM_DESC(zfs_checksums_per_second, "Rate limit checksum events "
+ "to this many checksum errors per second (do not set below zed"
+ "threshold).");
/* END CSTYLED */
#endif