From: DHE Date: Sun, 26 Mar 2017 02:36:28 +0000 (-0400) Subject: Increase zfs_vdev_async_write_min_active to 2 X-Git-Tag: zfs-0.7.0-rc4~45 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=06226b5936eefa16372cc370c584f4287bbc58c4;p=zfs Increase zfs_vdev_async_write_min_active to 2 Resilver operations frequently cause only a small amount of dirty data to be written to disk at a time, resulting in the IO scheduler to only issue 1 write at a time to the resilvering disk. When it is rotational media the drive will often travel past the next sector to be written before receiving a write command from ZFS, significantly delaying the write of the next sector. Raise zfs_vdev_async_write_min_active so that drives are kept fed during resilvering. Reviewed-by: Brian Behlendorf Signed-off-by: DHE Issue #4825 Closes #5926 --- diff --git a/man/man5/zfs-module-parameters.5 b/man/man5/zfs-module-parameters.5 index 72ff0686c..ec07cda76 100644 --- a/man/man5/zfs-module-parameters.5 +++ b/man/man5/zfs-module-parameters.5 @@ -1052,7 +1052,12 @@ Default value: \fB10\fR. Minimum asynchronous write I/Os active to each device. See the section "ZFS I/O SCHEDULER". .sp -Default value: \fB1\fR. +Lower values are associated with better latency on rotational media but poorer +resilver performance. The default value of 2 was chosen as a compromise. A +value of 3 has been shown to improve resilver performance further at a cost of +further increasing latency. +.sp +Default value: \fB2\fR. .RE .sp diff --git a/module/zfs/vdev_queue.c b/module/zfs/vdev_queue.c index d969cfeed..2439f2951 100644 --- a/module/zfs/vdev_queue.c +++ b/module/zfs/vdev_queue.c @@ -148,7 +148,7 @@ uint32_t zfs_vdev_sync_write_min_active = 10; uint32_t zfs_vdev_sync_write_max_active = 10; uint32_t zfs_vdev_async_read_min_active = 1; uint32_t zfs_vdev_async_read_max_active = 3; -uint32_t zfs_vdev_async_write_min_active = 1; +uint32_t zfs_vdev_async_write_min_active = 2; uint32_t zfs_vdev_async_write_max_active = 10; uint32_t zfs_vdev_scrub_min_active = 1; uint32_t zfs_vdev_scrub_max_active = 2;