Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Nov 2003 17:36:55 +0200
From:      Peter Pentchev <roam@ringlet.net>
To:        Dag-Erling Sm?rgrav <des@des.no>
Cc:        Mike Tancsa <mike@sentex.net>
Subject:   Re: interrupt statistics
Message-ID:  <20031120153655.GI300@straylight.m.ringlet.net>
In-Reply-To: <xzpznerjg2s.fsf@dwp.des.no>
References:  <xzpy8ucpwz9.fsf@dwp.des.no> <jfforv4me3snqshljprg8jejht7ias0oih@4ax.com> <20031120044945.GA44933@falcon.midgard.homeip.net> <20031120131903.GG300@straylight.m.ringlet.net> <xzpznerjg2s.fsf@dwp.des.no>

next in thread | previous in thread | raw e-mail | index | archive | help

--h3LYUU6HlUDSAOzy
Content-Type: multipart/mixed; boundary="f5QefDQHtn8hx44O"
Content-Disposition: inline


--f5QefDQHtn8hx44O
Content-Type: text/plain; charset=windows-1251
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Thu, Nov 20, 2003 at 02:59:55PM +0100, Dag-Erling Sm?rgrav wrote:
> Peter Pentchev <roam@ringlet.net> writes:
> > This is easily fixed, e.g. by the attached.  Note that I've only tested
> > the RELENG_4 patch, my 5.x machine is out of commission for the next few
> > days :(  (and no, I couldn't test it on ref5 for obvious reasons related
> > to /dev/mem ;)
>=20
> Hmm, vmstat should uses sysctls, not /dev/mem.  Perhaps you can make a
> patch for that too?  :)

Awwighty, attached is a patch that converts getuptime() and dointr() to
use sysctl, and then adds the -a option to display all interrupts.
This one was tested on both RELENG_4 and HEAD (ref5) :)

G'luck,
Peter

--=20
Peter Pentchev	roam@ringlet.net    roam@sbnd.net    roam@FreeBSD.org
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint	FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
This would easier understand fewer had omitted.

--f5QefDQHtn8hx44O
Content-Type: text/plain; charset=windows-1251
Content-Disposition: attachment; filename="vmstat-sysctl-intr-HEAD.patch"
Content-Transfer-Encoding: quoted-printable

? src/usr.bin/vmstat/.depend
? src/usr.bin/vmstat/vmstat
? src/usr.bin/vmstat/vmstat.8.gz
Index: src/usr.bin/vmstat/Makefile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/usr.bin/vmstat/Makefile,v
retrieving revision 1.9
diff -u -r1.9 Makefile
--- src/usr.bin/vmstat/Makefile	8 Feb 2002 23:07:36 -0000	1.9
+++ src/usr.bin/vmstat/Makefile	20 Nov 2003 15:33:37 -0000
@@ -3,6 +3,7 @@
=20
 PROG=3D	vmstat
 MAN=3D	vmstat.8
+CFLAGS+=3D-DVMSTAT_SYSCTL
 BINGRP=3D	kmem
 BINMODE=3D2555
 DPADD=3D	${LIBKVM} ${LIBDEVSTAT}
Index: src/usr.bin/vmstat/vmstat.8
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/usr.bin/vmstat/vmstat.8,v
retrieving revision 1.25
diff -u -r1.25 vmstat.8
--- src/usr.bin/vmstat/vmstat.8	14 Apr 2003 07:22:25 -0000	1.25
+++ src/usr.bin/vmstat/vmstat.8	20 Nov 2003 15:33:37 -0000
@@ -41,7 +41,7 @@
 .Sh SYNOPSIS
 .Nm
 .\" .Op Fl fimst
-.Op Fl fimsz
+.Op Fl afimsz
 .Op Fl c Ar count
 .Op Fl M Ar core
 .Op Fl N Ar system
@@ -62,6 +62,10 @@
 .Pp
 The options are as follows:
 .Bl -tag -width indent
+.It Fl a
+When used with
+.Fl i ,
+include statistics about interrupts that have never been generated.
 .It Fl c
 Repeat the display
 .Ar count
Index: src/usr.bin/vmstat/vmstat.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/usr.bin/vmstat/vmstat.c,v
retrieving revision 1.69
diff -u -r1.69 vmstat.c
--- src/usr.bin/vmstat/vmstat.c	9 Nov 2003 20:39:56 -0000	1.69
+++ src/usr.bin/vmstat/vmstat.c	20 Nov 2003 15:33:37 -0000
@@ -129,6 +129,7 @@
 struct	vmmeter sum, osum;
=20
 int	winlines =3D 20;
+int	aflag =3D 0;
 int	nflag =3D 0;
=20
 kvm_t *kd;
@@ -174,8 +175,11 @@
 	memf =3D nlistf =3D NULL;
 	interval =3D reps =3D todo =3D 0;
 	maxshowdevs =3D 2;
-	while ((c =3D getopt(argc, argv, "c:fiM:mN:n:p:stw:z")) !=3D -1) {
+	while ((c =3D getopt(argc, argv, "ac:fiM:mN:n:p:stw:z")) !=3D -1) {
 		switch (c) {
+		case 'a':
+			aflag++;
+			break;
 		case 'c':
 			reps =3D atoi(optarg);
 			break;
@@ -239,24 +243,26 @@
 	if (nlistf !=3D NULL || memf !=3D NULL)
 		setgid(getgid());
=20
-	kd =3D kvm_openfiles(nlistf, memf, NULL, O_RDONLY, errbuf);
-	if (kd =3D=3D 0)=20
-		errx(1, "kvm_openfiles: %s", errbuf);
-	setgid(getgid());
-
-	if ((c =3D kvm_nlist(kd, namelist)) !=3D 0) {
-		if (c > 0) {
-			warnx("undefined symbols:");
-			for (c =3D 0;
-			    c < (int)(sizeof(namelist)/sizeof(namelist[0]));
-			    c++)
-				if (namelist[c].n_type =3D=3D 0)
-					(void)fprintf(stderr, " %s",
-					    namelist[c].n_name);
-			(void)fputc('\n', stderr);
-		} else
-			warnx("kvm_nlist: %s", kvm_geterr(kd));
-		exit(1);
+	if (todo & ~INTRSTAT) {
+		kd =3D kvm_openfiles(nlistf, memf, NULL, O_RDONLY, errbuf);
+		if (kd =3D=3D 0)=20
+			errx(1, "kvm_openfiles: %s", errbuf);
+		setgid(getgid());
+	=09
+		if ((c =3D kvm_nlist(kd, namelist)) !=3D 0) {
+			if (c > 0) {
+				warnx("undefined symbols:");
+				for (c =3D 0;
+		    		    c < (int)(sizeof(namelist)/sizeof(namelist[0]));
+				    c++)
+					if (namelist[c].n_type =3D=3D 0)
+						(void)fprintf(stderr, " %s",
+						    namelist[c].n_name);
+				(void)fputc('\n', stderr);
+			} else
+				warnx("kvm_nlist: %s", kvm_geterr(kd));
+			exit(1);
+		}
 	}
=20
 	if (todo & VMSTAT) {
@@ -386,8 +392,26 @@
 	static time_t now;
 	time_t uptime;
=20
-	if (boottime.tv_sec =3D=3D 0)
+	if (boottime.tv_sec =3D=3D 0) {
+#ifdef VMSTAT_SYSCTL
+		int mib[2] =3D { CTL_KERN, KERN_BOOTTIME };
+		char *value;
+		size_t size;
+
+		if (sysctl(mib, 2, NULL, &size, NULL, NULL) =3D=3D -1)
+			err(1, "sysctl(kern.boottime)");
+		if (size < sizeof(boottime))
+			errx(1, "sizeof(kern.boottime) < sizeof(timeval)");
+		value =3D malloc(size);
+		if (value =3D=3D NULL)
+			errx(1, "malloc");
+		if (sysctl(mib, 2, value, &size, NULL, NULL) =3D=3D -1)
+			err(1, "sysctl(kern.boottime)");
+		memcpy(&boottime, value, sizeof(boottime));
+#else  /* VMSTAT_SYSCTL */
 		kread(X_BOOTTIME, &boottime, sizeof(boottime));
+#endif /* VMSTAT_SYSCTL */
+	}
 	(void)time(&now);
 	uptime =3D now - boottime.tv_sec;
 	if (uptime <=3D 0 || uptime > 60*60*24*365*10)
@@ -732,9 +756,42 @@
 	int i, istrnamlen;
 	size_t clen;
 	char *intrname, *tintrname;
+#ifdef VMSTAT_SYSCTL
+	int *mibcnt, *mibname;
+	size_t mibcntsize, mibnamesize;
+#endif /* VMSTAT_SYSCTL */
=20
 	uptime =3D getuptime();
-	nintr =3D namelist[X_EINTRCNT].n_value - namelist[X_INTRCNT].n_value;
+#ifdef VMSTAT_SYSCTL
+	/* Fetch the sysctl MIB's */
+	if (sysctlnametomib("hw.intrcnt", NULL, &mibcntsize) =3D=3D -1)
+		err(1, "fetching the MIB for the hw.intrcnt sysctl");
+	mibcnt =3D malloc(mibcntsize * sizeof(int));
+	if (mibcnt =3D=3D NULL)
+		errx(1, "malloc");
+	if (sysctlnametomib("hw.intrcnt", mibcnt, &mibcntsize) =3D=3D -1)
+		err(1, "fetching the MIB for the hw.intrcnt sysctl");
+	if (sysctlnametomib("hw.intrnames", NULL, &mibnamesize) =3D=3D -1)
+		err(1, "fetching the MIB for the hw.intrnames sysctl");
+	mibname =3D malloc(mibnamesize * sizeof(int));
+	if (mibname =3D=3D NULL)
+		errx(1, "malloc");
+	if (sysctlnametomib("hw.intrnames", mibname, &mibnamesize) =3D=3D -1)
+		err(1, "fetching the MIB for the hw.intrnames sysctl");
+
+	/* Fetch the arrays themselves */
+	if (sysctl(mibcnt, mibcntsize, NULL, &nintr, NULL, NULL) =3D=3D -1)
+		err(1, "sysctl(hw.intrcnt)");
+	intrcnt =3D malloc((size_t)nintr);
+	if (sysctl(mibcnt, mibcntsize, intrcnt, &nintr, NULL, NULL) =3D=3D -1)
+		err(1, "sysctl(hw.intrcnt)");
+	if (sysctl(mibname, mibnamesize, NULL, &inamlen, NULL, NULL) =3D=3D -1)
+		err(1, "sysctl(hw.intrnames)");
+	intrname =3D malloc((size_t)inamlen);
+	if (sysctl(mibname, mibnamesize, intrname, &inamlen, NULL, NULL) =3D=3D -=
1)
+		err(1, "sysctl(hw.intrnames)");
+#else  /* VMSTAT_SYSCTL */
+	intr =3D namelist[X_EINTRCNT].n_value - namelist[X_INTRCNT].n_value;
 	inamlen =3D
 	    namelist[X_EINTRNAMES].n_value - namelist[X_INTRNAMES].n_value;
 	intrcnt =3D malloc((size_t)nintr);
@@ -743,6 +800,7 @@
 		errx(1, "malloc");
 	kread(X_INTRCNT, intrcnt, (size_t)nintr);
 	kread(X_INTRNAMES, intrname, (size_t)inamlen);
+#endif /* VMSTAT_SYSCTL */
 	nintr /=3D sizeof(u_long);
 	tintrname =3D intrname;
 	istrnamlen =3D strlen("interrupt");
@@ -756,7 +814,7 @@
 	    "rate");
 	inttotal =3D 0;
 	while (--nintr >=3D 0) {
-		if (*intrcnt)
+		if (*intrcnt || (aflag && intrname[0]))
 			(void)printf("%-*s %20lu %10lu\n", istrnamlen, intrname,
 			    *intrcnt, *intrcnt / uptime);
 		intrname +=3D strlen(intrname) + 1;
@@ -829,7 +887,7 @@
 usage()
 {
 	(void)fprintf(stderr, "%s%s",
-		"usage: vmstat [-imsz] [-c count] [-M core] [-N system] [-w wait]\n",
+		"usage: vmstat [-aimsz] [-c count] [-M core] [-N system] [-w wait]\n",
 		"              [-n devs] [disks]\n");
 	exit(1);
 }

--f5QefDQHtn8hx44O
Content-Type: text/plain; charset=windows-1251
Content-Disposition: attachment; filename="vmstat-sysctl-intr-RELENG_4.patch"
Content-Transfer-Encoding: quoted-printable

Index: src/usr.bin/vmstat/Makefile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/usr.bin/vmstat/Makefile,v
retrieving revision 1.5.6.1
diff -u -r1.5.6.1 Makefile
--- src/usr.bin/vmstat/Makefile	25 Apr 2001 11:29:44 -0000	1.5.6.1
+++ src/usr.bin/vmstat/Makefile	20 Nov 2003 15:07:45 -0000
@@ -3,6 +3,7 @@
=20
 PROG=3D	vmstat
 MAN=3D	vmstat.8
+CFLAGS+=3D-DVMSTAT_SYSCTL
 CFLAGS+=3D-I${.CURDIR}/../../sys
 BINGRP=3D	kmem
 BINMODE=3D2555
Index: src/usr.bin/vmstat/vmstat.8
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/usr.bin/vmstat/vmstat.8,v
retrieving revision 1.16.2.5
diff -u -r1.16.2.5 vmstat.8
--- src/usr.bin/vmstat/vmstat.8	16 Aug 2001 13:17:13 -0000	1.16.2.5
+++ src/usr.bin/vmstat/vmstat.8	20 Nov 2003 12:21:23 -0000
@@ -41,7 +41,7 @@
 .Sh SYNOPSIS
 .Nm
 .\" .Op Fl fimst
-.Op Fl imsz
+.Op Fl aimsz
 .Op Fl c Ar count
 .Op Fl M Ar core
 .Op Fl N Ar system
@@ -61,6 +61,10 @@
 .Pp
 The options are as follows:
 .Bl -tag -width indent
+.It Fl a
+When used with
+.Fl i ,
+include statistics about interrupts that have never been generated.
 .It Fl c
 Repeat the display
 .Ar count
Index: src/usr.bin/vmstat/vmstat.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /home/ncvs/src/usr.bin/vmstat/vmstat.c,v
retrieving revision 1.38.2.5
diff -u -r1.38.2.5 vmstat.c
--- src/usr.bin/vmstat/vmstat.c	20 Sep 2003 19:10:01 -0000	1.38.2.5
+++ src/usr.bin/vmstat/vmstat.c	20 Nov 2003 15:16:01 -0000
@@ -135,6 +135,7 @@
 struct	vmmeter sum, osum;
=20
 int	winlines =3D 20;
+int	aflag =3D 0;
 int	nflag =3D 0;
=20
 kvm_t *kd;
@@ -169,8 +170,11 @@
 	memf =3D nlistf =3D NULL;
 	interval =3D reps =3D todo =3D 0;
 	maxshowdevs =3D 2;
-	while ((c =3D getopt(argc, argv, "c:fiM:mN:n:p:stw:z")) !=3D -1) {
+	while ((c =3D getopt(argc, argv, "ac:fiM:mN:n:p:stw:z")) !=3D -1) {
 		switch (c) {
+		case 'a':
+			aflag++;
+			break;
 		case 'c':
 			reps =3D atoi(optarg);
 			break;
@@ -238,22 +242,25 @@
 	if (nlistf !=3D NULL || memf !=3D NULL)
 		setgid(getgid());
=20
-	kd =3D kvm_openfiles(nlistf, memf, NULL, O_RDONLY, errbuf);
-	if (kd =3D=3D 0)=20
-		errx(1, "kvm_openfiles: %s", errbuf);
-
-	if ((c =3D kvm_nlist(kd, namelist)) !=3D 0) {
-		if (c > 0) {
-			warnx("undefined symbols:");
-			for (c =3D 0;
-			    c < sizeof(namelist)/sizeof(namelist[0]); c++)
-				if (namelist[c].n_type =3D=3D 0)
-					fprintf(stderr, " %s",
-					    namelist[c].n_name);
-			(void)fputc('\n', stderr);
-		} else
-			warnx("kvm_nlist: %s", kvm_geterr(kd));
-		exit(1);
+	if (todo & ~INTRSTAT) {
+		kd =3D kvm_openfiles(nlistf, memf, NULL, O_RDONLY, errbuf);
+		if (kd =3D=3D 0)=20
+			errx(1, "kvm_openfiles: %s", errbuf);
+	=09
+		if ((c =3D kvm_nlist(kd, namelist)) !=3D 0) {
+			if (c > 0) {
+				warnx("undefined symbols:");
+				for (c =3D 0;
+		    		    c < sizeof(namelist)/sizeof(namelist[0]);
+				    c++)
+					if (namelist[c].n_type =3D=3D 0)
+						fprintf(stderr, " %s",
+		    				    namelist[c].n_name);
+				(void)fputc('\n', stderr);
+			} else
+				warnx("kvm_nlist: %s", kvm_geterr(kd));
+				exit(1);
+		}
 	}
=20
 	if (todo & VMSTAT) {
@@ -385,8 +392,26 @@
 	static time_t now, boottime;
 	time_t uptime;
=20
-	if (boottime =3D=3D 0)
+	if (boottime =3D=3D 0) {
+#ifdef VMSTAT_SYSCTL
+		int mib[2] =3D { CTL_KERN, KERN_BOOTTIME };
+		char *value;
+		size_t size;
+
+		if (sysctl(mib, 2, NULL, &size, NULL, NULL) =3D=3D -1)
+			err(1, "sysctl(kern.boottime)");
+		if (size < sizeof(boottime))
+			errx(1, "sizeof(kern.boottime) < sizeof(time_t)");
+		value =3D malloc(size);
+		if (value =3D=3D NULL)
+			errx(1, "malloc");
+		if (sysctl(mib, 2, value, &size, NULL, NULL) =3D=3D -1)
+			err(1, "sysctl(kern.boottime)");
+		memcpy(&boottime, value, sizeof(boottime));
+#else  /* VMSTAT_SYSCTL */
 		kread(X_BOOTTIME, &boottime, sizeof(boottime));
+#endif /* VMSTAT_SYSCTL */
+	}
 	(void)time(&now);
 	uptime =3D now - boottime;
 	if (uptime <=3D 0 || uptime > 60*60*24*365*10)
@@ -722,10 +747,43 @@
 {
 	register u_long *intrcnt, uptime;
 	register u_int64_t inttotal;
-	register int nintr, inamlen;
+	int nintr, inamlen;
 	register char *intrname;
+#ifdef VMSTAT_SYSCTL
+	int *mibcnt, *mibname;
+	size_t mibcntsize, mibnamesize;
+#endif /* VMSTAT_SYSCTL */
=20
 	uptime =3D getuptime();
+#ifdef VMSTAT_SYSCTL
+	/* Fetch the sysctl MIB's */
+	if (sysctlnametomib("hw.intrcnt", NULL, &mibcntsize) =3D=3D -1)
+		err(1, "fetching the MIB for the hw.intrcnt sysctl");
+	mibcnt =3D malloc(mibcntsize * sizeof(int));
+	if (mibcnt =3D=3D NULL)
+		errx(1, "malloc");
+	if (sysctlnametomib("hw.intrcnt", mibcnt, &mibcntsize) =3D=3D -1)
+		err(1, "fetching the MIB for the hw.intrcnt sysctl");
+	if (sysctlnametomib("hw.intrnames", NULL, &mibnamesize) =3D=3D -1)
+		err(1, "fetching the MIB for the hw.intrnames sysctl");
+	mibname =3D malloc(mibnamesize * sizeof(int));
+	if (mibname =3D=3D NULL)
+		errx(1, "malloc");
+	if (sysctlnametomib("hw.intrnames", mibname, &mibnamesize) =3D=3D -1)
+		err(1, "fetching the MIB for the hw.intrnames sysctl");
+
+	/* Fetch the arrays themselves */
+	if (sysctl(mibcnt, mibcntsize, NULL, &nintr, NULL, NULL) =3D=3D -1)
+		err(1, "sysctl(hw.intrcnt)");
+	intrcnt =3D malloc((size_t)nintr);
+	if (sysctl(mibcnt, mibcntsize, intrcnt, &nintr, NULL, NULL) =3D=3D -1)
+		err(1, "sysctl(hw.intrcnt)");
+	if (sysctl(mibname, mibnamesize, NULL, &inamlen, NULL, NULL) =3D=3D -1)
+		err(1, "sysctl(hw.intrnames)");
+	intrname =3D malloc((size_t)inamlen);
+	if (sysctl(mibname, mibnamesize, intrname, &inamlen, NULL, NULL) =3D=3D -=
1)
+		err(1, "sysctl(hw.intrnames)");
+#else  /* VMSTAT_SYSCTL */
 	nintr =3D namelist[X_EINTRCNT].n_value - namelist[X_INTRCNT].n_value;
 	inamlen =3D
 	    namelist[X_EINTRNAMES].n_value - namelist[X_INTRNAMES].n_value;
@@ -735,11 +793,12 @@
 		errx(1, "malloc");
 	kread(X_INTRCNT, intrcnt, (size_t)nintr);
 	kread(X_INTRNAMES, intrname, (size_t)inamlen);
+#endif /* VMSTAT_SYSCTL */
 	(void)printf("interrupt                   total       rate\n");
 	inttotal =3D 0;
 	nintr /=3D sizeof(long);
 	while (--nintr >=3D 0) {
-		if (*intrcnt)
+		if (*intrcnt || (aflag && intrname[0]))
 			(void)printf("%-12s %20lu %10lu\n", intrname,
 			    *intrcnt, *intrcnt / uptime);
 		intrname +=3D strlen(intrname) + 1;
@@ -917,7 +976,7 @@
 usage()
 {
 	(void)fprintf(stderr, "%s%s",
-		"usage: vmstat [-imsz] [-c count] [-M core] [-N system] [-w wait]\n",
+		"usage: vmstat [-aimsz] [-c count] [-M core] [-N system] [-w wait]\n",
 		"              [-n devs] [disks]\n");
 	exit(1);
 }

--f5QefDQHtn8hx44O--

--h3LYUU6HlUDSAOzy
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (FreeBSD)

iD8DBQE/vN+X7Ri2jRYZRVMRAk3gAJ99iCMqz1wC5BT6+MYi2o170klTHgCfTtNI
zdHQBoYAClDMTR11tz5o/6c=
=ATcu
-----END PGP SIGNATURE-----

--h3LYUU6HlUDSAOzy--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031120153655.GI300>