/* * Print a description of the nfs stats. */ void intpr(int clientOnly, int serverOnly) { struct nfsstats nfsstats, *nfsstatsp; struct nfsrvstats nfsrvstats, *nfsrvstatsp; int nfssvc_flag; if (run_v4 == 0) { /* * Only read the stats we are going to display to avoid zeroing * stats the user didn't request. */ if (clientOnly) nfsstatsp = &nfsstats; else nfsstatsp = NULL; if (serverOnly) nfsrvstatsp = &nfsrvstats; else nfsrvstatsp = NULL; readstats(&nfsstatsp, &nfsrvstatsp, zflag); if (clientOnly && !nfsstatsp) { printf("Client not present!\n"); clientOnly = 0; } } else { nfssvc_flag = NFSSVC_GETSTATS; if (zflag != 0) { if (clientOnly != 0) nfssvc_flag |= NFSSVC_ZEROCLTSTATS; if (serverOnly != 0) nfssvc_flag |= NFSSVC_ZEROSRVSTATS; } if (nfssvc(nfssvc_flag, &ext_nfsstats) < 0) err(1, "Can't get stats"); } if (clientOnly) { printf("Client Info:\n"); printf("Rpc Counts:\n"); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Getattr", "Setattr", "Lookup", "Readlink", "Read", "Write", "Create", "Remove"); if (run_v4 == 0) printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsstats.rpccnt[NFSPROC_GETATTR], nfsstats.rpccnt[NFSPROC_SETATTR], nfsstats.rpccnt[NFSPROC_LOOKUP], nfsstats.rpccnt[NFSPROC_READLINK], nfsstats.rpccnt[NFSPROC_READ], nfsstats.rpccnt[NFSPROC_WRITE], nfsstats.rpccnt[NFSPROC_CREATE], nfsstats.rpccnt[NFSPROC_REMOVE]); else printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", ext_nfsstats.rpccnt[NFSPROC_GETATTR], ext_nfsstats.rpccnt[NFSPROC_SETATTR], ext_nfsstats.rpccnt[NFSPROC_LOOKUP], ext_nfsstats.rpccnt[NFSPROC_READLINK], ext_nfsstats.rpccnt[NFSPROC_READ], ext_nfsstats.rpccnt[NFSPROC_WRITE], ext_nfsstats.rpccnt[NFSPROC_CREATE], ext_nfsstats.rpccnt[NFSPROC_REMOVE]); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Rename", "Link", "Symlink", "Mkdir", "Rmdir", "Readdir", "RdirPlus", "Access"); if (run_v4 == 0) printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsstats.rpccnt[NFSPROC_RENAME], nfsstats.rpccnt[NFSPROC_LINK], nfsstats.rpccnt[NFSPROC_SYMLINK], nfsstats.rpccnt[NFSPROC_MKDIR], nfsstats.rpccnt[NFSPROC_RMDIR], nfsstats.rpccnt[NFSPROC_READDIR], nfsstats.rpccnt[NFSPROC_READDIRPLUS], nfsstats.rpccnt[NFSPROC_ACCESS]); else printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", ext_nfsstats.rpccnt[NFSPROC_RENAME], ext_nfsstats.rpccnt[NFSPROC_LINK], ext_nfsstats.rpccnt[NFSPROC_SYMLINK], ext_nfsstats.rpccnt[NFSPROC_MKDIR], ext_nfsstats.rpccnt[NFSPROC_RMDIR], ext_nfsstats.rpccnt[NFSPROC_READDIR], ext_nfsstats.rpccnt[NFSPROC_READDIRPLUS], ext_nfsstats.rpccnt[NFSPROC_ACCESS]); printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n", "Mknod", "Fsstat", "Fsinfo", "PathConf", "Commit"); if (run_v4 == 0) printf("%9d %9d %9d %9d %9d\n", nfsstats.rpccnt[NFSPROC_MKNOD], nfsstats.rpccnt[NFSPROC_FSSTAT], nfsstats.rpccnt[NFSPROC_FSINFO], nfsstats.rpccnt[NFSPROC_PATHCONF], nfsstats.rpccnt[NFSPROC_COMMIT]); else printf("%9d %9d %9d %9d %9d\n", ext_nfsstats.rpccnt[NFSPROC_MKNOD], ext_nfsstats.rpccnt[NFSPROC_FSSTAT], ext_nfsstats.rpccnt[NFSPROC_FSINFO], ext_nfsstats.rpccnt[NFSPROC_PATHCONF], ext_nfsstats.rpccnt[NFSPROC_COMMIT]); printf("Rpc Info:\n"); printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n", "TimedOut", "Invalid", "X Replies", "Retries", "Requests"); if (run_v4 == 0) printf("%9d %9d %9d %9d %9d\n", nfsstats.rpctimeouts, nfsstats.rpcinvalid, nfsstats.rpcunexpected, nfsstats.rpcretries, nfsstats.rpcrequests); else printf("%9d %9d %9d %9d %9d\n", ext_nfsstats.rpctimeouts, ext_nfsstats.rpcinvalid, ext_nfsstats.rpcunexpected, ext_nfsstats.rpcretries, ext_nfsstats.rpcrequests); printf("Cache Info:\n"); printf("%9.9s %9.9s %9.9s %9.9s", "Attr Hits", "Misses", "Lkup Hits", "Misses"); printf(" %9.9s %9.9s %9.9s %9.9s\n", "BioR Hits", "Misses", "BioW Hits", "Misses"); if (run_v4 == 0) { printf("%9d %9d %9d %9d", nfsstats.attrcache_hits, nfsstats.attrcache_misses, nfsstats.lookupcache_hits, nfsstats.lookupcache_misses); printf(" %9d %9d %9d %9d\n", nfsstats.biocache_reads-nfsstats.read_bios, nfsstats.read_bios, nfsstats.biocache_writes-nfsstats.write_bios, nfsstats.write_bios); } else { printf("%9d %9d %9d %9d", ext_nfsstats.attrcache_hits, ext_nfsstats.attrcache_misses, ext_nfsstats.lookupcache_hits, ext_nfsstats.lookupcache_misses); printf(" %9d %9d %9d %9d\n", ext_nfsstats.biocache_reads - ext_nfsstats.read_bios, ext_nfsstats.read_bios, ext_nfsstats.biocache_writes - ext_nfsstats.write_bios, ext_nfsstats.write_bios); } printf("%9.9s %9.9s %9.9s %9.9s", "BioRLHits", "Misses", "BioD Hits", "Misses"); printf(" %9.9s %9.9s %9.9s %9.9s\n", "DirE Hits", "Misses", "Accs Hits", "Misses"); if (run_v4 == 0) { printf("%9d %9d %9d %9d", nfsstats.biocache_readlinks - nfsstats.readlink_bios, nfsstats.readlink_bios, nfsstats.biocache_readdirs - nfsstats.readdir_bios, nfsstats.readdir_bios); printf(" %9d %9d %9d %9d\n", nfsstats.direofcache_hits, nfsstats.direofcache_misses, nfsstats.accesscache_hits, nfsstats.accesscache_misses); } else { printf("%9d %9d %9d %9d", ext_nfsstats.biocache_readlinks - ext_nfsstats.readlink_bios, ext_nfsstats.readlink_bios, ext_nfsstats.biocache_readdirs - ext_nfsstats.readdir_bios, ext_nfsstats.readdir_bios); printf(" %9d %9d %9d %9d\n", ext_nfsstats.direofcache_hits, ext_nfsstats.direofcache_misses, ext_nfsstats.accesscache_hits, ext_nfsstats.accesscache_misses); } } if (run_v4 == 0 && serverOnly && !nfsrvstatsp) { printf("Server not present!\n"); serverOnly = 0; } if (serverOnly) { printf("\nServer Info:\n"); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Getattr", "Setattr", "Lookup", "Readlink", "Read", "Write", "Create", "Remove"); if (run_v4 == 0) printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsrvstats.srvrpccnt[NFSPROC_GETATTR], nfsrvstats.srvrpccnt[NFSPROC_SETATTR], nfsrvstats.srvrpccnt[NFSPROC_LOOKUP], nfsrvstats.srvrpccnt[NFSPROC_READLINK], nfsrvstats.srvrpccnt[NFSPROC_READ], nfsrvstats.srvrpccnt[NFSPROC_WRITE], nfsrvstats.srvrpccnt[NFSPROC_CREATE], nfsrvstats.srvrpccnt[NFSPROC_REMOVE]); else printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", ext_nfsstats.srvrpccnt[NFSV4OP_GETATTR], ext_nfsstats.srvrpccnt[NFSV4OP_SETATTR], ext_nfsstats.srvrpccnt[NFSV4OP_LOOKUP], ext_nfsstats.srvrpccnt[NFSV4OP_READLINK], ext_nfsstats.srvrpccnt[NFSV4OP_READ], ext_nfsstats.srvrpccnt[NFSV4OP_WRITE], ext_nfsstats.srvrpccnt[NFSV4OP_CREATE], ext_nfsstats.srvrpccnt[NFSV4OP_REMOVE]); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Rename", "Link", "Symlink", "Mkdir", "Rmdir", "Readdir", "RdirPlus", "Access"); if (run_v4 == 0) printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsrvstats.srvrpccnt[NFSPROC_RENAME], nfsrvstats.srvrpccnt[NFSPROC_LINK], nfsrvstats.srvrpccnt[NFSPROC_SYMLINK], nfsrvstats.srvrpccnt[NFSPROC_MKDIR], nfsrvstats.srvrpccnt[NFSPROC_RMDIR], nfsrvstats.srvrpccnt[NFSPROC_READDIR], nfsrvstats.srvrpccnt[NFSPROC_READDIRPLUS], nfsrvstats.srvrpccnt[NFSPROC_ACCESS]); else printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", ext_nfsstats.srvrpccnt[NFSV4OP_RENAME], ext_nfsstats.srvrpccnt[NFSV4OP_LINK], ext_nfsstats.srvrpccnt[NFSV4OP_SYMLINK], ext_nfsstats.srvrpccnt[NFSV4OP_MKDIR], ext_nfsstats.srvrpccnt[NFSV4OP_RMDIR], ext_nfsstats.srvrpccnt[NFSV4OP_READDIR], ext_nfsstats.srvrpccnt[NFSV4OP_READDIRPLUS], ext_nfsstats.srvrpccnt[NFSV4OP_ACCESS]); printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n", "Mknod", "Fsstat", "Fsinfo", "PathConf", "Commit"); if (run_v4 == 0) printf("%9d %9d %9d %9d %9d\n", nfsrvstats.srvrpccnt[NFSPROC_MKNOD], nfsrvstats.srvrpccnt[NFSPROC_FSSTAT], nfsrvstats.srvrpccnt[NFSPROC_FSINFO], nfsrvstats.srvrpccnt[NFSPROC_PATHCONF], nfsrvstats.srvrpccnt[NFSPROC_COMMIT]); else printf("%9d %9d %9d %9d %9d\n", ext_nfsstats.srvrpccnt[NFSV4OP_MKNOD], ext_nfsstats.srvrpccnt[NFSV4OP_FSSTAT], ext_nfsstats.srvrpccnt[NFSV4OP_FSINFO], ext_nfsstats.srvrpccnt[NFSV4OP_PATHCONF], ext_nfsstats.srvrpccnt[NFSV4OP_COMMIT]); printf("Server Ret-Failed\n"); if (run_v4 == 0) printf("%17d\n", nfsrvstats.srvrpc_errs); else printf("%17d\n", ext_nfsstats.srvrpc_errs); printf("Server Faults\n"); if (run_v4 == 0) printf("%13d\n", nfsrvstats.srv_errs); else printf("%13d\n", ext_nfsstats.srv_errs); printf("Server Cache Stats:\n"); printf("%9.9s %9.9s %9.9s %9.9s\n", "Inprog", "Idem", "Non-idem", "Misses"); if (run_v4 == 0) printf("%9d %9d %9d %9d\n", nfsrvstats.srvcache_inproghits, nfsrvstats.srvcache_idemdonehits, nfsrvstats.srvcache_nonidemdonehits, nfsrvstats.srvcache_misses); else printf("%9d %9d %9d %9d\n", ext_nfsstats.srvcache_inproghits, ext_nfsstats.srvcache_idemdonehits, ext_nfsstats.srvcache_nonidemdonehits, ext_nfsstats.srvcache_misses); printf("Server Write Gathering:\n"); printf("%9.9s %9.9s %9.9s\n", "WriteOps", "WriteRPC", "Opsaved"); if (run_v4 == 0) printf("%9d %9d %9d\n", nfsrvstats.srvvop_writes, nfsrvstats.srvrpccnt[NFSPROC_WRITE], nfsrvstats.srvrpccnt[NFSPROC_WRITE] - nfsrvstats.srvvop_writes); else /* * The new client doesn't do write gathering. It was * only useful for NFSv2. */ printf("%9d %9d %9d\n", ext_nfsstats.srvrpccnt[NFSV4OP_WRITE], ext_nfsstats.srvrpccnt[NFSV4OP_WRITE], 0); } }
/* * Print a running summary of nfs statistics. * Repeat display every interval seconds, showing statistics * collected over that interval. Assumes that interval is non-zero. * First line printed at top of screen is always cumulative. */ void sidewaysintpr(u_int interval, int clientOnly, int serverOnly) { struct nfsstats nfsstats, lastst, *nfsstatsp; struct nfsrvstats nfsrvstats, lastsrvst, *nfsrvstatsp; int hdrcnt = 1; nfsstatsp = &lastst; nfsrvstatsp = &lastsrvst; readstats(&nfsstatsp, &nfsrvstatsp, 0); if (clientOnly && !nfsstatsp) { printf("Client not present!\n"); clientOnly = 0; } if (serverOnly && !nfsrvstatsp) { printf("Server not present!\n"); serverOnly = 0; } sleep(interval); for (;;) { nfsstatsp = &nfsstats; nfsrvstatsp = &nfsrvstats; readstats(&nfsstatsp, &nfsrvstatsp, 0); if (--hdrcnt == 0) { printhdr(clientOnly, serverOnly); if (clientOnly && serverOnly) hdrcnt = 10; else hdrcnt = 20; } if (clientOnly) { printf("%s %6d %6d %6d %6d %6d %6d %6d %6d", ((clientOnly && serverOnly) ? "Client:" : ""), DELTA(attrcache_hits) + DELTA(attrcache_misses), DELTA(lookupcache_hits) + DELTA(lookupcache_misses), DELTA(biocache_readlinks), DELTA(biocache_reads), DELTA(biocache_writes), nfsstats.rpccnt[NFSPROC_RENAME]-lastst.rpccnt[NFSPROC_RENAME], DELTA(accesscache_hits) + DELTA(accesscache_misses), DELTA(biocache_readdirs) ); if (widemode) { printf(" %s %s %s %s %s %s", sperc1(DELTA(attrcache_hits), DELTA(attrcache_misses)), sperc1(DELTA(lookupcache_hits), DELTA(lookupcache_misses)), sperc2(DELTA(biocache_reads), DELTA(read_bios)), sperc2(DELTA(biocache_writes), DELTA(write_bios)), sperc1(DELTA(accesscache_hits), DELTA(accesscache_misses)), sperc2(DELTA(biocache_readdirs), DELTA(readdir_bios)) ); } printf("\n"); lastst = nfsstats; } if (serverOnly) { printf("%s %6d %6d %6d %6d %6d %6d %6d %6d", ((clientOnly && serverOnly) ? "Server:" : ""), nfsrvstats.srvrpccnt[NFSPROC_GETATTR]-lastsrvst.srvrpccnt[NFSPROC_GETATTR], nfsrvstats.srvrpccnt[NFSPROC_LOOKUP]-lastsrvst.srvrpccnt[NFSPROC_LOOKUP], nfsrvstats.srvrpccnt[NFSPROC_READLINK]-lastsrvst.srvrpccnt[NFSPROC_READLINK], nfsrvstats.srvrpccnt[NFSPROC_READ]-lastsrvst.srvrpccnt[NFSPROC_READ], nfsrvstats.srvrpccnt[NFSPROC_WRITE]-lastsrvst.srvrpccnt[NFSPROC_WRITE], nfsrvstats.srvrpccnt[NFSPROC_RENAME]-lastsrvst.srvrpccnt[NFSPROC_RENAME], nfsrvstats.srvrpccnt[NFSPROC_ACCESS]-lastsrvst.srvrpccnt[NFSPROC_ACCESS], (nfsrvstats.srvrpccnt[NFSPROC_READDIR]-lastsrvst.srvrpccnt[NFSPROC_READDIR]) +(nfsrvstats.srvrpccnt[NFSPROC_READDIRPLUS]-lastsrvst.srvrpccnt[NFSPROC_READDIRPLUS])); printf("\n"); lastsrvst = nfsrvstats; } fflush(stdout); sleep(interval); } /*NOTREACHED*/ }
/* * Print a description of the nfs stats. */ void intpr(int clientOnly, int serverOnly) { struct nfsstats nfsstats; readstats(&nfsstats); if (clientOnly) { printf("Client Info:\n"); printf("Rpc Counts:\n"); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Getattr", "Setattr", "Lookup", "Readlink", "Read", "Write", "Create", "Remove"); printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsstats.rpccnt[NFSPROC_GETATTR], nfsstats.rpccnt[NFSPROC_SETATTR], nfsstats.rpccnt[NFSPROC_LOOKUP], nfsstats.rpccnt[NFSPROC_READLINK], nfsstats.rpccnt[NFSPROC_READ], nfsstats.rpccnt[NFSPROC_WRITE], nfsstats.rpccnt[NFSPROC_CREATE], nfsstats.rpccnt[NFSPROC_REMOVE]); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Rename", "Link", "Symlink", "Mkdir", "Rmdir", "Readdir", "RdirPlus", "Access"); printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsstats.rpccnt[NFSPROC_RENAME], nfsstats.rpccnt[NFSPROC_LINK], nfsstats.rpccnt[NFSPROC_SYMLINK], nfsstats.rpccnt[NFSPROC_MKDIR], nfsstats.rpccnt[NFSPROC_RMDIR], nfsstats.rpccnt[NFSPROC_READDIR], nfsstats.rpccnt[NFSPROC_READDIRPLUS], nfsstats.rpccnt[NFSPROC_ACCESS]); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Mknod", "Fsstat", "Fsinfo", "PathConf", "Commit", "GLease", "Vacate", "Evict"); printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsstats.rpccnt[NFSPROC_MKNOD], nfsstats.rpccnt[NFSPROC_FSSTAT], nfsstats.rpccnt[NFSPROC_FSINFO], nfsstats.rpccnt[NFSPROC_PATHCONF], nfsstats.rpccnt[NFSPROC_COMMIT], nfsstats.rpccnt[NQNFSPROC_GETLEASE], nfsstats.rpccnt[NQNFSPROC_VACATED], nfsstats.rpccnt[NQNFSPROC_EVICTED]); printf("Rpc Info:\n"); printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n", "TimedOut", "Invalid", "X Replies", "Retries", "Requests"); printf("%9d %9d %9d %9d %9d\n", nfsstats.rpctimeouts, nfsstats.rpcinvalid, nfsstats.rpcunexpected, nfsstats.rpcretries, nfsstats.rpcrequests); printf("Cache Info:\n"); printf("%9.9s %9.9s %9.9s %9.9s", "Attr Hits", "Misses", "Lkup Hits", "Misses"); printf(" %9.9s %9.9s %9.9s %9.9s\n", "BioR Hits", "Misses", "BioW Hits", "Misses"); printf("%9d %9d %9d %9d", nfsstats.attrcache_hits, nfsstats.attrcache_misses, nfsstats.lookupcache_hits, nfsstats.lookupcache_misses); printf(" %9d %9d %9d %9d\n", nfsstats.biocache_reads-nfsstats.read_bios, nfsstats.read_bios, nfsstats.biocache_writes-nfsstats.write_bios, nfsstats.write_bios); printf("%9.9s %9.9s %9.9s %9.9s", "BioRLHits", "Misses", "BioD Hits", "Misses"); printf(" %9.9s %9.9s\n", "DirE Hits", "Misses"); printf("%9d %9d %9d %9d", nfsstats.biocache_readlinks-nfsstats.readlink_bios, nfsstats.readlink_bios, nfsstats.biocache_readdirs-nfsstats.readdir_bios, nfsstats.readdir_bios); printf(" %9d %9d\n", nfsstats.direofcache_hits, nfsstats.direofcache_misses); } if (serverOnly) { printf("\nServer Info:\n"); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Getattr", "Setattr", "Lookup", "Readlink", "Read", "Write", "Create", "Remove"); printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsstats.srvrpccnt[NFSPROC_GETATTR], nfsstats.srvrpccnt[NFSPROC_SETATTR], nfsstats.srvrpccnt[NFSPROC_LOOKUP], nfsstats.srvrpccnt[NFSPROC_READLINK], nfsstats.srvrpccnt[NFSPROC_READ], nfsstats.srvrpccnt[NFSPROC_WRITE], nfsstats.srvrpccnt[NFSPROC_CREATE], nfsstats.srvrpccnt[NFSPROC_REMOVE]); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Rename", "Link", "Symlink", "Mkdir", "Rmdir", "Readdir", "RdirPlus", "Access"); printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsstats.srvrpccnt[NFSPROC_RENAME], nfsstats.srvrpccnt[NFSPROC_LINK], nfsstats.srvrpccnt[NFSPROC_SYMLINK], nfsstats.srvrpccnt[NFSPROC_MKDIR], nfsstats.srvrpccnt[NFSPROC_RMDIR], nfsstats.srvrpccnt[NFSPROC_READDIR], nfsstats.srvrpccnt[NFSPROC_READDIRPLUS], nfsstats.srvrpccnt[NFSPROC_ACCESS]); printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n", "Mknod", "Fsstat", "Fsinfo", "PathConf", "Commit", "GLease", "Vacate", "Evict"); printf("%9d %9d %9d %9d %9d %9d %9d %9d\n", nfsstats.srvrpccnt[NFSPROC_MKNOD], nfsstats.srvrpccnt[NFSPROC_FSSTAT], nfsstats.srvrpccnt[NFSPROC_FSINFO], nfsstats.srvrpccnt[NFSPROC_PATHCONF], nfsstats.srvrpccnt[NFSPROC_COMMIT], nfsstats.srvrpccnt[NQNFSPROC_GETLEASE], nfsstats.srvrpccnt[NQNFSPROC_VACATED], nfsstats.srvrpccnt[NQNFSPROC_EVICTED]); printf("Server Ret-Failed\n"); printf("%17d\n", nfsstats.srvrpc_errs); printf("Server Faults\n"); printf("%13d\n", nfsstats.srv_errs); printf("Server Cache Stats:\n"); printf("%9.9s %9.9s %9.9s %9.9s\n", "Inprog", "Idem", "Non-idem", "Misses"); printf("%9d %9d %9d %9d\n", nfsstats.srvcache_inproghits, nfsstats.srvcache_idemdonehits, nfsstats.srvcache_nonidemdonehits, nfsstats.srvcache_misses); printf("Server Lease Stats:\n"); printf("%9.9s %9.9s %9.9s\n", "Leases", "PeakL", "GLeases"); printf("%9d %9d %9d\n", nfsstats.srvnqnfs_leases, nfsstats.srvnqnfs_maxleases, nfsstats.srvnqnfs_getleases); printf("Server Write Gathering:\n"); printf("%9.9s %9.9s %9.9s\n", "WriteOps", "WriteRPC", "Opsaved"); printf("%9d %9d %9d\n", nfsstats.srvvop_writes, nfsstats.srvrpccnt[NFSPROC_WRITE], nfsstats.srvrpccnt[NFSPROC_WRITE] - nfsstats.srvvop_writes); } }