--- 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 }
};