aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/cmd
diff options
context:
space:
mode:
authorAndriy Gapon <avg@FreeBSD.org>2017-05-24 20:41:26 +0000
committerAndriy Gapon <avg@FreeBSD.org>2017-05-24 20:41:26 +0000
commitc65389d3677068e64b8eefb438f814d75476b8fa (patch)
tree1d5332f733e19b98e4ed26e709449b7d91b665f0 /cddl/contrib/opensolaris/cmd
parent04fe6458d3f2e4a0648c7ab8df38d366b1829423 (diff)
parent60d1053c22f0b8b7be2e27d8f6e4632b52342881 (diff)
downloadsrc-c65389d3677068e64b8eefb438f814d75476b8fa.tar.gz
src-c65389d3677068e64b8eefb438f814d75476b8fa.zip
MFV r316860: 7545 zdb should disable reference tracking
illumos/illumos-gate@4dd77f9e38ef05b39db128ff7608d926fd3218c6 https://github.com/illumos/illumos-gate/commit/4dd77f9e38ef05b39db128ff7608d926fd3218c6 https://www.illumos.org/issues/7545 When evicting from the ARC, we manipulate some refcount_t's, e.g. arcs_size. When using zdb to examine a large amount of data (e.g. zdb -bb on a large pool with small blocks), the ARC may have a large number of entries. If reference tracking is enabled, there will be ~1 reference for each block in the ARC. When evicting, we decrement the refcount and have to search all the references to find the one that we are removing, which is very slow. Since zdb is typically used to find problems with the on-disk format, and not with the code it is running, we should disable reference tracking in zdb. Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed by: Steve Gonczi <steve.gonczi@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Approved by: Robert Mustacchi <rm@joyent.com> Author: Matthew Ahrens <mahrens@delphix.com> MFC after: 2 weeks
Notes
Notes: svn path=/head/; revision=318812
Diffstat (limited to 'cddl/contrib/opensolaris/cmd')
-rw-r--r--cddl/contrib/opensolaris/cmd/zdb/zdb.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/cddl/contrib/opensolaris/cmd/zdb/zdb.c b/cddl/contrib/opensolaris/cmd/zdb/zdb.c
index 743641b560ba..ac9b06debf76 100644
--- a/cddl/contrib/opensolaris/cmd/zdb/zdb.c
+++ b/cddl/contrib/opensolaris/cmd/zdb/zdb.c
@@ -75,10 +75,12 @@
DMU_OT_ZAP_OTHER : DMU_OT_NUMTYPES))
#ifndef lint
+extern int reference_tracking_enable;
extern boolean_t zfs_recover;
extern uint64_t zfs_arc_max, zfs_arc_meta_limit;
extern int zfs_vdev_async_read_max_active;
#else
+int reference_tracking_enable;
boolean_t zfs_recover;
uint64_t zfs_arc_max, zfs_arc_meta_limit;
int zfs_vdev_async_read_max_active;
@@ -3696,6 +3698,11 @@ main(int argc, char **argv)
*/
zfs_vdev_async_read_max_active = 10;
+ /*
+ * Disable reference tracking for better performance.
+ */
+ reference_tracking_enable = B_FALSE;
+
kernel_init(FREAD);
g_zfs = libzfs_init();
if (g_zfs == NULL)