Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 26 Nov 2016 20:47:11 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r309197 - head/usr.bin/nfsstat
Message-ID:  <201611262047.uAQKlBb1095403@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Sat Nov 26 20:47:11 2016
New Revision: 309197
URL: https://svnweb.freebsd.org/changeset/base/309197

Log:
  Add a -E flag to nfsstat.c so that it prints out the NFSv4.1
  procedure/operation counts.
  It also avoids clipping the counts at 9 digits.
  
  Reviewed by:	bcr (doc parts)
  MFC after:	2 weeks
  Differential Revision:	https://reviews.freebsd.org/D8626

Modified:
  head/usr.bin/nfsstat/nfsstat.c

Modified: head/usr.bin/nfsstat/nfsstat.c
==============================================================================
--- head/usr.bin/nfsstat/nfsstat.c	Sat Nov 26 20:26:29 2016	(r309196)
+++ head/usr.bin/nfsstat/nfsstat.c	Sat Nov 26 20:47:11 2016	(r309197)
@@ -113,6 +113,7 @@ static void usage(void);
 static char *sperc1(int, int);
 static char *sperc2(int, int);
 static void exp_intpr(int, int);
+static void exp41_intpr(int, int);
 static void exp_sidewaysintpr(u_int, int, int, int);
 static void compute_new_stats(struct nfsstatsv1 *cur_stats,
     struct nfsstatsv1 *prev_stats, int curop, long double etime,
@@ -155,7 +156,7 @@ main(int argc, char **argv)
 
 	interval = 0;
 	memf = nlistf = NULL;
-	while ((ch = getopt(argc, argv, "cdesWM:mN:w:z")) != -1)
+	while ((ch = getopt(argc, argv, "cdEesWM:mN:w:z")) != -1)
 		switch(ch) {
 		case 'M':
 			memf = optarg;
@@ -208,7 +209,14 @@ main(int argc, char **argv)
 		case 'z':
 			zflag = 1;
 			break;
+		case 'E':
+			if (extra_output != 0)
+				errx(1, "-e and -E are mutually exclusive");
+			extra_output = 2;
+			break;
 		case 'e':
+			if (extra_output != 0)
+				errx(1, "-e and -E are mutually exclusive");
 			extra_output = 1;
 			break;
 		case '?':
@@ -236,7 +244,9 @@ main(int argc, char **argv)
 		exp_sidewaysintpr(interval, clientOnly, serverOnly,
 		    newStats);
 	} else {
-		if (extra_output != 0)
+		if (extra_output == 2)
+			exp41_intpr(clientOnly, serverOnly);
+		else if (extra_output == 1)
 			exp_intpr(clientOnly, serverOnly);
 		else
 			intpr(clientOnly, serverOnly);
@@ -795,6 +805,362 @@ exp_intpr(int clientOnly, int serverOnly
 	}
 }
 
+/*
+ * Print a description of the nfs stats for the client/server,
+ * including NFSv4.1.
+ */
+static void
+exp41_intpr(int clientOnly, int serverOnly)
+{
+	int nfssvc_flag;
+
+	nfssvc_flag = NFSSVC_GETSTATS | NFSSVC_NEWSTRUCT;
+	if (zflag != 0) {
+		if (clientOnly != 0)
+			nfssvc_flag |= NFSSVC_ZEROCLTSTATS;
+		if (serverOnly != 0)
+			nfssvc_flag |= NFSSVC_ZEROSRVSTATS;
+	}
+	ext_nfsstats.vers = NFSSTATS_V1;
+	if (nfssvc(nfssvc_flag, &ext_nfsstats) < 0)
+		err(1, "Can't get stats");
+	if (clientOnly != 0) {
+		if (printtitle) {
+			printf("Client Info:\n");
+			printf("RPC Counts:\n");
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Getattr", "Setattr", "Lookup", "Readlink", "Read",
+			    "Write");
+		}
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_GETATTR],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_SETATTR],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_LOOKUP],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_READLINK],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_READ],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_WRITE]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Create", "Remove", "Rename", "Link", "Symlink",
+			    "Mkdir");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_CREATE],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_REMOVE],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_RENAME],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_LINK],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_SYMLINK],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_MKDIR]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Rmdir", "Readdir", "RdirPlus", "Access", "Mknod",
+			    "Fsstat");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_RMDIR],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_READDIR],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_READDIRPLUS],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_ACCESS],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_MKNOD],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_FSSTAT]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Fsinfo", "PathConf", "Commit", "SetClId",
+			    "SetClIdCf", "Lock");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_FSINFO],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_PATHCONF],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_COMMIT],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_SETCLIENTID],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_SETCLIENTIDCFRM],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_LOCK]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "LockT", "LockU", "Open", "OpenCfr", "OpenDownGr",
+			    "Close");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_LOCKT],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_LOCKU],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_OPEN],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_OPENCONFIRM],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_OPENDOWNGRADE],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_CLOSE]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "RelLckOwn", "FreeStateID", "PutRootFH", "DelegRet",
+			    "GetACL", "SetACL");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_RELEASELCKOWN],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_FREESTATEID],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_PUTROOTFH],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_DELEGRETURN],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_GETACL],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_SETACL]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "ExchangeID", "CreateSess", "DestroySess",
+			    "DestroyClId", "LayoutGet", "GetDevInfo");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_EXCHANGEID],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_CREATESESSION],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_DESTROYSESSION],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_DESTROYCLIENT],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_LAYOUTGET],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_GETDEVICEINFO]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "LayoutCommit", "LayoutReturn", "ReclaimCompl",
+			    "ReadDataS", "WriteDataS", "CommitDataS");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_LAYOUTCOMMIT],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_LAYOUTRETURN],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_RECLAIMCOMPL],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_READDS],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_WRITEDS],
+		    (uintmax_t)ext_nfsstats.rpccnt[NFSPROC_COMMITDS]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "OpenOwner", "Opens", "LockOwner", "Locks",
+			    "Delegs", "LocalOwn");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.clopenowners,
+		    (uintmax_t)ext_nfsstats.clopens,
+		    (uintmax_t)ext_nfsstats.cllockowners,
+		    (uintmax_t)ext_nfsstats.cllocks,
+		    (uintmax_t)ext_nfsstats.cldelegates,
+		    (uintmax_t)ext_nfsstats.cllocalopenowners);
+		if (printtitle)
+			printf("%12.12s %12.12s %12.12s\n",
+			    "LocalOpen", "LocalLOwn", "LocalLock");
+		printf("%12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.cllocalopens,
+		    (uintmax_t)ext_nfsstats.cllocallockowners,
+		    (uintmax_t)ext_nfsstats.cllocallocks);
+		if (printtitle) {
+			printf("Rpc Info:\n");
+			printf("%12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "TimedOut", "Invalid", "X Replies", "Retries",
+			    "Requests");
+		}
+		printf("%12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.rpctimeouts,
+		    (uintmax_t)ext_nfsstats.rpcinvalid,
+		    (uintmax_t)ext_nfsstats.rpcunexpected,
+		    (uintmax_t)ext_nfsstats.rpcretries,
+		    (uintmax_t)ext_nfsstats.rpcrequests);
+		if (printtitle) {
+			printf("Cache Info:\n");
+			printf("%12.12s %12.12s %12.12s %12.12s\n",
+			    "Attr Hits", "Misses", "Lkup Hits", "Misses");
+		}
+		printf("%12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.attrcache_hits,
+		    (uintmax_t)ext_nfsstats.attrcache_misses,
+		    (uintmax_t)ext_nfsstats.lookupcache_hits,
+		    (uintmax_t)ext_nfsstats.lookupcache_misses);
+		if (printtitle)
+			printf("%12.12s %12.12s %12.12s %12.12s\n",
+			    "BioR Hits", "Misses", "BioW Hits", "Misses");
+		printf("%12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)(ext_nfsstats.biocache_reads -
+		    ext_nfsstats.read_bios),
+		    (uintmax_t)ext_nfsstats.read_bios,
+		    (uintmax_t)(ext_nfsstats.biocache_writes -
+		    ext_nfsstats.write_bios),
+		    (uintmax_t)ext_nfsstats.write_bios);
+		if (printtitle)
+			printf("%12.12s %12.12s %12.12s %12.12s\n",
+			    "BioRLHits", "Misses", "BioD Hits", "Misses");
+		printf("%12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)(ext_nfsstats.biocache_readlinks -
+		    ext_nfsstats.readlink_bios),
+		    (uintmax_t)ext_nfsstats.readlink_bios,
+		    (uintmax_t)(ext_nfsstats.biocache_readdirs -
+		    ext_nfsstats.readdir_bios),
+		    (uintmax_t)ext_nfsstats.readdir_bios);
+		if (printtitle)
+			printf("%12.12s %12.12s\n", "DirE Hits", "Misses");
+		printf("%12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.direofcache_hits,
+		    (uintmax_t)ext_nfsstats.direofcache_misses);
+	}
+	if (serverOnly != 0) {
+		if (printtitle) {
+			printf("\nServer Info:\n");
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Getattr", "Setattr", "Lookup", "Readlink",
+			    "Read", "Write");
+		}
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_GETATTR],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SETATTR],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LOOKUP],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_READLINK],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_READ],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_WRITE]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Create", "Remove", "Rename", "Link", "Symlink",
+			    "Mkdir");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_V3CREATE],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_REMOVE],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_RENAME],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LINK],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SYMLINK],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_MKDIR]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Rmdir", "Readdir", "RdirPlus", "Access", "Mknod",
+			    "Fsstat");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_RMDIR],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_READDIR],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_READDIRPLUS],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_ACCESS],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_MKNOD],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_FSSTAT]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Fsinfo", "PathConf", "Commit", "LookupP",
+			    "SetClId", "SetClIdCf");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_FSINFO],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_PATHCONF],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_COMMIT],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LOOKUPP],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SETCLIENTID],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SETCLIENTIDCFRM]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Open", "OpenAttr", "OpenDwnGr", "OpenCfrm",
+			    "DelePurge", "DeleRet");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_OPEN],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_OPENATTR],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_OPENDOWNGRADE],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_OPENCONFIRM],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_DELEGPURGE],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_DELEGRETURN]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "GetFH", "Lock", "LockT", "LockU", "Close",
+			    "Verify");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_GETFH],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LOCK],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LOCKT],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LOCKU],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_CLOSE],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_VERIFY]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "NVerify", "PutFH", "PutPubFH", "PutRootFH",
+			    "Renew", "RestoreFH");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_NVERIFY],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_PUTFH],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_PUTPUBFH],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_PUTROOTFH],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_RENEW],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_RESTOREFH]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "SaveFH", "Secinfo", "RelLckOwn", "V4Create",
+			    "BackChannelCtrl", "BindConnToSess");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SAVEFH],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SECINFO],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_RELEASELCKOWN],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_CREATE],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_BACKCHANNELCTL],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_BINDCONNTOSESS]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "ExchangeID", "CreateSess", "DestroySess",
+			    "FreeStateID", "GetDirDeleg", "GetDevInfo");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_EXCHANGEID],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_CREATESESSION],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_DESTROYSESSION],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_FREESTATEID],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_GETDIRDELEG],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_GETDEVINFO]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "GetDevList", "LayoutCommit", "LayoutGet",
+			    "LayoutReturn", "SecInfNoName", "Sequence");
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_GETDEVLIST],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LAYOUTCOMMIT],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LAYOUTGET],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_LAYOUTRETURN],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SECINFONONAME],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SEQUENCE]);
+		if (printtitle)
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "SetSSV", "TestStateID", "WantDeleg",
+			    "DestroyClID", "ReclaimCompl");
+		printf("%12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_SETSSV],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_TESTSTATEID],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_WANTDELEG],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_DESTROYCLIENTID],
+		    (uintmax_t)ext_nfsstats.srvrpccnt[NFSV4OP_RECLAIMCOMPL]);
+		if (printtitle) {
+			printf("Server:\n");
+			printf("%12.12s %12.12s %12.12s\n",
+			    "Retfailed", "Faults", "Clients");
+		}
+		printf("%12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srv_errs,
+		    (uintmax_t)ext_nfsstats.srvrpc_errs,
+		    (uintmax_t)ext_nfsstats.srvclients);
+		if (printtitle)
+			printf("%12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "OpenOwner", "Opens", "LockOwner",
+			    "Locks", "Delegs");
+		printf("%12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvopenowners,
+		    (uintmax_t)ext_nfsstats.srvopens,
+		    (uintmax_t)ext_nfsstats.srvlockowners,
+		    (uintmax_t)ext_nfsstats.srvlocks,
+		    (uintmax_t)ext_nfsstats.srvdelegates);
+		if (printtitle) {
+			printf("Server Cache Stats:\n");
+			printf(
+			    "%12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n",
+			    "Inprog", "Idem", "Non-idem", "Misses", 
+			    "CacheSize", "TCPPeak");
+		}
+		printf("%12ju %12ju %12ju %12ju %12ju %12ju\n",
+		    (uintmax_t)ext_nfsstats.srvcache_inproghits,
+		    (uintmax_t)ext_nfsstats.srvcache_idemdonehits,
+		    (uintmax_t)ext_nfsstats.srvcache_nonidemdonehits,
+		    (uintmax_t)ext_nfsstats.srvcache_misses,
+		    (uintmax_t)ext_nfsstats.srvcache_size,
+		    (uintmax_t)ext_nfsstats.srvcache_tcppeak);
+	}
+}
+
 static void
 compute_totals(struct nfsstatsv1 *total_stats, struct nfsstatsv1 *cur_stats)
 {



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