mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
Illumos 5243 - zdb -b could be much faster
5243 zdb -b could be much faster Reviewed by: Christopher Siden <christopher.siden@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Richard Elling <richard.elling@gmail.com> Approved by: Dan McDonald <danmcd@omniti.com> References: https://www.illumos.org/issues/5243 https://github.com/illumos/illumos-gate/commit/f7950bf Ported-by: Don Brady <don.brady@intel.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #3414
This commit is contained in:
committed by
Brian Behlendorf
parent
b1b85c8772
commit
e5fd1dd682
+25
-2
@@ -76,9 +76,11 @@
|
||||
#ifndef lint
|
||||
extern int zfs_recover;
|
||||
extern uint64_t zfs_arc_max, zfs_arc_meta_limit;
|
||||
extern int zfs_vdev_async_read_max_active;
|
||||
#else
|
||||
int zfs_recover;
|
||||
uint64_t zfs_arc_max, zfs_arc_meta_limit;
|
||||
int zfs_vdev_async_read_max_active;
|
||||
#endif
|
||||
|
||||
const char cmdname[] = "zdb";
|
||||
@@ -2513,8 +2515,14 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp,
|
||||
|
||||
zcb->zcb_readfails = 0;
|
||||
|
||||
if (dump_opt['b'] < 5 &&
|
||||
gethrtime() > zcb->zcb_lastprint + NANOSEC) {
|
||||
/* only call gethrtime() every 100 blocks */
|
||||
static int iters;
|
||||
if (++iters > 100)
|
||||
iters = 0;
|
||||
else
|
||||
return (0);
|
||||
|
||||
if (dump_opt['b'] < 5 && gethrtime() > zcb->zcb_lastprint + NANOSEC) {
|
||||
uint64_t now = gethrtime();
|
||||
char buf[10];
|
||||
uint64_t bytes = zcb->zcb_type[ZB_TOTAL][ZDB_OT_TOTAL].zb_asize;
|
||||
@@ -2625,6 +2633,14 @@ zdb_leak_init(spa_t *spa, zdb_cb_t *zcb)
|
||||
(longlong_t)vd->vdev_ms_count);
|
||||
|
||||
msp->ms_ops = &zdb_metaslab_ops;
|
||||
|
||||
/*
|
||||
* We don't want to spend the CPU
|
||||
* manipulating the size-ordered
|
||||
* tree, so clear the range_tree
|
||||
* ops.
|
||||
*/
|
||||
msp->ms_tree->rt_ops = NULL;
|
||||
VERIFY0(space_map_load(msp->ms_sm,
|
||||
msp->ms_tree, SM_ALLOC));
|
||||
msp->ms_loaded = B_TRUE;
|
||||
@@ -3675,6 +3691,13 @@ main(int argc, char **argv)
|
||||
zfs_arc_max = zfs_arc_meta_limit = 256 * 1024 * 1024;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "zdb -c" uses checksum-verifying scrub i/os which are async reads.
|
||||
* "zdb -b" uses traversal prefetch which uses async reads.
|
||||
* For good performance, let several of them be active at once.
|
||||
*/
|
||||
zfs_vdev_async_read_max_active = 10;
|
||||
|
||||
kernel_init(FREAD);
|
||||
if ((g_zfs = libzfs_init()) == NULL)
|
||||
return (1);
|
||||
|
||||
Reference in New Issue
Block a user