ddb: add two new modifiers to "show pool" and "show all pools"

- /s shows a short single-line per pool list (the normal output
  is about 10 lines per.)
- /S skips pools with zero allocations.
This commit is contained in:
mrg 2020-12-19 23:38:21 +00:00
parent e17ac28afe
commit 3996f2220f
2 changed files with 40 additions and 14 deletions

View File

@ -1,4 +1,4 @@
.\" $NetBSD: ddb.4,v 1.196 2020/10/31 22:43:01 uwe Exp $
.\" $NetBSD: ddb.4,v 1.197 2020/12/19 23:38:21 mrg Exp $
.\"
.\" Copyright (c) 1997 - 2019 The NetBSD Foundation, Inc.
.\" All rights reserved.
@ -56,7 +56,7 @@
.\" any improvements or extensions that they make and grant Carnegie Mellon
.\" the rights to redistribute these changes.
.\"
.Dd August 23, 2020
.Dd December 19, 2020
.Dt DDB 4
.Os
.Sh NAME
@ -584,7 +584,7 @@ is specified, the complete vnode list is printed.
Display basic information about all physical pages managed by the VM system.
For more detailed information about a single page, use
.Ic show page .
.It Ic show all pools Ns Op Cm /clp
.It Ic show all pools Ns Op Cm /clpsS
Display all pool information.
Modifiers are the same as
.Ic show pool .
@ -721,7 +721,7 @@ If
is specified, the complete page is printed.
.It Ic show panic
Print the current "panic" string.
.It Ic show pool Ns Oo Cm /clp Oc Ar address
.It Ic show pool Ns Oo Cm /clpsS Oc Ar address
Print the pool at
.Ar address .
Valid modifiers:
@ -732,6 +732,13 @@ Print the cachelist and its statistics for this pool.
Print the log entries for this pool.
.It Cm /p
Print the pagelist for this pool.
.It Cm /s
Print a short (one line) list per pool, showing the wait channel, pool
address, allocation size, alignment, allocated pages, allocated items,
consumed items, allocation requests, allocation frees, pages allocated,
pages freed, and currently idle pages, respectively.
.It Cm /S
Skip pools with zero allocations.
.El
.It Ic show proc Ns Oo Cm /ap Oc Ar address | pid
Show information about a process and its LWPs.

View File

@ -1,4 +1,4 @@
/* $NetBSD: subr_pool.c,v 1.274 2020/09/05 17:33:11 riastradh Exp $ */
/* $NetBSD: subr_pool.c,v 1.275 2020/12/19 23:38:21 mrg Exp $ */
/*
* Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010, 2014, 2015, 2018,
@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.274 2020/09/05 17:33:11 riastradh Exp $");
__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.275 2020/12/19 23:38:21 mrg Exp $");
#ifdef _KERNEL_OPT
#include "opt_ddb.h"
@ -1833,28 +1833,47 @@ pool_print1(struct pool *pp, const char *modif, void (*pr)(const char *, ...))
pool_cache_cpu_t *cc;
uint64_t cpuhit, cpumiss, pchit, pcmiss;
uint32_t nfull;
int i, print_log = 0, print_pagelist = 0, print_cache = 0;
int i;
bool print_log = false, print_pagelist = false, print_cache = false;
bool print_short = false, skip_empty = false;
char c;
while ((c = *modif++) != '\0') {
if (c == 'l')
print_log = 1;
print_log = true;
if (c == 'p')
print_pagelist = 1;
print_pagelist = true;
if (c == 'c')
print_cache = 1;
print_cache = true;
if (c == 's')
print_short = true;
if (c == 'S')
skip_empty = true;
}
if (skip_empty && pp->pr_nget == 0)
return;
if ((pc = pp->pr_cache) != NULL) {
(*pr)("POOL CACHE");
(*pr)("POOLCACHE");
} else {
(*pr)("POOL");
}
/* Single line output. */
if (print_short) {
(*pr)(" %s:%p:%u:%u:%u:%u:%u:%u:%u:%u:%u:%u\n",
pp->pr_wchan, pp, pp->pr_size, pp->pr_align, pp->pr_npages,
pp->pr_nitems, pp->pr_nout, pp->pr_nget, pp->pr_nput,
pp->pr_npagealloc, pp->pr_npagefree, pp->pr_nidle);
return;
}
(*pr)(" %s: size %u, align %u, ioff %u, roflags 0x%08x\n",
pp->pr_wchan, pp->pr_size, pp->pr_align, pp->pr_itemoffset,
pp->pr_roflags);
(*pr)("\talloc %p\n", pp->pr_alloc);
(*pr)("\tpool %p, alloc %p\n", pp, pp->pr_alloc);
(*pr)("\tminitems %u, minpages %u, maxpages %u, npages %u\n",
pp->pr_minitems, pp->pr_minpages, pp->pr_maxpages, pp->pr_npages);
(*pr)("\titemsperpage %u, nitems %u, nout %u, hardlimit %u\n",
@ -1865,7 +1884,7 @@ pool_print1(struct pool *pp, const char *modif, void (*pr)(const char *, ...))
(*pr)("\tnpagealloc %lu, npagefree %lu, hiwat %u, nidle %lu\n",
pp->pr_npagealloc, pp->pr_npagefree, pp->pr_hiwat, pp->pr_nidle);
if (print_pagelist == 0)
if (!print_pagelist)
goto skip_pagelist;
if ((ph = LIST_FIRST(&pp->pr_emptypages)) != NULL)
@ -1884,7 +1903,7 @@ pool_print1(struct pool *pp, const char *modif, void (*pr)(const char *, ...))
(*pr)("\tcurpage %p\n", pp->pr_curpage->ph_page);
skip_pagelist:
if (print_log == 0)
if (print_log)
goto skip_log;
(*pr)("\n");