Author: rmacklem
Date: Sat Dec 10 21:03:49 2016
New Revision: 309831
URL: https://svnweb.freebsd.org/changeset/base/309831

Log:
  MFC: r309197
  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.

Modified:
  stable/11/usr.bin/nfsstat/nfsstat.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/usr.bin/nfsstat/nfsstat.c
==============================================================================
--- stable/11/usr.bin/nfsstat/nfsstat.c Sat Dec 10 20:24:22 2016        
(r309830)
+++ stable/11/usr.bin/nfsstat/nfsstat.c Sat Dec 10 21:03:49 2016        
(r309831)
@@ -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)
 {
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to