]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Do not request data L1 buffers on scan prefetch.
authorAlexander Motin <mav@FreeBSD.org>
Thu, 20 Jul 2023 16:10:04 +0000 (12:10 -0400)
committerGitHub <noreply@github.com>
Thu, 20 Jul 2023 16:10:04 +0000 (09:10 -0700)
Set ARC_FLAG_NO_BUF when prefetching data L1 buffers for scan.  We
do not prefetch data L0 buffers, so we do not need the L1 buffers,
only want them to be ready in ARC. This saves some CPU time on the
buffers decompression.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored by: iXsystems, Inc.
Closes #15029

module/zfs/dsl_scan.c

index ecdeba80b745caa97d5cba2df8755571e63fa518..34012db82deee2d86f5edab4bfbaf1becf846015 100644 (file)
@@ -2080,10 +2080,16 @@ dsl_scan_prefetch_thread(void *arg)
                        zio_flags |= ZIO_FLAG_RAW;
                }
 
+               /* We don't need data L1 buffer since we do not prefetch L0. */
+               blkptr_t *bp = &spic->spic_bp;
+               if (BP_GET_LEVEL(bp) == 1 && BP_GET_TYPE(bp) != DMU_OT_DNODE &&
+                   BP_GET_TYPE(bp) != DMU_OT_OBJSET)
+                       flags |= ARC_FLAG_NO_BUF;
+
                /* issue the prefetch asynchronously */
-               (void) arc_read(scn->scn_zio_root, scn->scn_dp->dp_spa,
-                   &spic->spic_bp, dsl_scan_prefetch_cb, spic->spic_spc,
-                   ZIO_PRIORITY_SCRUB, zio_flags, &flags, &spic->spic_zb);
+               (void) arc_read(scn->scn_zio_root, spa, bp,
+                   dsl_scan_prefetch_cb, spic->spic_spc, ZIO_PRIORITY_SCRUB,
+                   zio_flags, &flags, &spic->spic_zb);
 
                kmem_free(spic, sizeof (scan_prefetch_issue_ctx_t));
        }