MFV r272802:
- Limit ARC for zdb at 256MB. zdb do not typically revisit data in the ARC. - Increase default max_inflight from 200 to 1000 (can be overriden by -I) so we can queue more I/Os when doing scrubbing. - Print status while loading meataslabs for leak detection. Illumos issues: 5169 zdb should limit its ARC size 5170 zdb -c should create more scrub i/os by default 5171 zdb should print status while loading metaslabs for leak detection MFC after: 2 weeks
This commit is contained in:
commit
15f3c56e3d
@ -76,8 +76,10 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
extern boolean_t zfs_recover;
|
extern boolean_t zfs_recover;
|
||||||
|
extern uint64_t zfs_arc_max, zfs_arc_meta_limit;
|
||||||
#else
|
#else
|
||||||
boolean_t zfs_recover;
|
boolean_t zfs_recover;
|
||||||
|
uint64_t zfs_arc_max, zfs_arc_meta_limit;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char cmdname[] = "zdb";
|
const char cmdname[] = "zdb";
|
||||||
@ -89,7 +91,7 @@ extern void dump_intent_log(zilog_t *);
|
|||||||
uint64_t *zopt_object = NULL;
|
uint64_t *zopt_object = NULL;
|
||||||
int zopt_objects = 0;
|
int zopt_objects = 0;
|
||||||
libzfs_handle_t *g_zfs;
|
libzfs_handle_t *g_zfs;
|
||||||
uint64_t max_inflight = 200;
|
uint64_t max_inflight = 1000;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These libumem hooks provide a reasonable set of defaults for the allocator's
|
* These libumem hooks provide a reasonable set of defaults for the allocator's
|
||||||
@ -2382,7 +2384,7 @@ zdb_blkptr_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp,
|
|||||||
|
|
||||||
zcb->zcb_readfails = 0;
|
zcb->zcb_readfails = 0;
|
||||||
|
|
||||||
if (dump_opt['b'] < 5 && isatty(STDERR_FILENO) &&
|
if (dump_opt['b'] < 5 &&
|
||||||
gethrtime() > zcb->zcb_lastprint + NANOSEC) {
|
gethrtime() > zcb->zcb_lastprint + NANOSEC) {
|
||||||
uint64_t now = gethrtime();
|
uint64_t now = gethrtime();
|
||||||
char buf[10];
|
char buf[10];
|
||||||
@ -2467,9 +2469,9 @@ zdb_leak_init(spa_t *spa, zdb_cb_t *zcb)
|
|||||||
|
|
||||||
if (!dump_opt['L']) {
|
if (!dump_opt['L']) {
|
||||||
vdev_t *rvd = spa->spa_root_vdev;
|
vdev_t *rvd = spa->spa_root_vdev;
|
||||||
for (int c = 0; c < rvd->vdev_children; c++) {
|
for (uint64_t c = 0; c < rvd->vdev_children; c++) {
|
||||||
vdev_t *vd = rvd->vdev_child[c];
|
vdev_t *vd = rvd->vdev_child[c];
|
||||||
for (int m = 0; m < vd->vdev_ms_count; m++) {
|
for (uint64_t m = 0; m < vd->vdev_ms_count; m++) {
|
||||||
metaslab_t *msp = vd->vdev_ms[m];
|
metaslab_t *msp = vd->vdev_ms[m];
|
||||||
mutex_enter(&msp->ms_lock);
|
mutex_enter(&msp->ms_lock);
|
||||||
metaslab_unload(msp);
|
metaslab_unload(msp);
|
||||||
@ -2482,6 +2484,15 @@ zdb_leak_init(spa_t *spa, zdb_cb_t *zcb)
|
|||||||
* interfaces.
|
* interfaces.
|
||||||
*/
|
*/
|
||||||
if (msp->ms_sm != NULL) {
|
if (msp->ms_sm != NULL) {
|
||||||
|
(void) fprintf(stderr,
|
||||||
|
"\rloading space map for "
|
||||||
|
"vdev %llu of %llu, "
|
||||||
|
"metaslab %llu of %llu ...",
|
||||||
|
(longlong_t)c,
|
||||||
|
(longlong_t)rvd->vdev_children,
|
||||||
|
(longlong_t)m,
|
||||||
|
(longlong_t)vd->vdev_ms_count);
|
||||||
|
|
||||||
msp->ms_ops = &zdb_metaslab_ops;
|
msp->ms_ops = &zdb_metaslab_ops;
|
||||||
VERIFY0(space_map_load(msp->ms_sm,
|
VERIFY0(space_map_load(msp->ms_sm,
|
||||||
msp->ms_tree, SM_ALLOC));
|
msp->ms_tree, SM_ALLOC));
|
||||||
@ -2490,6 +2501,7 @@ zdb_leak_init(spa_t *spa, zdb_cb_t *zcb)
|
|||||||
mutex_exit(&msp->ms_lock);
|
mutex_exit(&msp->ms_lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
(void) fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER);
|
spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER);
|
||||||
@ -3490,6 +3502,12 @@ main(int argc, char **argv)
|
|||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ZDB does not typically re-read blocks; therefore limit the ARC
|
||||||
|
* to 256 MB, which can be used entirely for metadata.
|
||||||
|
*/
|
||||||
|
zfs_arc_max = zfs_arc_meta_limit = 256 * 1024 * 1024;
|
||||||
|
|
||||||
kernel_init(FREAD);
|
kernel_init(FREAD);
|
||||||
g_zfs = libzfs_init();
|
g_zfs = libzfs_init();
|
||||||
ASSERT(g_zfs != NULL);
|
ASSERT(g_zfs != NULL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user