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