[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