Thread (3 messages) 3 messages, 2 authors, 2023-03-14

Re: [PATCH 1/1] NFS: Fix /proc/PID/io read_bytes for buffered reads

From: Daire Byrne <hidden>
Date: 2023-03-14 20:28:33

Thanks Dave.

I can confirm that this does indeed fix the reporting of
/proc/PID/read_bytes for us. I actually applied it (cleanly) to our
v5.18 based kernel as we use that in production on our render farm.

We use the read_bytes in our post render statistics to help track per render IO.

Tested-by: Daire Byrne <redacted>


On Thu, 9 Mar 2023 at 19:00, Dave Wysochanski [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Prior to commit 8786fde8421c ("Convert NFS from readpages to
readahead"), nfs_readpages() used the old mm interface read_cache_pages()
which called task_io_account_read() for each NFS page read.  After
this commit, nfs_readpages() is converted to nfs_readahead(), which
now uses the new mm interface readahead_page().  The new interface
requires callers to call task_io_account_read() themselves.
In addition, to nfs_readahead() task_io_account_read() should also
be called from nfs_read_folio().

Fixes: 8786fde8421c ("Convert NFS from readpages to readahead")
Link: https://lore.kernel.org/linux-nfs/CAPt2mGNEYUk5u8V4abe=5MM5msZqmvzCVrtCP4Qw1n=gCHCnww@mail.gmail.com/ (local)
Signed-off-by: Dave Wysochanski <redacted>
---
 fs/nfs/read.c | 3 +++
 1 file changed, 3 insertions(+)
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index c380cff4108e..e90988591df4 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -15,6 +15,7 @@
 #include <linux/stat.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
+#include <linux/task_io_accounting_ops.h>
 #include <linux/pagemap.h>
 #include <linux/sunrpc/clnt.h>
 #include <linux/nfs_fs.h>
@@ -337,6 +338,7 @@ int nfs_read_folio(struct file *file, struct folio *folio)

        trace_nfs_aop_readpage(inode, folio);
        nfs_inc_stats(inode, NFSIOS_VFSREADPAGE);
+       task_io_account_read(folio_size(folio));

        /*
         * Try to flush any pending writes to the file..
@@ -393,6 +395,7 @@ void nfs_readahead(struct readahead_control *ractl)

        trace_nfs_aop_readahead(inode, readahead_pos(ractl), nr_pages);
        nfs_inc_stats(inode, NFSIOS_VFSREADPAGES);
+       task_io_account_read(readahead_length(ractl));

        ret = -ESTALE;
        if (NFS_STALE(inode))
--
2.31.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help