summaryrefslogtreecommitdiff
path: root/sys/kern/kern_malloc.c
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2005-10-20 17:41:47 +0000
committerRobert Watson <rwatson@FreeBSD.org>2005-10-20 17:41:47 +0000
commit909ed16c2be3fa7edce014d28c8888f84f8c37f1 (patch)
treeccd654d68d8df3b9957f547fd75e54ac06c2920a /sys/kern/kern_malloc.c
parentd51c226b583d61aa4d4ed6fdaa827d94a82529d4 (diff)
Notes
Diffstat (limited to 'sys/kern/kern_malloc.c')
-rw-r--r--sys/kern/kern_malloc.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index 2171817e8a6a..3cb720d8bb55 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -34,6 +34,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_ddb.h"
#include "opt_vm.h"
#include <sys/param.h>
@@ -69,6 +70,8 @@ __FBSDID("$FreeBSD$");
#include <machine/cpu.h>
#endif
+#include <ddb/ddb.h>
+
/*
* When realloc() is called, if the new size is sufficiently smaller than
* the old size, realloc() will allocate a new, smaller block to avoid
@@ -813,6 +816,30 @@ SYSCTL_PROC(_kern, OID_AUTO, malloc_stats, CTLFLAG_RD|CTLTYPE_STRUCT,
SYSCTL_INT(_kern, OID_AUTO, malloc_count, CTLFLAG_RD, &kmemcount, 0,
"Count of kernel malloc types");
+#ifdef DDB
+DB_SHOW_COMMAND(malloc, db_show_malloc)
+{
+ struct malloc_type_internal *mtip;
+ struct malloc_type *mtp;
+ u_int64_t allocs, frees;
+ int i;
+
+ db_printf("%18s %12s %12s %12s\n", "Type", "Allocs", "Frees",
+ "Used");
+ for (mtp = kmemstatistics; mtp != NULL; mtp = mtp->ks_next) {
+ mtip = (struct malloc_type_internal *)mtp->ks_handle;
+ allocs = 0;
+ frees = 0;
+ for (i = 0; i < MAXCPU; i++) {
+ allocs += mtip->mti_stats[i].mts_numallocs;
+ frees += mtip->mti_stats[i].mts_numfrees;
+ }
+ db_printf("%18s %12llu %12llu %12llu\n", mtp->ks_shortdesc,
+ allocs, frees, allocs - frees);
+ }
+}
+#endif
+
#ifdef MALLOC_PROFILE
static int