mirror of https://gitee.com/openkylin/linux.git
[PATCH] knfsd: nfsd4: add per-operation server stats
Add an 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> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
cd6b3956e9
commit
e2b209509c
|
@ -721,6 +721,12 @@ nfsd4_proc_null(struct svc_rqst *rqstp, void *argp, void *resp)
|
|||
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 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
|
|||
/* 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:
|
||||
|
|
|
@ -72,6 +72,16 @@ static int nfsd_proc_show(struct seq_file *seq, void *v)
|
|||
/* 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) */
|
||||
|
|
Loading…
Reference in New Issue