NFS: Add some new I/O counters for FS-Cache doing things for NFS
Add some new NFS I/O counters for FS-Cache doing things for NFS. A new line is emitted into /proc/pid/mountstats if caching is enabled that looks like: fsc: <rok> <rfl> <wok> <wfl> <unc> Where <rok> is the number of pages read successfully from the cache, <rfl> is the number of failed page reads against the cache, <wok> is the number of successful page writes to the cache, <wfl> is the number of failed page writes to the cache, and <unc> is the number of NFS pages that have been disconnected from the cache. Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Steve Dickson <steved@redhat.com> Acked-by: Trond Myklebust <Trond.Myklebust@netapp.com> Acked-by: Al Viro <viro@zeniv.linux.org.uk> Tested-by: Daire Byrne <Daire.Byrne@framestore.com>
This commit is contained in:
parent
d599064a1b
commit
6a51091d07
|
@ -16,6 +16,9 @@
|
||||||
|
|
||||||
struct nfs_iostats {
|
struct nfs_iostats {
|
||||||
unsigned long long bytes[__NFSIOS_BYTESMAX];
|
unsigned long long bytes[__NFSIOS_BYTESMAX];
|
||||||
|
#ifdef CONFIG_NFS_FSCACHE
|
||||||
|
unsigned long long fscache[__NFSIOS_FSCACHEMAX];
|
||||||
|
#endif
|
||||||
unsigned long events[__NFSIOS_COUNTSMAX];
|
unsigned long events[__NFSIOS_COUNTSMAX];
|
||||||
} ____cacheline_aligned;
|
} ____cacheline_aligned;
|
||||||
|
|
||||||
|
@ -57,6 +60,21 @@ static inline void nfs_add_stats(const struct inode *inode,
|
||||||
nfs_add_server_stats(NFS_SERVER(inode), stat, addend);
|
nfs_add_server_stats(NFS_SERVER(inode), stat, addend);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_NFS_FSCACHE
|
||||||
|
static inline void nfs_add_fscache_stats(struct inode *inode,
|
||||||
|
enum nfs_stat_fscachecounters stat,
|
||||||
|
unsigned long addend)
|
||||||
|
{
|
||||||
|
struct nfs_iostats *iostats;
|
||||||
|
int cpu;
|
||||||
|
|
||||||
|
cpu = get_cpu();
|
||||||
|
iostats = per_cpu_ptr(NFS_SERVER(inode)->io_stats, cpu);
|
||||||
|
iostats->fscache[stat] += addend;
|
||||||
|
put_cpu_no_resched();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline struct nfs_iostats *nfs_alloc_iostats(void)
|
static inline struct nfs_iostats *nfs_alloc_iostats(void)
|
||||||
{
|
{
|
||||||
return alloc_percpu(struct nfs_iostats);
|
return alloc_percpu(struct nfs_iostats);
|
||||||
|
|
|
@ -642,6 +642,10 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
|
||||||
totals.events[i] += stats->events[i];
|
totals.events[i] += stats->events[i];
|
||||||
for (i = 0; i < __NFSIOS_BYTESMAX; i++)
|
for (i = 0; i < __NFSIOS_BYTESMAX; i++)
|
||||||
totals.bytes[i] += stats->bytes[i];
|
totals.bytes[i] += stats->bytes[i];
|
||||||
|
#ifdef CONFIG_NFS_FSCACHE
|
||||||
|
for (i = 0; i < __NFSIOS_FSCACHEMAX; i++)
|
||||||
|
totals.fscache[i] += stats->fscache[i];
|
||||||
|
#endif
|
||||||
|
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
}
|
}
|
||||||
|
@ -652,6 +656,13 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
|
||||||
seq_printf(m, "\n\tbytes:\t");
|
seq_printf(m, "\n\tbytes:\t");
|
||||||
for (i = 0; i < __NFSIOS_BYTESMAX; i++)
|
for (i = 0; i < __NFSIOS_BYTESMAX; i++)
|
||||||
seq_printf(m, "%Lu ", totals.bytes[i]);
|
seq_printf(m, "%Lu ", totals.bytes[i]);
|
||||||
|
#ifdef CONFIG_NFS_FSCACHE
|
||||||
|
if (nfss->options & NFS_OPTION_FSCACHE) {
|
||||||
|
seq_printf(m, "\n\tfsc:\t");
|
||||||
|
for (i = 0; i < __NFSIOS_FSCACHEMAX; i++)
|
||||||
|
seq_printf(m, "%Lu ", totals.bytes[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
seq_printf(m, "\n");
|
seq_printf(m, "\n");
|
||||||
|
|
||||||
rpc_print_iostats(m, nfss->client);
|
rpc_print_iostats(m, nfss->client);
|
||||||
|
|
|
@ -116,4 +116,16 @@ enum nfs_stat_eventcounters {
|
||||||
__NFSIOS_COUNTSMAX,
|
__NFSIOS_COUNTSMAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NFS local caching servicing counters
|
||||||
|
*/
|
||||||
|
enum nfs_stat_fscachecounters {
|
||||||
|
NFSIOS_FSCACHE_PAGES_READ_OK,
|
||||||
|
NFSIOS_FSCACHE_PAGES_READ_FAIL,
|
||||||
|
NFSIOS_FSCACHE_PAGES_WRITTEN_OK,
|
||||||
|
NFSIOS_FSCACHE_PAGES_WRITTEN_FAIL,
|
||||||
|
NFSIOS_FSCACHE_PAGES_UNCACHED,
|
||||||
|
__NFSIOS_FSCACHEMAX,
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* _LINUX_NFS_IOSTAT */
|
#endif /* _LINUX_NFS_IOSTAT */
|
||||||
|
|
Loading…
Reference in New Issue