From: Brian Foster <bfoster@redhat.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: Christoph Hellwig <hch@infradead.org>,
"Kirill A. Shutemov" <kirill@shutemov.name>,
linux-mm@kvack.org, linux-fsdevel@vger.kernel.org,
hannes@cmpxchg.org, clm@meta.com, linux-kernel@vger.kernel.org,
willy@infradead.org
Subject: Re: [PATCH 08/15] mm/filemap: add read support for RWF_UNCACHED
Date: Tue, 12 Nov 2024 14:39:32 -0500 [thread overview]
Message-ID: <ZzOu9G3whgonO8Ae@bfoster> (raw)
In-Reply-To: <b1dcd133-471f-40da-ab75-d78ea9a8fa4c@kernel.dk>
On Tue, Nov 12, 2024 at 12:08:45PM -0700, Jens Axboe wrote:
> On 11/12/24 11:44 AM, Brian Foster wrote:
> > On Tue, Nov 12, 2024 at 10:19:02AM -0700, Jens Axboe wrote:
> >> On 11/12/24 10:06 AM, Jens Axboe wrote:
> >>> On 11/12/24 9:39 AM, Brian Foster wrote:
> >>>> On Tue, Nov 12, 2024 at 08:14:28AM -0700, Jens Axboe wrote:
> >>>>> On 11/11/24 10:13 PM, Christoph Hellwig wrote:
> >>>>>> On Mon, Nov 11, 2024 at 04:42:25PM -0700, Jens Axboe wrote:
> >>>>>>> Here's the slightly cleaned up version, this is the one I ran testing
> >>>>>>> with.
> >>>>>>
> >>>>>> Looks reasonable to me, but you probably get better reviews on the
> >>>>>> fstests lists.
> >>>>>
> >>>>> I'll send it out once this patchset is a bit closer to integration,
> >>>>> there's the usual chicken and egg situation with it. For now, it's quite
> >>>>> handy for my testing, found a few issues with this version. So thanks
> >>>>> for the suggestion, sure beats writing more of your own test cases :-)
> >>>>>
> >>>>
> >>>> fsx support is probably a good idea as well. It's similar in idea to
> >>>> fsstress, but bashes the same file with mixed operations and includes
> >>>> data integrity validation checks as well. It's pretty useful for
> >>>> uncovering subtle corner case issues or bad interactions..
> >>>
> >>> Indeed, I did that too. Re-running xfstests right now with that too.
> >>
> >> Here's what I'm running right now, fwiw. It adds RWF_UNCACHED support
> >> for both the sync read/write and io_uring paths.
> >>
> >
> > Nice, thanks. Looks reasonable to me at first glance. A few randomish
> > comments inlined below.
> >
> > BTW, I should have also mentioned that fsx is also useful for longer
> > soak testing. I.e., fstests will provide a decent amount of coverage as
> > is via the various preexisting tests, but I'll occasionally run fsx
> > directly and let it run overnight or something to get the op count at
> > least up in the 100 millions or so to have a little more confidence
> > there isn't some rare/subtle bug lurking. That might be helpful with
> > something like this. JFYI.
>
> Good suggestion, I can leave it running overnight here as well. Since
> I'm not super familiar with it, what would be a good set of parameters
> to run it with?
>
Most things are on by default, so I'd probably just go with that. -p is
useful to get occasional status output on how many operations have
completed and you could consider increasing the max file size with -l,
but usually I don't use more than a few MB or so if I increase it at
all.
Random other thought: I also wonder if uncached I/O should be an
exclusive mode more similar to like how O_DIRECT or AIO is implemented.
But I dunno, maybe it doesn't matter that much (or maybe others will
have opinions on the fstests list).
Brian
> >> #define READ 0
> >> #define WRITE 1
> >> -#define fsxread(a,b,c,d) fsx_rw(READ, a,b,c,d)
> >> -#define fsxwrite(a,b,c,d) fsx_rw(WRITE, a,b,c,d)
> >> +#define fsxread(a,b,c,d,f) fsx_rw(READ, a,b,c,d,f)
> >> +#define fsxwrite(a,b,c,d,f) fsx_rw(WRITE, a,b,c,d,f)
> >>
> >
> > My pattern recognition brain wants to see an 'e' here. ;)
>
> This is a "check if reviewer has actually looked at it" check ;-)
>
> >> @@ -266,7 +273,9 @@ prterr(const char *prefix)
> >>
> >> static const char *op_names[] = {
> >> [OP_READ] = "read",
> >> + [OP_READ_UNCACHED] = "read_uncached",
> >> [OP_WRITE] = "write",
> >> + [OP_WRITE_UNCACHED] = "write_uncached",
> >> [OP_MAPREAD] = "mapread",
> >> [OP_MAPWRITE] = "mapwrite",
> >> [OP_TRUNCATE] = "truncate",
> >> @@ -393,12 +402,14 @@ logdump(void)
> >> prt("\t******WWWW");
> >> break;
> >> case OP_READ:
> >> + case OP_READ_UNCACHED:
> >> prt("READ 0x%x thru 0x%x\t(0x%x bytes)",
> >> lp->args[0], lp->args[0] + lp->args[1] - 1,
> >> lp->args[1]);
> >> if (overlap)
> >> prt("\t***RRRR***");
> >> break;
> >> + case OP_WRITE_UNCACHED:
> >> case OP_WRITE:
> >> prt("WRITE 0x%x thru 0x%x\t(0x%x bytes)",
> >> lp->args[0], lp->args[0] + lp->args[1] - 1,
> >> @@ -784,9 +795,8 @@ doflush(unsigned offset, unsigned size)
> >> }
> >>
> >> void
> >> -doread(unsigned offset, unsigned size)
> >> +__doread(unsigned offset, unsigned size, int flags)
> >> {
> >> - off_t ret;
> >> unsigned iret;
> >>
> >> offset -= offset % readbdy;
> >> @@ -818,23 +828,39 @@ doread(unsigned offset, unsigned size)
> >> (monitorend == -1 || offset <= monitorend))))))
> >> prt("%lld read\t0x%x thru\t0x%x\t(0x%x bytes)\n", testcalls,
> >> offset, offset + size - 1, size);
> >> - ret = lseek(fd, (off_t)offset, SEEK_SET);
> >> - if (ret == (off_t)-1) {
> >> - prterr("doread: lseek");
> >> - report_failure(140);
> >> - }
> >> - iret = fsxread(fd, temp_buf, size, offset);
> >> + iret = fsxread(fd, temp_buf, size, offset, flags);
> >> if (iret != size) {
> >> - if (iret == -1)
> >> - prterr("doread: read");
> >> - else
> >> + if (iret == -1) {
> >> + if (errno == EOPNOTSUPP && flags & RWF_UNCACHED) {
> >> + rwf_uncached = 1;
> >
> > I assume you meant rwf_uncached = 0 here?
>
> Indeed, good catch. Haven't tested this on a kernel without RWF_UNCACHED
> yet...
>
> > If so, check out test_fallocate() and friends to see how various
> > operations are tested for support before the test starts. Following that
> > might clean things up a bit.
>
> Sure, I can do something like that instead. fsx looks pretty old school
> in its design, was not expecting a static (and single) fd. But since we
> have that, we can do the probe and check. Just a basic read would be
> enough, with RWF_UNCACHED set.
>
> > Also it's useful to have a CLI option to enable/disable individual
> > features. That tends to be helpful to narrow things down when it does
> > happen to explode and you want to narrow down the cause.
>
> I can add a -U for "do not use uncached".
>
> --
> Jens Axboe
>
next prev parent reply other threads:[~2024-11-12 19:38 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-10 15:27 [PATCHSET v2 0/15] Uncached buffered IO Jens Axboe
2024-11-10 15:27 ` [PATCH 01/15] mm/filemap: change filemap_create_folio() to take a struct kiocb Jens Axboe
2024-11-10 15:27 ` [PATCH 02/15] mm/readahead: add folio allocation helper Jens Axboe
2024-11-10 15:27 ` [PATCH 03/15] mm: add PG_uncached page flag Jens Axboe
2024-11-10 15:27 ` [PATCH 04/15] mm/readahead: add readahead_control->uncached member Jens Axboe
2024-11-10 15:27 ` [PATCH 05/15] mm/filemap: use page_cache_sync_ra() to kick off read-ahead Jens Axboe
2024-11-10 15:27 ` [PATCH 06/15] mm/truncate: make invalidate_complete_folio2() public Jens Axboe
2024-11-10 15:27 ` [PATCH 07/15] fs: add RWF_UNCACHED iocb and FOP_UNCACHED file_operations flag Jens Axboe
2024-11-10 15:28 ` [PATCH 08/15] mm/filemap: add read support for RWF_UNCACHED Jens Axboe
2024-11-11 9:15 ` Kirill A. Shutemov
2024-11-11 14:12 ` Jens Axboe
2024-11-11 15:16 ` Christoph Hellwig
2024-11-11 15:17 ` Jens Axboe
2024-11-11 17:09 ` Jens Axboe
2024-11-11 23:42 ` Jens Axboe
2024-11-12 5:13 ` Christoph Hellwig
2024-11-12 15:14 ` Jens Axboe
2024-11-12 16:39 ` Brian Foster
2024-11-12 17:06 ` Jens Axboe
2024-11-12 17:19 ` Jens Axboe
2024-11-12 18:44 ` Brian Foster
2024-11-12 19:08 ` Jens Axboe
2024-11-12 19:39 ` Brian Foster [this message]
2024-11-12 19:45 ` Jens Axboe
2024-11-12 20:21 ` Brian Foster
2024-11-12 20:25 ` Jens Axboe
2024-11-13 14:07 ` Jens Axboe
2024-11-11 15:25 ` Kirill A. Shutemov
2024-11-11 15:31 ` Jens Axboe
2024-11-11 15:51 ` Kirill A. Shutemov
2024-11-11 15:57 ` Jens Axboe
2024-11-11 16:29 ` Kirill A. Shutemov
2024-11-10 15:28 ` [PATCH 09/15] mm/filemap: drop uncached pages when writeback completes Jens Axboe
2024-11-11 9:17 ` Kirill A. Shutemov
2024-11-10 15:28 ` [PATCH 10/15] mm/filemap: make buffered writes work with RWF_UNCACHED Jens Axboe
2024-11-10 15:28 ` [PATCH 11/15] mm: add FGP_UNCACHED folio creation flag Jens Axboe
2024-11-10 15:28 ` [PATCH 12/15] ext4: add RWF_UNCACHED write support Jens Axboe
2024-11-10 15:28 ` [PATCH 13/15] iomap: make buffered writes work with RWF_UNCACHED Jens Axboe
2024-11-10 15:28 ` [PATCH 14/15] xfs: punt uncached write completions to the completion wq Jens Axboe
2024-11-10 15:28 ` [PATCH 15/15] xfs: flag as supporting FOP_UNCACHED Jens Axboe
2024-11-11 15:27 ` Christoph Hellwig
2024-11-11 15:33 ` Jens Axboe
2024-11-11 17:25 ` [PATCHSET v2 0/15] Uncached buffered IO Matthew Wilcox
2024-11-11 17:39 ` Jens Axboe
2024-11-11 21:24 ` Yu Zhao
2024-11-11 21:48 ` Matthew Wilcox
2024-11-11 22:07 ` Yu Zhao
2024-11-20 23:11 ` Yuanchu Xie
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=ZzOu9G3whgonO8Ae@bfoster \
--to=bfoster@redhat.com \
--cc=axboe@kernel.dk \
--cc=clm@meta.com \
--cc=hannes@cmpxchg.org \
--cc=hch@infradead.org \
--cc=kirill@shutemov.name \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=willy@infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.