From 6dc40e2ada2d0d008bd314ff3525f2b0acc2bb01 Mon Sep 17 00:00:00 2001 From: Tony Hutter Date: Sun, 4 Mar 2018 17:34:51 -0800 Subject: 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 Reviewed-by: Brian Behlendorf Reviewed-by: Giuseppe Di Natale Signed-off-by: Tony Hutter Closes #7252 --- module/zfs/vdev.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'module/zfs') diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c index df07d893d..0786fbb83 100644 --- a/module/zfs/vdev.c +++ b/module/zfs/vdev.c @@ -56,6 +56,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. */ @@ -357,8 +367,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); @@ -3776,5 +3786,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 -- cgit v1.2.3