[PATCH 13/17] nfsd4: add per-operation server stats

Shankar Anand shanand at novell.com
Tue Jul 4 10:51:01 EDT 2006


Hi,

>>> On 7/4/2006 at 2:08 AM,, "Kevin Coffman" <kwc at citi.umich.edu>
wrote:
> On 6/27/06, J. Bruce Fields <bfields at fieldses.org> wrote:
>> On Tue, Jun 27, 2006 at 03:10:23PM -0400, Talpey, Thomas wrote:
>> > Oh yeah. I guess I blotted that out of my mind, thanks. :-)
>> > Op 2 was reserved because proc 2 is. (Yecch.) Of course,
>> > OP_CB_GETATTR promptly reused OP_ACCESS.
>> >
>> > I still agree with Neil - don't 3-base the stats.
>>
>> OK.  Shankar, could you revise this patch and the nfs-utils
patches?
> 
> Pardon my ignorance here.  Was there an update needed to the
nfs-utils
> patch?  Should I try to get this into the nfs-utils-1.0.9 release
Neil
> is planning imminently?

Here is the modified nfs-utils patch. This was also sent to nfs mailing
list.

Please replace the existing patch with this in CITI website.

Thanks,
Shankar
-------------- next part --------------
This patch adds code to nfsstat to read /proc/net/rpc/nfsd for nfsv4 server statistics and print them.

Submitted by: Shankar Anand <shanand at novell.com>

diff -aurp nfs-utils-1.0.8.old/utils/nfsstat/nfsstat.c nfs-utils-1.0.8/utils/nfsstat/nfsstat.c
--- nfs-utils-1.0.8.old/utils/nfsstat/nfsstat.c	2005-12-20 09:42:47.000000000 +0530
+++ nfs-utils-1.0.8/utils/nfsstat/nfsstat.c	2006-07-04 20:11:51.000000000 +0530
@@ -29,6 +29,7 @@ static unsigned int	svcv3info[24];	/* NF
 static unsigned int	cltv3info[24];	/* NFSv3 call counts ([0] == 22) */
 static unsigned int	svcv4info[4];	/* NFSv4 call counts ([0] == 2) */
 static unsigned int	cltv4info[34];	/* NFSv4 call counts ([0] == 32) */
+static unsigned int	svcv4opinfo[42];/* NFSv4 call counts ([0] == 40) */
 static unsigned int	svcnetinfo[5];	/* 0  # of received packets
 					 * 1  UDP packets
 					 * 2  TCP packets
@@ -99,6 +100,16 @@ static const char *	nfscltv4name[32] = {
 	"statfs",    "readlink",  "readdir", "server_caps", "delegreturn",
 };
 
+static const char *     nfssvrv4opname[40] = {
+        "op0-unused",   "op1-unused", "op2-future",  "access",     "close",       "commit",
+        "create",       "delegpurge", "delegreturn", "getattr",    "getfh",       "link",
+        "lock",         "lockt",      "locku",       "lookup",     "lookup_root", "nverify",
+        "open",         "openattr",   "open_conf",   "open_dgrd",  "putfh",       "putpubfh",
+        "putrootfh",    "read",       "readdir",     "readlink",   "remove",      "rename",
+        "renew",        "restorefh",  "savefh",      "secinfo",    "setattr",     "setcltid",
+        "setcltidconf", "verify",     "write",       "rellockowner"
+};
+
 typedef struct statinfo {
 	char		*tag;
 	int		nrvals;
@@ -115,6 +126,7 @@ static statinfo		svcinfo[] = {
 	{ "proc2",      STRUCTSIZE(svcv2info),  svcv2info  },
 	{ "proc3",      STRUCTSIZE(svcv3info),  svcv3info  },
 	{ "proc4",      STRUCTSIZE(svcv4info),  svcv4info  },
+	{ "proc4ops",   STRUCTSIZE(svcv4opinfo),svcv4opinfo},
 	{ NULL,         0,                      NULL       }
 };
 
@@ -381,11 +393,16 @@ main(int argc, char **argv)
 				"Server nfs v3:\n",
 				nfsv3name, svcv3info + 1, sizeof(nfsv3name)/sizeof(char *)
 				);
-			if ((opt_prt & PRNT_V4) || ((opt_prt & PRNT_AUTO) && svcv4info[0] && svcv4info[svcv4info[0]+1] != svcv4info[0]))
+			if ((opt_prt & PRNT_V4) || ((opt_prt & PRNT_AUTO) && svcv4info[0] && svcv4info[svcv4info[0]+1] != svcv4info[0])) {
 				print_callstats(
 				"Server nfs v4:\n",
 				nfssvrv4name, svcv4info + 1, sizeof(nfssvrv4name)/sizeof(char *)
 				);
+				print_callstats(
+				"Server nfs v4 operations:\n",
+				nfssvrv4opname, svcv4opinfo + 1, sizeof(nfssvrv4opname)/sizeof(char *)
+				);
+			}
 		}
 	}
 


More information about the NFSv4 mailing list