linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Wysochanski <dwysocha@redhat.com>
To: Chuck Lever III <chuck.lever@oracle.com>
Cc: Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH RFC 5/5] NFS: Replace dprintk callsites in nfs_readpage(s)
Date: Thu, 7 Oct 2021 11:25:52 -0400	[thread overview]
Message-ID: <CALF+zOnHf04LYt-weSB2vwpLZNZMe71_r-dOc2uztnwmJQesHQ@mail.gmail.com> (raw)
In-Reply-To: <027FEF08-ABD1-47D1-A527-67B4F2184C43@oracle.com>

On Thu, Oct 7, 2021 at 11:01 AM Chuck Lever III <chuck.lever@oracle.com> wrote:
>
>
>
> > On Oct 7, 2021, at 9:05 AM, David Wysochanski <dwysocha@redhat.com> wrote:
> >
> > On Tue, Oct 5, 2021 at 1:14 PM Chuck Lever <chuck.lever@oracle.com> wrote:
> > >
> > > There are two new events that report slightly different information
> > > for readpage and readpages.
> > >
> > > For readpage:
> > >              fsx-1387  [006]   380.761896: nfs_aops_readpage:    fileid=00:28:2 fhandle=0x36fbbe51 version=1752899355910932437 page_index=32
> > >
> > > The index of a synchronous single-page read is reported.
> > >
> > > For readpages:
> > >
> > >              fsx-1387  [006]   380.760847: nfs_aops_readpages:   fileid=00:28:2 fhandle=0x36fbbe51 version=1752899355909932456 nr_pages=3
> > >
> > > The count of pages requested is reported. readpages does not wait
> > > for the READ requests to complete.
> > >
> > > Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
> > > ---
> > >  fs/nfs/nfstrace.h |   70 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> > >  fs/nfs/read.c     |    8 ++----
> > >  2 files changed, 72 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/fs/nfs/nfstrace.h b/fs/nfs/nfstrace.h
> > > index e9be65b52bfe..0534d090ee55 100644
> > > --- a/fs/nfs/nfstrace.h
> > > +++ b/fs/nfs/nfstrace.h
> > > @@ -862,6 +862,76 @@ TRACE_EVENT(nfs_sillyrename_unlink,
> > >                 )
> > >  );
> > >
> > > +TRACE_EVENT(nfs_aops_readpage,
> > > +               TP_PROTO(
> > > +                       const struct inode *inode,
> > > +                       struct page *page
> > > +               ),
> > > +
> > > +               TP_ARGS(inode, page),
> > > +
> > > +               TP_STRUCT__entry(
> > > +                       __field(dev_t, dev)
> > > +                       __field(u32, fhandle)
> > > +                       __field(u64, fileid)
> > > +                       __field(u64, version)
> > > +                       __field(pgoff_t, index)
> > > +               ),
> > > +
> > > +               TP_fast_assign(
> > > +                       const struct nfs_inode *nfsi = NFS_I(inode);
> > > +
> > > +                       __entry->dev = inode->i_sb->s_dev;
> > > +                       __entry->fileid = nfsi->fileid;
> > > +                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
> > > +                       __entry->version = inode_peek_iversion_raw(inode);
> > > +                       __entry->index = page_index(page);
> > > +               ),
> > > +
> > > +               TP_printk(
> > > +                       "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu page_index=%lu",
> > > +                       MAJOR(__entry->dev), MINOR(__entry->dev),
> > > +                       (unsigned long long)__entry->fileid,
> > > +                       __entry->fhandle, __entry->version,
> > > +                       __entry->index
> > > +               )
> > > +);
> > > +
> > > +TRACE_EVENT(nfs_aops_readpages,
> > > +               TP_PROTO(
> > > +                       const struct inode *inode,
> > > +                       unsigned int nr_pages
> > > +               ),
> > > +
> > > +               TP_ARGS(inode, nr_pages),
> > > +
> > > +               TP_STRUCT__entry(
> > > +                       __field(dev_t, dev)
> > > +                       __field(u32, fhandle)
> > > +                       __field(u64, fileid)
> > > +                       __field(u64, version)
> > > +                       __field(unsigned int, nr_pages)
> > > +               ),
> > > +
> > > +               TP_fast_assign(
> > > +                       const struct nfs_inode *nfsi = NFS_I(inode);
> > > +
> > > +                       __entry->dev = inode->i_sb->s_dev;
> > > +                       __entry->fileid = nfsi->fileid;
> > > +                       __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
> > > +                       __entry->version = inode_peek_iversion_raw(inode);
> > > +                       __entry->nr_pages = nr_pages;
> > > +               ),
> > > +
> > > +               TP_printk(
> > > +                       "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u",
> > > +                       MAJOR(__entry->dev), MINOR(__entry->dev),
> > > +                       (unsigned long long)__entry->fileid,
> > > +                       __entry->fhandle, __entry->version,
> > > +                       __entry->nr_pages
> > > +               )
> > > +);
> > > +
> > >  TRACE_EVENT(nfs_initiate_read,
> > >                 TP_PROTO(
> > >                         const struct nfs_pgio_header *hdr
> > > diff --git a/fs/nfs/read.c b/fs/nfs/read.c
> > > index 08d6cc57cbc3..94690eda2a88 100644
> > > --- a/fs/nfs/read.c
> > > +++ b/fs/nfs/read.c
> > > @@ -337,8 +337,7 @@ int nfs_readpage(struct file *file, struct page *page)
> > >         struct inode *inode = page_file_mapping(page)->host;
> > >         int ret;
> > >
> > > -       dprintk("NFS: nfs_readpage (%p %ld@%lu)\n",
> > > -               page, PAGE_SIZE, page_index(page));
> > > +       trace_nfs_aops_readpage(inode, page);
> > >         nfs_inc_stats(inode, NFSIOS_VFSREADPAGE);
> > >
> > >         /*
> > > @@ -403,10 +402,7 @@ int nfs_readpages(struct file *file, struct address_space *mapping,
> > >         struct inode *inode = mapping->host;
> > >         int ret;
> > >
> > > -       dprintk("NFS: nfs_readpages (%s/%Lu %d)\n",
> > > -                       inode->i_sb->s_id,
> > > -                       (unsigned long long)NFS_FILEID(inode),
> > > -                       nr_pages);
> > > +       trace_nfs_aops_readpages(inode, nr_pages);
> > >         nfs_inc_stats(inode, NFSIOS_VFSREADPAGES);
> > >
> > >         ret = -ESTALE;
> > >
> > >
> >
> > I added this on top of my fscache patches and have been testing.
> > Should we be tracing (only?) the return point with the return
> > value?
>
> The purpose of the entry point is: you get a timestamp, filehandle
> information, and you know what is driving the READ request (sync
> read or async readahead).
>
> There is a dprintk() at the top of the function as well as a
> performance metric counter, but there currently isn't a dprintk()
> at the bottom of the function. So I assumed the return code is
> not a critical piece of information. I'm willing to be educated,
> though.
>

Well, I was trying to understand the various approaches in nfstrace.h.
There are tracepoints that are paired with entry and exit, but I guess
these have multiple pieces of information that may change from
start to finish.  Examples:
nfs_refresh_inode_enter
nfs_refresh_inode_exit
nfs_lookup_revalidate_enter
nfs_lookup_revalidate_exit

> A return point trace event could be generated only when there
> is an unexpected error condition, for example, to reduce trace
> log noise?
>
Ok so you would just add a second tracepoint for non-zero returns?

>
> >          bigfile-6279    [004] ..... 11550.387232: nfs_aops_readpages: fileid=00:2f:26127 fhandle=0xb6d0e8f0 version=1633611037513339503 nr_pages=32
> >          bigfile-6279    [004] ..... 11550.387236: nfs_fscache_page_event_read: fileid=00:2f:26127 fhandle=0xb6d0e8f0 offset=0 count=4096
> >          bigfile-6279    [004] ..... 11550.387237: nfs_fscache_page_event_read_done: fileid=00:2f:26127 fhandle=0xb6d0e8f0 offset=0 count=4096 error=-105
> >          bigfile-6279    [004] ..... 11550.387248: nfs_fscache_page_event_read: fileid=00:2f:26127 fhandle=0xb6d0e8f0 offset=4096 count=4096
> >          bigfile-6279    [004] ..... 11550.387248: nfs_fscache_page_event_read_done: fileid=00:2f:26127 fhandle=0xb6d0e8f0 offset=4096 count=4096 error=-105
> >          bigfile-6279    [004] ..... 11550.387250: nfs_fscache_page_event_read: fileid=00:2f:26127 fhandle=0xb6d0e8f0 offset=8192 count=4096
> >          bigfile-6279    [004] ..... 11550.387250: nfs_fscache_page_event_read_done: fileid=00:2f:26127 fhandle=0xb6d0e8f0 offset=8192 count=4096 error=-105

Example:
bigfile-6279    [004] ..... 11550.387252: nfs_aops_readpages_error:
fileid=00:2f:26127 fhandle=0xb6d0e8f0 version=1633611037513339503
nr_pages=6 error=-5



>
> --
> Chuck Lever
>
>
>


  reply	other threads:[~2021-10-07 15:26 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-05 17:13 [PATCH RFC 0/5] Update RPC task pid as displayed by tracepoints Chuck Lever
2021-10-05 17:14 ` [PATCH RFC 1/5] SUNRPC: Tracepoints should display tk_pid and cl_clid as a fixed-size field Chuck Lever
2021-10-05 17:14 ` [PATCH RFC 2/5] SUNRPC: Avoid NULL pointer dereferences in tracepoints Chuck Lever
2021-10-05 17:14 ` [PATCH RFC 3/5] SUNRPC: Use BIT() macro in rpc_show_xprt_state() Chuck Lever
2021-10-05 17:14 ` [PATCH RFC 4/5] SUNRPC: Don't dereference xprt->snd_task if it's a cookie Chuck Lever
2021-10-05 17:14 ` [PATCH RFC 5/5] NFS: Replace dprintk callsites in nfs_readpage(s) Chuck Lever
2021-10-05 17:24   ` Chuck Lever III
     [not found]   ` <CALF+zOmKJTg-qx2J69QZAhG7KQOfra9noR5=bmaLfAFg1kZf-g@mail.gmail.com>
2021-10-07 15:01     ` Chuck Lever III
2021-10-07 15:25       ` David Wysochanski [this message]
2021-10-07 15:31         ` Chuck Lever III

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=CALF+zOnHf04LYt-weSB2vwpLZNZMe71_r-dOc2uztnwmJQesHQ@mail.gmail.com \
    --to=dwysocha@redhat.com \
    --cc=chuck.lever@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).