]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
zfetch: Don't issue new streams when old have not completed
authorMatthew Macy <mmacy@freebsd.org>
Mon, 28 Sep 2020 00:08:38 +0000 (17:08 -0700)
committerGitHub <noreply@github.com>
Mon, 28 Sep 2020 00:08:38 +0000 (17:08 -0700)
commitaf20b97078af7bf4ba7552dff04cc40b643ab72c
treef2588e170caba562ff55808458276ca5796b2211
parentcf2667759f4583bddd4b6ce8167e48b041ae1ea3
zfetch: Don't issue new streams when old have not completed

The current dmu_zfetch code implicitly assumes that I/Os complete
within min_sec_reap seconds. With async dmu and a readonly workload
(and thus no exponential backoff in operations from the "write
throttle") such as L2ARC rebuild it is possible to saturate the drives
with I/O requests. These are then effectively compounded with prefetch
requests.

This change reference counts streams and prevents them from being
recycled after their min_sec_reap timeout if they still have
outstanding I/Os.

Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #10900
include/sys/dbuf.h
include/sys/dmu_zfetch.h
module/zfs/dbuf.c
module/zfs/dmu_zfetch.c