usr/src/cmd/mdb/common/modules/zfs/zfs.c
changeset 3059 7d69dbccfcbb
parent 2885 c0259887ebbc
child 3158 f30a3849aa23
--- a/usr/src/cmd/mdb/common/modules/zfs/zfs.c	Fri Nov 03 10:20:05 2006 -0800
+++ b/usr/src/cmd/mdb/common/modules/zfs/zfs.c	Fri Nov 03 11:39:28 2006 -0800
@@ -329,6 +329,74 @@
 
 /* ARGSUSED */
 static int
+zfs_params(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
+{
+	/*
+	 * This table can be approximately generated by running:
+	 * egrep "^[a-z0-9_]+ [a-z0-9_]+( =.*)?;" *.c | cut -d ' ' -f 2
+	 */
+	static const char *params[] = {
+		"arc_reduce_dnlc_percent",
+		"zfs_arc_max",
+		"zfs_arc_min",
+		"arc_kmem_reclaim_shift",
+		"zfs_mdcomp_disable",
+		"zfs_prefetch_disable",
+		"zfetch_max_streams",
+		"zfetch_min_sec_reap",
+		"zfetch_block_cap",
+		"zfetch_array_rd_sz",
+		"zfs_default_bs",
+		"zfs_default_ibs",
+		"metaslab_aliquot",
+		"reference_tracking_enable",
+		"reference_history",
+		"zio_taskq_threads",
+		"spa_max_replication_override",
+		"spa_mode",
+		"zfs_flags",
+		"txg_time",
+		"zfs_vdev_cache_max",
+		"zfs_vdev_cache_size",
+		"zfs_vdev_cache_bshift",
+		"vdev_mirror_shift",
+		"zfs_vdev_max_pending",
+		"zfs_vdev_min_pending",
+		"zfs_scrub_limit",
+		"zfs_vdev_time_shift",
+		"zfs_vdev_ramp_rate",
+		"zfs_vdev_aggregation_limit",
+		"fzap_default_block_shift",
+		"zfs_immediate_write_sz",
+		"zfs_read_chunk_size",
+		"zil_disable",
+		"zfs_nocacheflush",
+		"zio_gang_bang",
+		"zio_injection_enabled",
+		"zvol_immediate_write_sz",
+	};
+	int i;
+
+	for (i = 0; i < sizeof (params) / sizeof (params[0]); i++) {
+		int sz;
+		uint64_t val64;
+		uint32_t *val32p = (uint32_t *)&val64;
+
+		sz = mdb_readvar(&val64, params[i]);
+		if (sz == 4) {
+			mdb_printf("%s = 0x%x\n", params[i], *val32p);
+		} else if (sz == 8) {
+			mdb_printf("%s = 0x%llx\n", params[i], val64);
+		} else {
+			mdb_warn("variable %s not found", params[i]);
+		}
+	}
+
+	return (DCMD_OK);
+}
+
+/* ARGSUSED */
+static int
 blkptr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
 {
 	blkptr_t bp;
@@ -832,8 +900,8 @@
 void
 vdev_help(void)
 {
-	mdb_printf("[vdev_t*]::vdev [-qr]\n"
-		"\t-> -q display vdev_queue parameters\n"
+	mdb_printf("[vdev_t*]::vdev [-er]\n"
+		"\t-> -e display vdev stats\n"
 		"\t-> -r recursive (visit all children)\n");
 }
 
@@ -845,21 +913,12 @@
  * ADDR             STATE	AUX            DESC
  * fffffffbcde23df0 HEALTHY	-              /dev/dsk/c0t0d0
  *
- * or with "-q" to print out a vdev_t's vdev_queue parameters:
- *
- *  vdev_t: c26ae4c0
- *     c26ae73c min pending         0x2
- *     c26ae744 max pending         0x23
- *     c26ae74c agg limit           0x20000
- *     c26ae754 time shift          0x4
- *     c26ae75c ramp rate           0x2
- *
  * If '-r' is specified, recursively visit all children.
  *
  * With '-e', the statistics associated with the vdev are printed as well.
  */
 static int
-do_print_vdev(uintptr_t addr, int flags, int depth, int queue, int stats,
+do_print_vdev(uintptr_t addr, int flags, int depth, int stats,
     int recursive)
 {
 	vdev_t vdev;
@@ -954,32 +1013,6 @@
 
 		mdb_printf("%-9s %-12s %*s%s\n", state, aux, depth, "", desc);
 
-		if (queue) {
-			mdb_inc_indent(4);
-			mdb_printf("\n");
-			mdb_printf("%p min pending		0x%llx\n",
-			    (uintptr_t)(addr + offsetof(vdev_t,
-			    vdev_queue.vq_min_pending)),
-			    vdev.vdev_queue.vq_min_pending);
-			mdb_printf("%p max pending		0x%llx\n",
-			    (uintptr_t)(addr + offsetof(vdev_t,
-			    vdev_queue.vq_max_pending)),
-			    vdev.vdev_queue.vq_max_pending);
-			mdb_printf("%p agg limit		0x%llx\n",
-			    (uintptr_t)(addr + offsetof(vdev_t,
-			    vdev_queue.vq_agg_limit)),
-			    vdev.vdev_queue.vq_agg_limit);
-			mdb_printf("%p time shift		0x%llx\n",
-			    (uintptr_t)(addr + offsetof(vdev_t,
-			    vdev_queue.vq_time_shift)),
-			    vdev.vdev_queue.vq_time_shift);
-			mdb_printf("%p ramp rate 		0x%llx\n",
-			    (uintptr_t)(addr + offsetof(vdev_t,
-			    vdev_queue.vq_ramp_rate)),
-			    vdev.vdev_queue.vq_ramp_rate);
-			mdb_dec_indent(4);
-		}
-
 		if (stats) {
 			vdev_stat_t *vs = &vdev.vdev_stat;
 			int i;
@@ -1008,7 +1041,7 @@
 			mdb_dec_indent(4);
 		}
 
-		if (queue || stats)
+		if (stats)
 			mdb_printf("\n");
 	}
 
@@ -1025,7 +1058,7 @@
 	}
 
 	for (c = 0; c < children; c++) {
-		if (do_print_vdev(child[c], flags, depth + 2, queue, stats,
+		if (do_print_vdev(child[c], flags, depth + 2, stats,
 		    recursive))
 			return (DCMD_ERR);
 	}
@@ -1036,12 +1069,10 @@
 static int
 vdev_print(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
 {
-	int print_queue = FALSE;
 	int recursive = FALSE;
 	int stats = FALSE;
 
 	if (mdb_getopts(argc, argv,
-	    'q', MDB_OPT_SETBITS, TRUE, &print_queue,
 	    'r', MDB_OPT_SETBITS, TRUE, &recursive,
 	    'e', MDB_OPT_SETBITS, TRUE, &stats,
 	    NULL) != argc)
@@ -1052,7 +1083,7 @@
 		return (DCMD_ERR);
 	}
 
-	return (do_print_vdev(addr, flags, 0, print_queue, stats, recursive));
+	return (do_print_vdev(addr, flags, 0, stats, recursive));
 }
 
 typedef struct metaslab_walk_data {
@@ -1546,8 +1577,9 @@
 	{ "spa_verify", ":", "verify spa_t consistency", spa_verify },
 	{ "spa_space", ":[-b]", "print spa_t on-disk space usage", spa_space },
 	{ "spa_vdevs", ":", "given a spa_t, print vdev summary", spa_vdevs },
-	{ "vdev", ":[-qre]", "vdev_t summary", vdev_print },
+	{ "vdev", ":[-re]", "vdev_t summary", vdev_print },
 	{ "zio_pipeline", ":", "decode a zio pipeline", zio_pipeline },
+	{ "zfs_params", "", "print zfs tunable parameters", zfs_params },
 	{ NULL }
 };