From: Pranjal Shrivastava <praan@google.com>
To: Anna Schumaker <anna@kernel.org>
Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
Trond Myklebust <trondmy@kernel.org>,
Christoph Hellwig <hch@lst.de>,
Christoph Hellwig <hch@infradead.org>,
Shivaji Kant <shivajikant@google.com>
Subject: Re: [PATCH v1 6/7] nfs: Optimize direct I/O to use folios for requests
Date: Tue, 16 Jun 2026 14:11:32 +0000 [thread overview]
Message-ID: <ajFZlPy5r1cR4SCc@google.com> (raw)
In-Reply-To: <aiEwUnZFZwwDPaQK@google.com>
On Thu, Jun 04, 2026 at 07:59:14AM +0000, Pranjal Shrivastava wrote:
> On Wed, Jun 03, 2026 at 03:14:35PM -0400, Anna Schumaker wrote:
> > Hi Pranjal,
> >
> > On Wed, Jun 3, 2026, at 1:30 AM, Pranjal Shrivastava wrote:
> > > Optimize nfs_direct_extract_pages() to group contiguous pages from the
> > > same folio into single nfs_page structures. This effectively migrates
> > > NFS Direct I/O from being page-based to being folio-based.
> > >
> > > Reduce the number of nfs_page allocations and subsequent iterations
> > > by utilizing nfs_page_create_from_folio() to create aggregated
> > > requests.
> >
> > I am seeing a LOT of failing xfstests after applying this patch (testing
> > against various NFS versions over TCP with AUTH_SYS):
> >
> > +-------------+-----------+-------------+-------------+-------------+
> > | testcase | tcp-sys-3 | tcp-sys-4.0 | tcp-sys-4.1 | tcp-sys-4.2 |
> > +-------------+-----------+-------------+-------------+-------------+
> > | generic/091 | failure | failure | failure | failure |
> > | generic/130 | failure | failure | failure | failure |
> > | generic/139 | skipped | skipped | skipped | failure |
> > | generic/143 | skipped | skipped | skipped | failure |
> > | generic/154 | skipped | skipped | skipped | failure |
> > | generic/155 | skipped | skipped | skipped | failure |
> > | generic/183 | skipped | skipped | skipped | failure |
> > | generic/188 | skipped | skipped | skipped | failure |
> > | generic/190 | skipped | skipped | skipped | failure |
> > | generic/196 | skipped | skipped | skipped | failure |
> > | generic/198 | failure | failure | failure | failure |
> > | generic/203 | skipped | skipped | skipped | failure |
> > | generic/214 | skipped | skipped | skipped | failure |
> > | generic/240 | failure | failure | failure | failure |
> > | generic/263 | failure | failure | failure | failure |
> > | generic/287 | skipped | skipped | skipped | failure |
> > | generic/290 | skipped | skipped | skipped | failure |
> > | generic/292 | skipped | skipped | skipped | failure |
> > | generic/330 | skipped | skipped | skipped | failure |
> > | generic/444 | failure | skipped | skipped | skipped |
> > | generic/450 | failure | failure | failure | failure |
> > | generic/451 | failure | failure | failure | failure |
> > | generic/586 | skipped | skipped | skipped | failure |
> > | generic/647 | failure | failure | failure | failure |
> > | generic/708 | failure | failure | failure | failure |
> > | generic/729 | failure | failure | failure | failure |
> > | generic/760 | failure | failure | failure | failure |
> > +-------------+-----------+-------------+-------------+-------------+
> >
> > I'm curious if you've run xfstests against your changes, and if you
> > see the same failures?
> >
Hi Anna,
I was able to run xfstests [1] and identify the issues. I've fixed those
issues and posted a v2 [2]. I don't see any failure, here's a run v2:
./check generic/091 generic/130 generic/139 generic/143 generic/154 \
generic/155 generic/183 generic/188 generic/190 generic/196 \
generic/198 generic/203 generic/214 generic/240 generic/263 \
generic/287 generic/290 generic/292 generic/330 generic/444 \
generic/450 generic/451 generic/586 generic/647 generic/708 \
generic/729 generic/760
SECTION -- rdma3
=========================
Ran: generic/091 generic/130 generic/139 generic/143 generic/154
generic/155 generic/183 generic/188 generic/190 generic/196
generic/198 generic/203 generic/214 generic/240 generic/263
generic/287 generic/290 generic/292 generic/330 generic/444
generic/450 generic/451 generic/586 generic/647 generic/708
generic/729 generic/760
Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444
Passed all 27 tests
SECTION -- rdma40
=========================
Ran: generic/091 generic/130 generic/139 generic/143 generic/154
generic/155 generic/183 generic/188 generic/190 generic/196
generic/198 generic/203 generic/214 generic/240 generic/263
generic/287 generic/290 generic/292 generic/330 generic/444
generic/450 generic/451 generic/586 generic/647 generic/708
generic/729 generic/760
Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444
Passed all 27 tests
SECTION -- rdma41
=========================
Ran: generic/091 generic/130 generic/139 generic/143 generic/154
generic/155 generic/183 generic/188 generic/190 generic/196
generic/198 generic/203 generic/214 generic/240 generic/263
generic/287 generic/290 generic/292 generic/330 generic/444
generic/450 generic/451 generic/586 generic/647 generic/708
generic/729 generic/760
Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444
Passed all 27 tests
SECTION -- rdma42
=========================
Ran: generic/091 generic/130 generic/139 generic/143 generic/154
generic/155 generic/183 generic/188 generic/190 generic/196
generic/198 generic/203 generic/214 generic/240 generic/263
generic/287 generic/290 generic/292 generic/330 generic/444
generic/450 generic/451 generic/586 generic/647 generic/708
generic/729 generic/760
Not run: generic/444
Passed all 27 tests
SECTION -- tcp3
=========================
Ran: generic/091 generic/130 generic/139 generic/143 generic/154
generic/155 generic/183 generic/188 generic/190 generic/196
generic/198 generic/203 generic/214 generic/240 generic/263
generic/287 generic/290 generic/292 generic/330 generic/444
generic/450 generic/451 generic/586 generic/647 generic/708
generic/729 generic/760
Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444
Passed all 27 tests
SECTION -- tcp40
=========================
Ran: generic/091 generic/130 generic/139 generic/143 generic/154
generic/155 generic/183 generic/188 generic/190 generic/196
generic/198 generic/203 generic/214 generic/240 generic/263
generic/287 generic/290 generic/292 generic/330 generic/444
generic/450 generic/451 generic/586 generic/647 generic/708
generic/729 generic/760
Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444
Passed all 27 tests
SECTION -- tcp41
=========================
Ran: generic/091 generic/130 generic/139 generic/143 generic/154
generic/155 generic/183 generic/188 generic/190 generic/196
generic/198 generic/203 generic/214 generic/240 generic/263
generic/287 generic/290 generic/292 generic/330 generic/444
generic/450 generic/451 generic/586 generic/647 generic/708
generic/729 generic/760
Not run: generic/183 generic/188 generic/190 generic/196 generic/203 generic/287 generic/290 generic/292 generic/330 generic/444
Passed all 27 tests
SECTION -- tcp42
=========================
Ran: generic/091 generic/130 generic/139 generic/143 generic/154
generic/155 generic/183 generic/188 generic/190 generic/196
generic/198 generic/203 generic/214 generic/240 generic/263
generic/287 generic/290 generic/292 generic/330 generic/444
generic/450 generic/451 generic/586 generic/647 generic/708
generic/729 generic/760
Not run: generic/444
Passed all 27 tests
I couldn't figure out the tool used to generate that table, so I wrote
a small script [3] that picked up logs from each run in results/* dir.
$ python3 display.py results/*/check.log
+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+
| testcase | rdma-sys-3 | rdma-sys-4.0 | rdma-sys-4.1 | rdma-sys-4.2 | tcp-sys-3 | tcp-sys-4.0 | tcp-sys-4.1 | tcp-sys-4.2 |
+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+
| generic/091 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/130 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/139 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/143 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/154 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/155 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/183 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/188 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/190 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/196 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/198 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/203 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/214 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/240 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/263 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/287 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/290 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/292 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/330 | skipped | skipped | skipped | pass | skipped | skipped | skipped | pass |
| generic/444 | skipped | skipped | skipped | skipped | skipped | skipped | skipped | skipped |
| generic/450 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/451 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/586 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/647 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/708 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/729 | pass | pass | pass | pass | pass | pass | pass | pass |
| generic/760 | pass | pass | pass | pass | pass | pass | pass | pass |
+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+
Thanks,
Praan
[1] https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git
[2] https://lore.kernel.org/all/20260616134000.2733403-1-praan@google.com/
[3] https://github.com/pran005/tools/blob/main/display.py
next prev parent reply other threads:[~2026-06-16 14:11 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-03 5:30 [PATCH v1 0/7] nfs: Modernize Direct I/O path Pranjal Shrivastava
2026-06-03 5:30 ` [PATCH v1 1/7] nfs: make nfs_page pin-aware Pranjal Shrivastava
2026-06-03 16:39 ` Anna Schumaker
2026-06-04 7:51 ` Pranjal Shrivastava
2026-06-03 5:30 ` [PATCH v1 2/7] nfs: Track number of pinned pages in nfs_page Pranjal Shrivastava
2026-06-03 5:30 ` [PATCH v1 3/7] nfs: Introduce nfs_release_request_list helper Pranjal Shrivastava
2026-06-03 5:30 ` [PATCH v1 4/7] nfs: migrate direct I/O to iov_iter_extract_pages Pranjal Shrivastava
2026-06-03 5:30 ` [PATCH v1 5/7] nfs: introduce nfs_direct_extract_pages helper Pranjal Shrivastava
2026-06-03 5:30 ` [PATCH v1 6/7] nfs: Optimize direct I/O to use folios for requests Pranjal Shrivastava
2026-06-03 19:14 ` Anna Schumaker
2026-06-04 7:59 ` Pranjal Shrivastava
2026-06-16 14:11 ` Pranjal Shrivastava [this message]
2026-06-03 5:30 ` [PATCH v1 7/7] nfs: Cleanup the nfs_page_create_from_page helper Pranjal Shrivastava
2026-06-03 5:33 ` [PATCH v1 0/7] nfs: Modernize Direct I/O path Pranjal Shrivastava
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=ajFZlPy5r1cR4SCc@google.com \
--to=praan@google.com \
--cc=anna@kernel.org \
--cc=hch@infradead.org \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=shivajikant@google.com \
--cc=trondmy@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