The Linux Kernel Mailing List
 help / color / mirror / Atom feed
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

  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