When printing pool stats, print pool cache stats also if -v is given.
This commit is contained in:
parent
75533175a2
commit
6af26372f1
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: vmstat.c,v 1.95 2002/01/28 02:15:16 simonb Exp $ */
|
/* $NetBSD: vmstat.c,v 1.96 2002/02/20 07:43:30 enami Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1998, 2000, 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 1998, 2000, 2001 The NetBSD Foundation, Inc.
|
||||||
@ -81,7 +81,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1986, 1991, 1993\n\
|
|||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)vmstat.c 8.2 (Berkeley) 3/1/95";
|
static char sccsid[] = "@(#)vmstat.c 8.2 (Berkeley) 3/1/95";
|
||||||
#else
|
#else
|
||||||
__RCSID("$NetBSD: vmstat.c,v 1.95 2002/01/28 02:15:16 simonb Exp $");
|
__RCSID("$NetBSD: vmstat.c,v 1.96 2002/02/20 07:43:30 enami Exp $");
|
||||||
#endif
|
#endif
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
@ -259,7 +259,8 @@ void doevcnt(int verbose);
|
|||||||
void dohashstat(int, int, const char *);
|
void dohashstat(int, int, const char *);
|
||||||
void dointr(int verbose);
|
void dointr(int verbose);
|
||||||
void domem(void);
|
void domem(void);
|
||||||
void dopool(void);
|
void dopool(int);
|
||||||
|
void dopoolcache(struct pool *, int);
|
||||||
void dosum(void);
|
void dosum(void);
|
||||||
void dovmstat(u_int, int);
|
void dovmstat(u_int, int);
|
||||||
void kread(int, void *, size_t);
|
void kread(int, void *, size_t);
|
||||||
@ -440,7 +441,7 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
if (todo & MEMSTAT) {
|
if (todo & MEMSTAT) {
|
||||||
domem();
|
domem();
|
||||||
dopool();
|
dopool(verbose);
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
if (todo & SUMSTAT) {
|
if (todo & SUMSTAT) {
|
||||||
@ -1058,7 +1059,7 @@ domem(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dopool(void)
|
dopool(int verbose)
|
||||||
{
|
{
|
||||||
int first, ovflw;
|
int first, ovflw;
|
||||||
void *addr;
|
void *addr;
|
||||||
@ -1139,6 +1140,7 @@ dopool(void)
|
|||||||
inuse += (pp->pr_nget - pp->pr_nput) * pp->pr_size;
|
inuse += (pp->pr_nget - pp->pr_nput) * pp->pr_size;
|
||||||
total += pp->pr_npages * pp->pr_pagesz;
|
total += pp->pr_npages * pp->pr_pagesz;
|
||||||
}
|
}
|
||||||
|
dopoolcache(pp, verbose);
|
||||||
addr = TAILQ_NEXT(pp, pr_poollist);
|
addr = TAILQ_NEXT(pp, pr_poollist);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1148,6 +1150,48 @@ dopool(void)
|
|||||||
inuse, total, (double)(100 * inuse) / total);
|
inuse, total, (double)(100 * inuse) / total);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef PCG_NOBJECTS
|
||||||
|
/* The pool cache group. */
|
||||||
|
#define PCG_NOBJECTS 16
|
||||||
|
struct pool_cache_group {
|
||||||
|
TAILQ_ENTRY(pool_cache_group)
|
||||||
|
pcg_list; /* link in the pool cache's group list */
|
||||||
|
u_int pcg_avail; /* # available objects */
|
||||||
|
/* pointers to the objects */
|
||||||
|
void *pcg_objects[PCG_NOBJECTS];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
dopoolcache(struct pool *pp, int verbose)
|
||||||
|
{
|
||||||
|
struct pool_cache pool_cache, *pc = &pool_cache;
|
||||||
|
struct pool_cache_group pool_cache_group, *pcg = &pool_cache_group;
|
||||||
|
void *addr, *pcg_addr;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (verbose < 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (addr = TAILQ_FIRST(&pp->pr_cachelist); addr != NULL;
|
||||||
|
addr = TAILQ_NEXT(pc, pc_poollist)) {
|
||||||
|
deref_kptr(addr, pc, sizeof(*pc), "pool cache trashed");
|
||||||
|
printf("\tcache %p: allocfrom %p freeto %p\n", addr,
|
||||||
|
pc->pc_allocfrom, pc->pc_freeto);
|
||||||
|
printf("\t hits %lu misses %lu ngroups %lu nitems %lu\n",
|
||||||
|
pc->pc_hits, pc->pc_misses, pc->pc_ngroups, pc->pc_nitems);
|
||||||
|
if (verbose < 2)
|
||||||
|
continue;
|
||||||
|
for (pcg_addr = TAILQ_FIRST(&pc->pc_grouplist);
|
||||||
|
pcg_addr != NULL; pcg_addr = TAILQ_NEXT(pcg, pcg_list)) {
|
||||||
|
printf("\t\tgroup %p: avail %d\n", pcg_addr,
|
||||||
|
pcg->pcg_avail);
|
||||||
|
for (i = 0; i < PCG_NOBJECTS; i++)
|
||||||
|
printf("\t\t\t%p\n", pcg->pcg_objects[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
enum hashtype { /* from <sys/systm.h> */
|
enum hashtype { /* from <sys/systm.h> */
|
||||||
HASH_LIST,
|
HASH_LIST,
|
||||||
|
Loading…
Reference in New Issue
Block a user