From 87827d7ae67f8d6153ac6a42a2f9b2d901eb3474 Mon Sep 17 00:00:00 2001 From: keramida Date: Mon, 21 Mar 2005 16:36:05 +0000 Subject: - Add a -h flag to pstat to print swap sizes in "human readable" format, with humanize_number(3). - Move the common parts of the code that prints the sizes for a single swap device and the total to a single function to avoid repeating the humanize_number() stuff all over the place. - Change the type of CONVERT() from intmax_t to int64_t, since this makes calling humanize_number() easier but cast the values to intmax_t before printing them, to make use of the %jd format that printf() supports. - Document the new -h flag in the manpage and bump its date. Approved by: pjd Useful tips: brooks MFC after: 2 weeks --- usr.sbin/pstat/Makefile | 4 ++-- usr.sbin/pstat/pstat.8 | 11 ++++++--- usr.sbin/pstat/pstat.c | 59 +++++++++++++++++++++++++++++++++---------------- 3 files changed, 50 insertions(+), 24 deletions(-) (limited to 'usr.sbin/pstat') diff --git a/usr.sbin/pstat/Makefile b/usr.sbin/pstat/Makefile index 9d1dffe..2431224 100644 --- a/usr.sbin/pstat/Makefile +++ b/usr.sbin/pstat/Makefile @@ -8,7 +8,7 @@ MLINKS= pstat.8 swapinfo.8 WARNS?= 2 -DPADD= ${LIBKVM} -LDADD= -lkvm +DPADD= ${LIBKVM} ${LIBUTIL} +LDADD= -lkvm -lutil .include diff --git a/usr.sbin/pstat/pstat.8 b/usr.sbin/pstat/pstat.8 index 7fd8b50..9aec51b 100644 --- a/usr.sbin/pstat/pstat.8 +++ b/usr.sbin/pstat/pstat.8 @@ -35,7 +35,7 @@ .\" @(#)pstat.8 8.5 (Berkeley) 5/13/94 .\" $FreeBSD$ .\" -.Dd May 23, 2002 +.Dd March 21, 2005 .Dt PSTAT 8 .Os .Sh NAME @@ -44,10 +44,10 @@ .Nd display system data structures .Sh SYNOPSIS .Nm -.Op Fl Tfknst +.Op Fl Tfhknst .Op Fl M Ar core Op Fl N Ar system .Nm swapinfo -.Op Fl k +.Op Fl hk .Op Fl M Ar core Op Fl N Ar system .Sh DESCRIPTION The @@ -77,6 +77,11 @@ The following options are available: .Bl -tag -width indent .It Fl n Print devices out by major/minor instead of name. +.It Fl h +.Dq Human-readable +output. +Use unit suffixes when printing swap partition sizes: +Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte. .It Fl k Print sizes in kilobytes, regardless of the setting of the .Ev BLOCKSIZE diff --git a/usr.sbin/pstat/pstat.c b/usr.sbin/pstat/pstat.c index 9e22a3a..7a721a3 100644 --- a/usr.sbin/pstat/pstat.c +++ b/usr.sbin/pstat/pstat.c @@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -87,6 +88,7 @@ static struct nlist nl[] = { { "" } }; +static int humanflag; static int usenumflag; static int totalflag; static int swapflag; @@ -120,11 +122,11 @@ main(int argc, char *argv[]) opts = argv[0]; if (!strcmp(opts, "swapinfo")) { swapflag = 1; - opts = "kM:N:"; - usagestr = "swapinfo [-k] [-M core [-N system]]"; + opts = "hkM:N:"; + usagestr = "swapinfo [-hk] [-M core [-N system]]"; } else { - opts = "TM:N:fknst"; - usagestr = "pstat [-Tfknst] [-M core [-N system]]"; + opts = "TM:N:hfknst"; + usagestr = "pstat [-Tfhknst] [-M core [-N system]]"; } while ((ch = getopt(argc, argv, opts)) != -1) @@ -132,6 +134,9 @@ main(int argc, char *argv[]) case 'f': fileflag = 1; break; + case 'h': + humanflag = 1; + break; case 'k': putenv("BLOCKSIZE=1K"); break; @@ -469,7 +474,7 @@ getfiles(char **abuf, size_t *alen) * by Kevin Lahey . */ -#define CONVERT(v) ((int)((intmax_t)(v) * pagesize / blocksize)) +#define CONVERT(v) ((int64_t)(v) * pagesize / blocksize) static struct kvm_swap swtot; static int nswdev; @@ -488,25 +493,43 @@ print_swap_header(void) } static void -print_swap(struct kvm_swap *ksw) +print_swap_line(const char *devname, intmax_t nblks, intmax_t bused, + intmax_t bavail, float bpercent) { + char usedbuf[5]; + char availbuf[5]; int hlen, pagesize; long blocksize; pagesize = getpagesize(); getbsize(&hlen, &blocksize); + + printf("%-15s %*jd ", devname, hlen, CONVERT(nblks)); + if (humanflag) { + humanize_number(usedbuf, sizeof(usedbuf), + CONVERT(blocksize * bused), "", + HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL); + humanize_number(availbuf, sizeof(availbuf), + CONVERT(blocksize * bavail), "", + HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL); + printf("%8s %8s %5.0f%%\n", usedbuf, availbuf, bpercent); + } else { + printf("%8jd %8jd %5.0f%%\n", (intmax_t)CONVERT(bused), + (intmax_t)CONVERT(bavail), bpercent); + } +} + +static void +print_swap(struct kvm_swap *ksw) +{ + swtot.ksw_total += ksw->ksw_total; swtot.ksw_used += ksw->ksw_used; ++nswdev; - if (totalflag == 0) { - (void)printf("%-15s %*d ", - ksw->ksw_devname, hlen, - CONVERT(ksw->ksw_total)); - (void)printf("%8d %8d %5.0f%%\n", - CONVERT(ksw->ksw_used), - CONVERT(ksw->ksw_total - ksw->ksw_used), + if (totalflag == 0) + print_swap_line(ksw->ksw_devname, ksw->ksw_total, + ksw->ksw_used, ksw->ksw_total, (ksw->ksw_used * 100.0) / ksw->ksw_total); - } } static void @@ -519,13 +542,11 @@ print_swap_total(void) getbsize(&hlen, &blocksize); if (totalflag) { blocksize = 1024 * 1024; - (void)printf("%dM/%dM swap space\n", + (void)printf("%jdM/%jdM swap space\n", CONVERT(swtot.ksw_used), CONVERT(swtot.ksw_total)); } else if (nswdev > 1) { - (void)printf("%-15s %*d %8d %8d %5.0f%%\n", - "Total", hlen, CONVERT(swtot.ksw_total), - CONVERT(swtot.ksw_used), - CONVERT(swtot.ksw_total - swtot.ksw_used), + print_swap_line("Total", swtot.ksw_total, swtot.ksw_used, + swtot.ksw_total - swtot.ksw_used, (swtot.ksw_used * 100.0) / swtot.ksw_total); } } -- cgit v1.1