HomeFreeBSD

zfetch: Don't issue new streams when old have not completed

Description

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

Details

Provenance
mmacyAuthored on Sep 28 2020, 12:08 AM
GitHub <noreply@github.com>Committed on Sep 28 2020, 12:08 AM
Parents
rGcf2667759f45: zfs userspace: use zfs_path_to_zhandle so argument can be a path
Branches
Unknown
Tags
Unknown