lkml.org 
[lkml]   [2009]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 36/43] NFS: Add some new I/O counters for FS-Cache doing things for NFS [ver #46]
    Date
    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>
    ---

    fs/nfs/iostat.h | 18 ++++++++++++++++++
    fs/nfs/super.c | 11 +++++++++++
    include/linux/nfs_iostat.h | 12 ++++++++++++
    3 files changed, 41 insertions(+), 0 deletions(-)


    diff --git a/fs/nfs/iostat.h b/fs/nfs/iostat.h
    index a369528..a2ab252 100644
    --- a/fs/nfs/iostat.h
    +++ b/fs/nfs/iostat.h
    @@ -16,6 +16,9 @@

    struct nfs_iostats {
    unsigned long long bytes[__NFSIOS_BYTESMAX];
    +#ifdef CONFIG_NFS_FSCACHE
    + unsigned long long fscache[__NFSIOS_FSCACHEMAX];
    +#endif
    unsigned long events[__NFSIOS_COUNTSMAX];
    } ____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);
    }

    +#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)
    {
    return alloc_percpu(struct nfs_iostats);
    diff --git a/fs/nfs/super.c b/fs/nfs/super.c
    index 87f65ae..b5fea77 100644
    --- a/fs/nfs/super.c
    +++ b/fs/nfs/super.c
    @@ -642,6 +642,10 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
    totals.events[i] += stats->events[i];
    for (i = 0; i < __NFSIOS_BYTESMAX; 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();
    }
    @@ -652,6 +656,13 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
    seq_printf(m, "\n\tbytes:\t");
    for (i = 0; i < __NFSIOS_BYTESMAX; 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");

    rpc_print_iostats(m, nfss->client);
    diff --git a/include/linux/nfs_iostat.h b/include/linux/nfs_iostat.h
    index 1cb9a3f..68b10f5 100644
    --- a/include/linux/nfs_iostat.h
    +++ b/include/linux/nfs_iostat.h
    @@ -116,4 +116,16 @@ enum nfs_stat_eventcounters {
    __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 */


    \
     
     \ /
      Last update: 2009-04-02 01:27    [W:0.035 / U:31.384 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site