From: NeilBrown <neilb@suse.de>
To: Andrew Morton <akpm@osdl.org>
Cc: nfs@lists.sourceforge.net, Shankar Anand <shanand@novell.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH] knfsd: nfsd4: add per-operation server stats
Date: Fri, 7 Jul 2006 17:47:28 +1000 [thread overview]
Message-ID: <1060707074728.20633@suse.de> (raw)
In-Reply-To: 20060707174156.20585.patches@notabene
Hi Andrew,
I know the merge window is officially closed, but I wonder if this could
slip in? It adds per-operation(*) statistics for NFSv4. It didn't
make it for the previous batch as we needed to clarify some issues with
the appearance of the data in /proc.
(*) For those not in "the know", while NFSv2 and NFSv3 have a number
of difference proceedures (READ, WRITE, UNLINK, etc). NFSv4 a single(+)
procedure "COMPOUND" and can contain a list of operations like READ,
WRITE, UNLINK etc so there can be multiple operations per RPC.
Because of this, slight different statistics gathering are needed.
(+) Actually, NFSv4 has two proceedures: COMPOUND and NULL...
Thanks,
NeilBrown
### Comments for Changeset
From: "Shankar Anand" <shanand@novell.com>
This patch adds a nfs4 operations count array to nfsd_stats structure.
The count is incremented in nfsd4_proc_compound() where all the operations
are handled by the nfsv4 server. This count of individual nfsv4 operations
is also entered into /proc filesystem.
Signed-off-by: Shankar Anand<shanand@novell.com>
Signed-off-by: Neil Brown <neilb@suse.de>
### Diffstat output
./fs/nfsd/nfs4proc.c | 8 ++++++++
./fs/nfsd/stats.c | 10 ++++++++++
./include/linux/nfs4.h | 6 ++++++
./include/linux/nfsd/stats.h | 6 ++++++
4 files changed, 30 insertions(+)
diff .prev/fs/nfsd/nfs4proc.c ./fs/nfsd/nfs4proc.c
--- .prev/fs/nfsd/nfs4proc.c 2006-07-07 17:29:24.000000000 +1000
+++ ./fs/nfsd/nfs4proc.c 2006-07-07 17:31:15.000000000 +1000
@@ -721,6 +721,12 @@ nfsd4_proc_null(struct svc_rqst *rqstp,
return nfs_ok;
}
+static inline void nfsd4_increment_op_stats(u32 opnum)
+{
+ if (opnum >= FIRST_NFS4_OP && opnum <= LAST_NFS4_OP)
+ nfsdstats.nfs4_opcount[opnum]++;
+}
+
/*
* COMPOUND call.
@@ -930,6 +936,8 @@ encode_op:
/* XXX Ugh, we need to get rid of this kind of special case: */
if (op->opnum == OP_READ && op->u.read.rd_filp)
fput(op->u.read.rd_filp);
+
+ nfsd4_increment_op_stats(op->opnum);
}
out:
diff .prev/fs/nfsd/stats.c ./fs/nfsd/stats.c
--- .prev/fs/nfsd/stats.c 2006-07-07 17:29:24.000000000 +1000
+++ ./fs/nfsd/stats.c 2006-07-07 17:36:45.000000000 +1000
@@ -72,6 +72,16 @@ static int nfsd_proc_show(struct seq_fil
/* show my rpc info */
svc_seq_show(seq, &nfsd_svcstats);
+#ifdef CONFIG_NFSD_V4
+ /* Show count for individual nfsv4 operations */
+ /* Writing operation numbers 0 1 2 also for maintaining uniformity */
+ seq_printf(seq,"proc4ops %u", LAST_NFS4_OP + 1);
+ for (i = 0; i <= LAST_NFS4_OP; i++)
+ seq_printf(seq, " %u", nfsdstats.nfs4_opcount[i]);
+
+ seq_putc(seq, '\n');
+#endif
+
return 0;
}
diff .prev/include/linux/nfs4.h ./include/linux/nfs4.h
--- .prev/include/linux/nfs4.h 2006-07-07 17:29:24.000000000 +1000
+++ ./include/linux/nfs4.h 2006-07-07 17:29:24.000000000 +1000
@@ -157,6 +157,12 @@ enum nfs_opnum4 {
OP_ILLEGAL = 10044,
};
+/*Defining first and last NFS4 operations implemented.
+Needs to be updated if more operations are defined in future.*/
+
+#define FIRST_NFS4_OP OP_ACCESS
+#define LAST_NFS4_OP OP_RELEASE_LOCKOWNER
+
enum nfsstat4 {
NFS4_OK = 0,
NFS4ERR_PERM = 1,
diff .prev/include/linux/nfsd/stats.h ./include/linux/nfsd/stats.h
--- .prev/include/linux/nfsd/stats.h 2006-07-07 17:29:24.000000000 +1000
+++ ./include/linux/nfsd/stats.h 2006-07-07 17:34:51.000000000 +1000
@@ -9,6 +9,8 @@
#ifndef LINUX_NFSD_STATS_H
#define LINUX_NFSD_STATS_H
+#include <linux/nfs4.h>
+
struct nfsd_stats {
unsigned int rchits; /* repcache hits */
unsigned int rcmisses; /* repcache hits */
@@ -27,6 +29,10 @@ struct nfsd_stats {
unsigned int ra_size; /* size of ra cache */
unsigned int ra_depth[11]; /* number of times ra entry was found that deep
* in the cache (10percentiles). [10] = not found */
+#ifdef CONFIG_NFSD_V4
+ unsigned int nfs4_opcount[LAST_NFS4_OP + 1]; /* count of individual nfsv4 operations */
+#endif
+
};
/* thread usage wraps very million seconds (approx one fortnight) */
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
WARNING: multiple messages have this Message-ID (diff)
From: NeilBrown <neilb@suse.de>
To: Andrew Morton <akpm@osdl.org>
Cc: "Shankar Anand" <shanand@novell.com>
Cc: nfs@lists.sourceforge.net, linux-kernel@vger.kernel.org
Subject: [PATCH] knfsd: nfsd4: add per-operation server stats
Date: Fri, 7 Jul 2006 17:47:28 +1000 [thread overview]
Message-ID: <1060707074728.20633@suse.de> (raw)
In-Reply-To: 20060707174156.20585.patches@notabene
Hi Andrew,
I know the merge window is officially closed, but I wonder if this could
slip in? It adds per-operation(*) statistics for NFSv4. It didn't
make it for the previous batch as we needed to clarify some issues with
the appearance of the data in /proc.
(*) For those not in "the know", while NFSv2 and NFSv3 have a number
of difference proceedures (READ, WRITE, UNLINK, etc). NFSv4 a single(+)
procedure "COMPOUND" and can contain a list of operations like READ,
WRITE, UNLINK etc so there can be multiple operations per RPC.
Because of this, slight different statistics gathering are needed.
(+) Actually, NFSv4 has two proceedures: COMPOUND and NULL...
Thanks,
NeilBrown
### Comments for Changeset
From: "Shankar Anand" <shanand@novell.com>
This patch adds a nfs4 operations count array to nfsd_stats structure.
The count is incremented in nfsd4_proc_compound() where all the operations
are handled by the nfsv4 server. This count of individual nfsv4 operations
is also entered into /proc filesystem.
Signed-off-by: Shankar Anand<shanand@novell.com>
Signed-off-by: Neil Brown <neilb@suse.de>
### Diffstat output
./fs/nfsd/nfs4proc.c | 8 ++++++++
./fs/nfsd/stats.c | 10 ++++++++++
./include/linux/nfs4.h | 6 ++++++
./include/linux/nfsd/stats.h | 6 ++++++
4 files changed, 30 insertions(+)
diff .prev/fs/nfsd/nfs4proc.c ./fs/nfsd/nfs4proc.c
--- .prev/fs/nfsd/nfs4proc.c 2006-07-07 17:29:24.000000000 +1000
+++ ./fs/nfsd/nfs4proc.c 2006-07-07 17:31:15.000000000 +1000
@@ -721,6 +721,12 @@ nfsd4_proc_null(struct svc_rqst *rqstp,
return nfs_ok;
}
+static inline void nfsd4_increment_op_stats(u32 opnum)
+{
+ if (opnum >= FIRST_NFS4_OP && opnum <= LAST_NFS4_OP)
+ nfsdstats.nfs4_opcount[opnum]++;
+}
+
/*
* COMPOUND call.
@@ -930,6 +936,8 @@ encode_op:
/* XXX Ugh, we need to get rid of this kind of special case: */
if (op->opnum == OP_READ && op->u.read.rd_filp)
fput(op->u.read.rd_filp);
+
+ nfsd4_increment_op_stats(op->opnum);
}
out:
diff .prev/fs/nfsd/stats.c ./fs/nfsd/stats.c
--- .prev/fs/nfsd/stats.c 2006-07-07 17:29:24.000000000 +1000
+++ ./fs/nfsd/stats.c 2006-07-07 17:36:45.000000000 +1000
@@ -72,6 +72,16 @@ static int nfsd_proc_show(struct seq_fil
/* show my rpc info */
svc_seq_show(seq, &nfsd_svcstats);
+#ifdef CONFIG_NFSD_V4
+ /* Show count for individual nfsv4 operations */
+ /* Writing operation numbers 0 1 2 also for maintaining uniformity */
+ seq_printf(seq,"proc4ops %u", LAST_NFS4_OP + 1);
+ for (i = 0; i <= LAST_NFS4_OP; i++)
+ seq_printf(seq, " %u", nfsdstats.nfs4_opcount[i]);
+
+ seq_putc(seq, '\n');
+#endif
+
return 0;
}
diff .prev/include/linux/nfs4.h ./include/linux/nfs4.h
--- .prev/include/linux/nfs4.h 2006-07-07 17:29:24.000000000 +1000
+++ ./include/linux/nfs4.h 2006-07-07 17:29:24.000000000 +1000
@@ -157,6 +157,12 @@ enum nfs_opnum4 {
OP_ILLEGAL = 10044,
};
+/*Defining first and last NFS4 operations implemented.
+Needs to be updated if more operations are defined in future.*/
+
+#define FIRST_NFS4_OP OP_ACCESS
+#define LAST_NFS4_OP OP_RELEASE_LOCKOWNER
+
enum nfsstat4 {
NFS4_OK = 0,
NFS4ERR_PERM = 1,
diff .prev/include/linux/nfsd/stats.h ./include/linux/nfsd/stats.h
--- .prev/include/linux/nfsd/stats.h 2006-07-07 17:29:24.000000000 +1000
+++ ./include/linux/nfsd/stats.h 2006-07-07 17:34:51.000000000 +1000
@@ -9,6 +9,8 @@
#ifndef LINUX_NFSD_STATS_H
#define LINUX_NFSD_STATS_H
+#include <linux/nfs4.h>
+
struct nfsd_stats {
unsigned int rchits; /* repcache hits */
unsigned int rcmisses; /* repcache hits */
@@ -27,6 +29,10 @@ struct nfsd_stats {
unsigned int ra_size; /* size of ra cache */
unsigned int ra_depth[11]; /* number of times ra entry was found that deep
* in the cache (10percentiles). [10] = not found */
+#ifdef CONFIG_NFSD_V4
+ unsigned int nfs4_opcount[LAST_NFS4_OP + 1]; /* count of individual nfsv4 operations */
+#endif
+
};
/* thread usage wraps very million seconds (approx one fortnight) */
next parent reply other threads:[~2006-07-07 7:47 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20060707174156.20585.patches@notabene>
2006-07-07 7:47 ` NeilBrown [this message]
2006-07-07 7:47 ` [PATCH] knfsd: nfsd4: add per-operation server stats NeilBrown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1060707074728.20633@suse.de \
--to=neilb@suse.de \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nfs@lists.sourceforge.net \
--cc=shanand@novell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.