aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/nfsstat/nfsstat.c
diff options
context:
space:
mode:
authorRick Macklem <rmacklem@FreeBSD.org>2016-11-26 20:47:11 +0000
committerRick Macklem <rmacklem@FreeBSD.org>2016-11-26 20:47:11 +0000
commit0744a2b00e9737fd27fdfdb965b431be3099d16a (patch)
tree51f95f3a552916fcbaf57d6b08c8643fd0faa7ef /usr.bin/nfsstat/nfsstat.c
parentbabfcab6701b3ed0d2b4893515d18f2b9855607a (diff)
downloadsrc-0744a2b00e9737fd27fdfdb965b431be3099d16a.tar.gz
src-0744a2b00e9737fd27fdfdb965b431be3099d16a.zip
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
Notes
Notes: svn path=/head/; revision=309197
Diffstat (limited to 'usr.bin/nfsstat/nfsstat.c')
-rw-r--r--usr.bin/nfsstat/nfsstat.c370
1 files changed, 368 insertions, 2 deletions
diff --git a/usr.bin/nfsstat/nfsstat.c b/usr.bin/nfsstat/nfsstat.c
index 90be2953ffd8..dc6f847bf28d 100644
--- a/usr.bin/nfsstat/nfsstat.c
+++ b/usr.bin/nfsstat/nfsstat.c
@@ -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)
{