Beispiel #1
0
/*
 * 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);
	}
}
Beispiel #2
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*/
}
Beispiel #3
0
/*
 * 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);
	}
}