Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/vmstat - Use -H (instead of -h) to list all hash stats.



details:   https://anonhg.NetBSD.org/src/rev/b222ec7d6f48
branches:  trunk
changeset: 518208:b222ec7d6f48
user:      lukem <lukem%NetBSD.org@localhost>
date:      Mon Nov 26 10:18:08 2001 +0000

description:
- Use -H (instead of -h) to list all hash stats.
- Add '-h hashname' to only list the stats for hashname.
- Add -L to list valid hashes
- Fix up some whitespace

diffstat:

 usr.bin/vmstat/vmstat.1 |   19 ++++++-
 usr.bin/vmstat/vmstat.c |  117 ++++++++++++++++++++++++++++++++----------------
 2 files changed, 93 insertions(+), 43 deletions(-)

diffs (258 lines):

diff -r 8ac0e59528b5 -r b222ec7d6f48 usr.bin/vmstat/vmstat.1
--- a/usr.bin/vmstat/vmstat.1   Mon Nov 26 07:52:46 2001 +0000
+++ b/usr.bin/vmstat/vmstat.1   Mon Nov 26 10:18:08 2001 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: vmstat.1,v 1.4 2001/11/26 07:52:46 wiz Exp $
+.\"    $NetBSD: vmstat.1,v 1.5 2001/11/26 10:18:08 lukem Exp $
 .\"
 .\" Copyright (c) 2000 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -72,7 +72,7 @@
 .Nd report virtual memory statistics
 .Sh SYNOPSIS
 .Nm
-.Op Fl efhilmsUv
+.Op Fl efHilLmsUv
 .Bk -words
 .Op Fl M Ar core
 .Ek
@@ -83,6 +83,9 @@
 .Op Fl c Ar count
 .Ek
 .Bk -words
+.Op Fl h Ar hashname
+.Ek
+.Bk -words
 .Op Fl u Ar histname
 .Ek
 .Bk -words
@@ -116,12 +119,20 @@
 Report the values of system event counters.
 .It Fl f
 Report fork statistics.
-.It Fl h
-Report hash table statistics.
+.It Fl h Ar hashname
+Report hash table statistics for
+.Ar hashname .
+.It Fl H
+Report all hash table statistics.
 .It Fl i
 Report the values of system interrupt counters.
 .It Fl l
 List the UVM histories being maintained by the kernel.
+.It Fl L
+List all the hashes supported for
+.Fl h
+and
+.Fl H .
 .It Fl m
 Report on the usage of kernel dynamic memory listed first by size of
 allocation and then by type of usage.
diff -r 8ac0e59528b5 -r b222ec7d6f48 usr.bin/vmstat/vmstat.c
--- a/usr.bin/vmstat/vmstat.c   Mon Nov 26 07:52:46 2001 +0000
+++ b/usr.bin/vmstat/vmstat.c   Mon Nov 26 10:18:08 2001 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vmstat.c,v 1.87 2001/11/26 07:40:01 lukem Exp $ */
+/* $NetBSD: vmstat.c,v 1.88 2001/11/26 10:18:08 lukem Exp $ */
 
 /*-
  * Copyright (c) 1998, 2000, 2001 The NetBSD Foundation, Inc.
@@ -81,7 +81,7 @@
 #if 0
 static char sccsid[] = "@(#)vmstat.c   8.2 (Berkeley) 3/1/95";
 #else
-__RCSID("$NetBSD: vmstat.c,v 1.87 2001/11/26 07:40:01 lukem Exp $");
+__RCSID("$NetBSD: vmstat.c,v 1.88 2001/11/26 10:18:08 lukem Exp $");
 #endif
 #endif /* not lint */
 
@@ -219,12 +219,13 @@
 #define        HISTLIST        1<<6
 #define        HISTDUMP        1<<7
 #define        HASHSTAT        1<<8
+#define        HASHLIST        1<<9
 
 void   cpustats(void);
 void   deref_kptr(const void *, void *, size_t, const char *);
 void   dkstats(void);
 void   doevcnt(int verbose);
-void   dohashstat(int verbose);
+void   dohashstat(int, int, const char *);
 void   dointr(int verbose);
 void   domem(void);
 void   dopool(void);
@@ -258,12 +259,13 @@
        int reps;
        char errbuf[_POSIX2_LINE_MAX];
        gid_t egid = getegid();
-       const char *histname = NULL;
+       const char *histname, *hashname;
 
+       histname = hashname = NULL;
        (void)setegid(getgid());
        memf = nlistf = NULL;
        interval = reps = todo = verbose = 0;
-       while ((c = getopt(argc, argv, "c:efhilM:mN:suUvw:")) != -1) {
+       while ((c = getopt(argc, argv, "c:efh:HilLM:mN:suUvw:")) != -1) {
                switch (c) {
                case 'c':
                        reps = atoi(optarg);
@@ -275,6 +277,9 @@
                        todo |= FORKSTAT;
                        break;
                case 'h':
+                       hashname = optarg;
+                       /* FALLTHROUGH */
+               case 'H':
                        todo |= HASHSTAT;
                        break;
                case 'i':
@@ -283,6 +288,9 @@
                case 'l':
                        todo |= HISTLIST;
                        break;
+               case 'L':
+                       todo |= HASHLIST;
+                       break;
                case 'M':
                        memf = optarg;
                        break;
@@ -392,43 +400,46 @@
         */
        if ((todo & VMSTAT) == 0) {
            for (;;) {
-               if (todo & (HISTLIST|HISTDUMP)) {
-                       if ((todo & (HISTLIST|HISTDUMP)) ==
-                           (HISTLIST|HISTDUMP))
-                               errx(1, "you may list or dump, but not both!");
-                       hist_traverse(todo, histname);
+               if (todo & (HISTLIST|HISTDUMP)) {
+                       if ((todo & (HISTLIST|HISTDUMP)) ==
+                       (HISTLIST|HISTDUMP))
+                               errx(1, "you may list or dump, but not both!");
+                       hist_traverse(todo, histname);
                        putchar('\n');
-               }
-               if (todo & FORKSTAT) {
-                       doforkst();
+               }
+               if (todo & FORKSTAT) {
+                       doforkst();
+                       putchar('\n');
+               }
+               if (todo & MEMSTAT) {
+                       domem();
+                       dopool();
+                       putchar('\n');
+               }
+               if (todo & SUMSTAT) {
+                       dosum();
                        putchar('\n');
                }
-               if (todo & MEMSTAT) {
-                       domem();
-                       dopool();
-                       putchar('\n');
-               }
-               if (todo & SUMSTAT) {
-                       dosum();
+               if (todo & INTRSTAT) {
+                       dointr(verbose);
                        putchar('\n');
                }
-               if (todo & INTRSTAT) {
-                       dointr(verbose);
+               if (todo & EVCNTSTAT) {
+                       doevcnt(verbose);
                        putchar('\n');
                }
-               if (todo & EVCNTSTAT) {
-                       doevcnt(verbose);
+               if (todo & (HASHLIST|HASHSTAT)) {
+                       if ((todo & (HASHLIST|HASHSTAT)) == (HASHLIST|HASHSTAT))
+                               errx(1,
+                                   "you may list or display, but not both!");
+                       dohashstat(verbose, todo, hashname);
                        putchar('\n');
                }
-               if (todo & HASHSTAT) {
-                       dohashstat(verbose);
-                       putchar('\n');
-               }
-               
-               if (reps >= 0 && --reps <=0) 
+               
+               if (reps >= 0 && --reps <=0) 
                        break;
-               sleep(interval);
-           }
+               sleep(interval);
+       }
        } else
                dovmstat(interval, reps);
        exit(0);
@@ -1155,7 +1166,7 @@
 };
 
 void
-dohashstat(int verbose)
+dohashstat(int verbose, int todo, const char *hashname)
 { 
        LIST_HEAD(, generic)    *hashtbl_list;
        TAILQ_HEAD(, generic)   *hashtbl_tailq;
@@ -1167,12 +1178,40 @@
 
        hashbuf = NULL;
        hashbufsize = 0;
-       printf("%-16s %8s %8s %8s %8s %8s %8s\n",
-           "", "total", "used", "util", "num", "average", "maximum");
-       printf("%-16s %8s %8s %8s %8s %8s %8s\n",
-           "hash table", "buckets", "buckets", "%", "items", "chain", "chain");
+
+       if (todo & HASHLIST) {
+               const char *prefix = "";
+
+               printf("Supported hashes:\n\t");
+               for (curhash = khashes; curhash->hashsize != -1; curhash++) {
+                       printf("%s%s",
+                           prefix, namelist[curhash->hashsize].n_name + 1);
+                       prefix = ", ";
+               }
+               return;
+       }
+
+       if (hashname != NULL) {
+               for (curhash = khashes; curhash->hashsize != -1; curhash++) {
+                       if (strcmp(namelist[curhash->hashsize].n_name + 1,
+                           hashname) == 0)
+                               break;
+               }
+               if (curhash->hashsize == -1)
+                       errx(1, "%s: no such hash", hashname);
+       }
+
+       printf(
+           "%-16s %8s %8s %8s %8s %8s %8s\n"
+           "%-16s %8s %8s %8s %8s %8s %8s\n",
+           "", "total", "used", "util", "num", "average", "maximum",
+           "hash table", "buckets", "buckets", "%", "items", "chain",
+           "chain");
 
        for (curhash = khashes; curhash->hashsize != -1; curhash++) {
+               if (hashname != NULL &&
+                   strcmp(namelist[curhash->hashsize].n_name + 1, hashname))
+                       continue;
                elemsize = curhash->type == HASH_LIST ?
                    sizeof(*hashtbl_list) : sizeof(*hashtbl_tailq);
                kread(curhash->hashsize, &hashsize, sizeof(hashsize));
@@ -1404,7 +1443,7 @@
 {
 
        (void)fprintf(stderr,
-           "usage: %s [-efhilmsUv] [-u histname] [-c count] [-M core] "
-           "[-N system] [-w wait] [disks]\n", getprogname());
+           "usage: %s [-efHilmsUv] [-h hashname] [-u histname] [-c count]\n"
+           "\t\t[-M core] [-N system] [-w wait] [disks]\n", getprogname());
        exit(1);
 }



Home | Main Index | Thread Index | Old Index