From: Eric Biggers <ebiggers@kernel.org>
To: Keith Busch <kbusch@kernel.org>
Cc: Keith Busch <kbusch@meta.com>,
linux-block@vger.kernel.org, linux-ext4@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
axboe@kernel.dk, brauner@kernel.org, aalbersh@kernel.org,
jack@suse.cz, tytso@mit.edu, jaegeuk@kernel.org, cem@kernel.org
Subject: Re: [PATCHv2 0/5] direct-io file extended attributes
Date: Fri, 10 Jul 2026 20:24:12 -0400 [thread overview]
Message-ID: <20260711002412.GG1911@quark> (raw)
In-Reply-To: <alF5BHEZ5czyJWaY@kbusch-mbp>
On Fri, Jul 10, 2026 at 04:58:12PM -0600, Keith Busch wrote:
> On Fri, Jul 10, 2026 at 05:53:28PM -0400, Eric Biggers wrote:
> > On Fri, Jul 10, 2026 at 02:06:41PM -0700, Keith Busch via Linux-f2fs-devel wrote:
> > > From: Keith Busch <kbusch@kernel.org>
> > >
> > > The attributes reported through statx are incomplete for applications to
> > > fully know exactly how IO construction is valid or not. The statx call
> > > can report minimum memory alignment and total granularity, but it
> > > doesn't show the underlying gap boundary requirements or max segments
> > > per granule.
> > >
> > > This series adds the minimum to the extended file attributes through
> > > file_getattr. I hear this is the preferred interface for reporting such
> > > things over adding more fields to statx. In order to get everything
> > > under a single syscall, some of the attributes are duplicated from
> > > statx.
> >
> > Okay, in v2 we at least now know that the existing statx UAPI was
> > considered. Could you give a specific real-world example (with the
> > actual values of each parameter) where it's not sufficient? Without
> > that there isn't really any way to evaluate this proposal.
>
> Yes, we can consider nvme. This protocol supports two different transfer
> modes called PRP and SGL. PRP requires 4k aligned segments, though you
> can have an arbitrary 4-byte aligned offset at the start. SGL on the
> other hand allows completely arbitrary size and alignments for each
> segment.
>
> statx reports information sufficient to know that you can have dword
> aligned page offsets for a virtually contiguous buffer, but it doesn't
> report PRP's boundary gap requirement, so applications can't tell if the
> file follows PRP or SGL rules for direct-io.
>
> And if you have a device using SGL, statx doesn't report the max number
> of sub-sector segments you can submit in a single command.
>
> This series provides both limits so user space has the complete picture.
>
> A typical nvme that supports only PRP has a DMA alignment of 4 bytes, a
> dio offset alignment of 4k, and a virtual boundary of 4k.
So each segment's length has to be a multiple of 4k, *and* it has to end
on a 4k aligned memory address? That implies the segment begins at a 4k
aligned memory address as well, which is just stx_dio_mem_align=4k.
What am I missing?
What is a specific example of an I/O request that you'd like to be able
to submit that the existing UAPI can't declare support for?
> If SGL were supported, there would be no virtual boundary gap, and max
> segments is 256.
Can you elaborate on why DIO users need to know max_segments?
I'm worried about the UAPI duplication, as well as it going to be very
difficult for userspace to correctly use this information. With just
the two alignments there's at least a chance of them getting it right.
If we throw virt_boundary_mask and max_segments into the mix, I don't
think there's much chance.
- Eric
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: Keith Busch <kbusch@kernel.org>
Cc: axboe@kernel.dk, linux-xfs@vger.kernel.org, brauner@kernel.org,
aalbersh@kernel.org, Keith Busch <kbusch@meta.com>,
cem@kernel.org, linux-f2fs-devel@lists.sourceforge.net,
linux-block@vger.kernel.org, tytso@mit.edu, jaegeuk@kernel.org,
linux-fsdevel@vger.kernel.org, jack@suse.cz,
linux-ext4@vger.kernel.org
Subject: Re: [f2fs-dev] [PATCHv2 0/5] direct-io file extended attributes
Date: Fri, 10 Jul 2026 20:24:12 -0400 [thread overview]
Message-ID: <20260711002412.GG1911@quark> (raw)
In-Reply-To: <alF5BHEZ5czyJWaY@kbusch-mbp>
On Fri, Jul 10, 2026 at 04:58:12PM -0600, Keith Busch wrote:
> On Fri, Jul 10, 2026 at 05:53:28PM -0400, Eric Biggers wrote:
> > On Fri, Jul 10, 2026 at 02:06:41PM -0700, Keith Busch via Linux-f2fs-devel wrote:
> > > From: Keith Busch <kbusch@kernel.org>
> > >
> > > The attributes reported through statx are incomplete for applications to
> > > fully know exactly how IO construction is valid or not. The statx call
> > > can report minimum memory alignment and total granularity, but it
> > > doesn't show the underlying gap boundary requirements or max segments
> > > per granule.
> > >
> > > This series adds the minimum to the extended file attributes through
> > > file_getattr. I hear this is the preferred interface for reporting such
> > > things over adding more fields to statx. In order to get everything
> > > under a single syscall, some of the attributes are duplicated from
> > > statx.
> >
> > Okay, in v2 we at least now know that the existing statx UAPI was
> > considered. Could you give a specific real-world example (with the
> > actual values of each parameter) where it's not sufficient? Without
> > that there isn't really any way to evaluate this proposal.
>
> Yes, we can consider nvme. This protocol supports two different transfer
> modes called PRP and SGL. PRP requires 4k aligned segments, though you
> can have an arbitrary 4-byte aligned offset at the start. SGL on the
> other hand allows completely arbitrary size and alignments for each
> segment.
>
> statx reports information sufficient to know that you can have dword
> aligned page offsets for a virtually contiguous buffer, but it doesn't
> report PRP's boundary gap requirement, so applications can't tell if the
> file follows PRP or SGL rules for direct-io.
>
> And if you have a device using SGL, statx doesn't report the max number
> of sub-sector segments you can submit in a single command.
>
> This series provides both limits so user space has the complete picture.
>
> A typical nvme that supports only PRP has a DMA alignment of 4 bytes, a
> dio offset alignment of 4k, and a virtual boundary of 4k.
So each segment's length has to be a multiple of 4k, *and* it has to end
on a 4k aligned memory address? That implies the segment begins at a 4k
aligned memory address as well, which is just stx_dio_mem_align=4k.
What am I missing?
What is a specific example of an I/O request that you'd like to be able
to submit that the existing UAPI can't declare support for?
> If SGL were supported, there would be no virtual boundary gap, and max
> segments is 256.
Can you elaborate on why DIO users need to know max_segments?
I'm worried about the UAPI duplication, as well as it going to be very
difficult for userspace to correctly use this information. With just
the two alignments there's at least a chance of them getting it right.
If we throw virt_boundary_mask and max_segments into the mix, I don't
think there's much chance.
- Eric
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2026-07-11 0:24 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-10 21:06 [PATCHv2 0/5] direct-io file extended attributes Keith Busch
2026-07-10 21:06 ` [f2fs-dev] " Keith Busch via Linux-f2fs-devel
2026-07-10 21:06 ` [PATCHv2 1/5] fs: add direct io attributes to file_getattr Keith Busch
2026-07-10 21:06 ` [f2fs-dev] " Keith Busch via Linux-f2fs-devel
2026-07-13 10:14 ` Christoph Hellwig
2026-07-13 10:14 ` Christoph Hellwig
2026-07-10 21:06 ` [PATCHv2 2/5] block: report direct io attributes through file_getattr Keith Busch
2026-07-10 21:06 ` [f2fs-dev] " Keith Busch via Linux-f2fs-devel
2026-07-13 11:57 ` Christoph Hellwig
2026-07-13 11:57 ` Christoph Hellwig
2026-07-10 21:06 ` [PATCHv2 3/5] xfs: " Keith Busch
2026-07-10 21:06 ` [f2fs-dev] " Keith Busch via Linux-f2fs-devel
2026-07-13 12:00 ` Christoph Hellwig
2026-07-13 12:00 ` [f2fs-dev] " Christoph Hellwig
2026-07-10 21:06 ` [PATCHv2 4/5] ext4: " Keith Busch
2026-07-10 21:06 ` [f2fs-dev] " Keith Busch via Linux-f2fs-devel
2026-07-10 21:06 ` [PATCHv2 5/5] f2fs: " Keith Busch
2026-07-10 21:06 ` [f2fs-dev] " Keith Busch via Linux-f2fs-devel
2026-07-10 21:53 ` [f2fs-dev] [PATCHv2 0/5] direct-io file extended attributes Eric Biggers
2026-07-10 21:53 ` Eric Biggers via Linux-f2fs-devel
2026-07-10 22:58 ` Keith Busch
2026-07-10 22:58 ` Keith Busch via Linux-f2fs-devel
2026-07-11 0:24 ` Eric Biggers [this message]
2026-07-11 0:24 ` Eric Biggers via Linux-f2fs-devel
2026-07-11 1:06 ` Keith Busch
2026-07-11 1:06 ` [f2fs-dev] " Keith Busch via Linux-f2fs-devel
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=20260711002412.GG1911@quark \
--to=ebiggers@kernel.org \
--cc=aalbersh@kernel.org \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=cem@kernel.org \
--cc=jack@suse.cz \
--cc=jaegeuk@kernel.org \
--cc=kbusch@kernel.org \
--cc=kbusch@meta.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=tytso@mit.edu \
/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.