HomeFreeBSD

fat zap should prefetch when iterating

Description

fat zap should prefetch when iterating

When iterating over a ZAP object, we're almost always certain to iterate
over the entire object. If there are multiple leaf blocks, we can
realize a performance win by issuing reads for all the leaf blocks in
parallel when the iteration begins.

For example, if we have 10,000 snapshots, "zfs destroy -nv
pool/fs@1%9999" can take 30 minutes when the cache is cold. This change
provides a >3x performance improvement, by issuing the reads for all ~64
blocks of each ZAP object in parallel.

Reviewed-by: Andreas Dilger <andreas.dilger@whamcloud.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
External-issue: DLPX-58347
Closes #8862

Details

Provenance
mahrensAuthored on Jun 12 2019, 8:13 PM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on Jun 12 2019, 8:13 PM
Parents
rGd9cd66e45f28: Target ARC size can get reduced to arc_c_min
Branches
Unknown
Tags
Unknown

Event Timeline