bin/50924: "vmstat -f" says "unimplemented" but data is at hand
Ken Stailey
kstailey at yahoo.com
Sun Apr 13 21:00:29 PDT 2003
>Number: 50924
>Category: bin
>Synopsis: "vmstat -f" says "unimplemented" but data is at hand
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun Apr 13 21:00:26 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator: Ken Stailey
>Release: FreeBSD 5.0-RELEASE-p7 i386
>Organization:
Thomson Financial
>Environment:
System: FreeBSD bsdlab.tf-md.net 5.0-RELEASE-p7 FreeBSD 5.0-RELEASE-p7 #6: Mon Mar 31 12:31:18 EST 2003 kstailey at bsdlab.tf-md.net:/usr/obj/usr/src/sys/BSDLAB i386
>Description:
"vmstat -f" says it's not implimented but "vmstat -s" produces the goods.
How ironic.
>How-To-Repeat:
Run "vmstat -f" and then "vmstat -s | grep fork"
>Fix:
Index: vmstat.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/vmstat/vmstat.c,v
retrieving revision 1.59
diff -u -r1.59 vmstat.c
--- vmstat.c 2002/08/09 15:47:43 1.59
+++ vmstat.c 2003/04/14 03:46:29
@@ -101,8 +101,6 @@
#ifdef notyet
#define X_DEFICIT 10
{ "_deficit" },
-#define X_FORKSTAT 11
- { "_forkstat" },
#define X_REC 12
{ "_rectime" },
#define X_PGIN 13
@@ -149,6 +147,7 @@
static void domem(void);
static void dointr(void);
static void dosum(void);
+static void doforkst(void);
static void dovmstat(u_int, int);
static void dozmem(void);
static void kread(int, void *, size_t);
@@ -181,7 +180,7 @@
reps = atoi(optarg);
break;
case 'f':
- errx(EX_USAGE, "sorry, -f is not (re)implemented yet");
+ todo |= FORKSTAT;
break;
case 'i':
todo |= INTRSTAT;
@@ -295,10 +294,8 @@
} else if (reps)
interval = 1;
-#ifdef notyet
if (todo & FORKSTAT)
doforkst();
-#endif
if (todo & MEMSTAT)
domem();
if (todo & ZMEMSTAT)
@@ -652,19 +649,27 @@
PCT(lnchstats.ncs_long, nchtotal));
}
-#ifdef notyet
void
doforkst()
{
- struct forkstat fks;
+ struct nchstats lnchstats;
+ long nchtotal;
+
+ kread(X_SUM, &sum, sizeof(sum));
- kread(X_FORKSTAT, &fks, sizeof(struct forkstat));
(void)printf("%d forks, %d pages, average %.2f\n",
- fks.cntfork, fks.sizfork, (double)fks.sizfork / fks.cntfork);
+ sum.v_forks, sum.v_forkpages,
+ sum.v_forks == 0 ? 0 :
+ (double)sum.v_forkpages / sum.v_forks);
(void)printf("%d vforks, %d pages, average %.2f\n",
- fks.cntvfork, fks.sizvfork, (double)fks.sizvfork / fks.cntvfork);
+ sum.v_vforks, sum.v_vforkpages,
+ sum.v_vforks == 0 ? 0 :
+ (double)sum.v_vforkpages / sum.v_vforks);
+ (void)printf("%d rforks, %d pages, average %.2f\n",
+ sum.v_rforks, sum.v_rforkpages,
+ sum.v_rforks == 0 ? 0 :
+ (double)sum.v_rforkpages / sum.v_rforks);
}
-#endif
static void
devstats()
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list