svn commit: r316860 - vendor/illumos/dist/cmd/zdb

Andriy Gapon avg at FreeBSD.org
Fri Apr 14 16:55:16 UTC 2017


Author: avg
Date: Fri Apr 14 16:55:15 2017
New Revision: 316860
URL: https://svnweb.freebsd.org/changeset/base/316860

Log:
  7545 zdb should disable reference tracking
  
  illumos/illumos-gate at 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 at delphix.com>
  Reviewed by: Steve Gonczi <steve.gonczi at delphix.com>
  Reviewed by: George Wilson <george.wilson at delphix.com>
  Approved by: Robert Mustacchi <rm at joyent.com>
  Author: Matthew Ahrens <mahrens at delphix.com>

Modified:
  vendor/illumos/dist/cmd/zdb/zdb.c

Modified: vendor/illumos/dist/cmd/zdb/zdb.c
==============================================================================
--- vendor/illumos/dist/cmd/zdb/zdb.c	Fri Apr 14 16:54:50 2017	(r316859)
+++ vendor/illumos/dist/cmd/zdb/zdb.c	Fri Apr 14 16:55:15 2017	(r316860)
@@ -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;
@@ -3676,6 +3678,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();
 	ASSERT(g_zfs != NULL);


More information about the svn-src-all mailing list