From owner-freebsd-current@FreeBSD.ORG Sun Mar 20 12:23:48 2005 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 78C8A16A4CE; Sun, 20 Mar 2005 12:23:48 +0000 (GMT) Received: from aiolos.otenet.gr (aiolos.otenet.gr [195.170.0.23]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4DAED43D1D; Sun, 20 Mar 2005 12:23:45 +0000 (GMT) (envelope-from keramida@freebsd.org) Received: from gothmog.gr (patr530-a222.otenet.gr [212.205.215.222]) j2KCN5V8014172; Sun, 20 Mar 2005 14:23:08 +0200 Received: from gothmog.gr (gothmog [127.0.0.1]) by gothmog.gr (8.13.3/8.13.3) with ESMTP id j2KCNFT3012120; Sun, 20 Mar 2005 14:23:34 +0200 (EET) (envelope-from keramida@freebsd.org) Received: (from giorgos@localhost) by gothmog.gr (8.13.3/8.13.3/Submit) id j2K8B4Q7064507; Sun, 20 Mar 2005 10:11:04 +0200 (EET) (envelope-from keramida@freebsd.org) Date: Sun, 20 Mar 2005 10:11:04 +0200 From: Giorgos Keramidas To: Brooks Davis , Pawel Jakub Dawidek Message-ID: <20050320081104.GA64458@gothmog.gr> References: <20050106191201.GA30826@gothmog.gr> <20050106195719.GB24896@odin.ac.hmc.edu> <20050106225857.GB784@darkness.comp.waw.pl> <20050106191201.GA30826@gothmog.gr> <20050106195719.GB24896@odin.ac.hmc.edu> <20050106195950.GA34916@gothmog.gr> <20050106200718.GD24896@odin.ac.hmc.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050106225857.GB784@darkness.comp.waw.pl> <20050106200718.GD24896@odin.ac.hmc.edu> cc: freebsd-current@freebsd.org Subject: Re: human-readable swap partition sizes with pstat -sh X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 Mar 2005 12:23:48 -0000 Following up to an old thread, which seem to have stall when I got busier with other things... Sorry for the delay, guys :-| On 2005-01-06 12:07, Brooks Davis wrote: >>>> gothmog:/d/src/usr.sbin/pstat$ ./pstat -sh >>>> Device 1K-blocks Used Avail Capacity >>>> /dev/ad1s1b 5120000 12K 4.9G 0% >>> >>> Look good in general. Does -kh make sense? I think so since it would >>> force the blocks line, but I'm not 100% sure. [...] >>> On minor, mostly style nit is that while intmax_t is 64-bits, nothing >>> requires that so you should probably have conver return an int64_t. > > The CONVERT macro used to case to (int). You removed that cast which > works because humanize_number takes an int64_t and intmax_t is the same > as int64_t on all architectures. I see that humanize_number still expects an int64_t. On 2005-01-06 23:58, Pawel Jakub Dawidek wrote: > I like intmax_t also much better than int64_t, but I took it from > NetBSD and they got int64_t there. Anyway, I think we don't have to be > 100% compatible here and I'll look what can be done. Bearing this in mind, is it ok then if I commit the pstat changes shown below, which use intmax_t or is it better to change all the intmax_t instances in pstat.c to int64_t? %%% Index: Makefile =================================================================== RCS file: /home/ncvs/src/usr.sbin/pstat/Makefile,v retrieving revision 1.12 diff -u -r1.12 Makefile --- Makefile 4 Apr 2003 17:49:17 -0000 1.12 +++ Makefile 23 Oct 2004 20:44:14 -0000 @@ -8,7 +8,7 @@ WARNS?= 2 -DPADD= ${LIBKVM} -LDADD= -lkvm +DPADD= ${LIBKVM} ${LIBUTIL} +LDADD= -lkvm -lutil .include Index: pstat.8 =================================================================== RCS file: /home/ncvs/src/usr.sbin/pstat/pstat.8,v retrieving revision 1.46 diff -u -r1.46 pstat.8 --- pstat.8 18 Jan 2005 20:02:41 -0000 1.46 +++ pstat.8 29 Jan 2005 02:03:05 -0000 @@ -35,7 +35,7 @@ .\" @(#)pstat.8 8.5 (Berkeley) 5/13/94 .\" $FreeBSD: src/usr.sbin/pstat/pstat.8,v 1.46 2005/01/18 20:02:41 ru Exp $ .\" -.Dd May 23, 2002 +.Dd October 23, 2004 .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 @@ .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 Index: pstat.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/pstat/pstat.c,v retrieving revision 1.92 diff -u -r1.92 pstat.c --- pstat.c 27 Nov 2004 06:51:39 -0000 1.92 +++ pstat.c 6 Dec 2004 04:02:35 -0000 @@ -65,6 +65,7 @@ #include #include #include +#include #include #include #include @@ -87,6 +88,7 @@ { "" } }; +static int humanflag; static int usenumflag; static int totalflag; static int swapflag; @@ -120,11 +122,11 @@ 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 @@ case 'f': fileflag = 1; break; + case 'h': + humanflag = 1; + break; case 'k': putenv("BLOCKSIZE=1K"); break; @@ -469,7 +474,7 @@ * by Kevin Lahey . */ -#define CONVERT(v) ((int)((intmax_t)(v) * pagesize / blocksize)) +#define CONVERT(v) ((intmax_t)(v) * pagesize / blocksize) static struct kvm_swap swtot; static int nswdev; @@ -488,25 +493,43 @@ } 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", CONVERT(bused), + 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 @@ 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); } } %%%