Re: [PATCH 0/3] vmsplice: make vmsplice a trivial wrapper for preadv2/pwritev2
Eric Biggers <[email protected]>
| Newsgroups | org.kernel.vger.linux-api,dev.linux.lists.patches,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.netdev,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Jun 02, 2026 at 10:25:06AM +0200, David Hildenbrand (Arm) wrote: > On 6/2/26 02:28, Andrew Morton wrote: > > On Mon, 1 Jun 2026 16:04:55 -0400 Steven Rostedt <[email protected]> wrote: > > > >> On Mon, 1 Jun 2026 18:33:25 +0100 > >> Al Viro <[email protected]> wrote: > >> > >>> > >>> > >>> FUSE might be interesting - fuse_dev_splice_read() and its ilk. > >>> Communications between the kernel and fuse server at least used to > >>> seriously want that, so that would be one place to look for unhappy > >>> userland... > >>> > >>> splice-related logics in fs/fuse/dev.c is interesting; another place > >>> like this is kernel/trace/, but I'm less familiar with that one. > >>> > >>> rostedt Cc'd (miklos already had been) > >> > >> Thanks for the Cc. The tracing ring buffer was specifically made to be used > >> by splice and the libtracefs has a lot of code to use it as well. As > >> reading the ring buffer literally swaps out the write portion with a blank > >> read portion, that portion (sub-buffer) is used to be directly fed into > >> splice, providing a zero-copy of the trace data from the write of the event > >> to going into a file. > >> > >> trace-cmd defaults to using splice to copy the tracing ring buffer directly > >> into files to avoid as much copying during live recordings as possible. > >> > >> Whatever changes we make, I would like to make sure there's no regressions > >> in performance of trace-cmd record. > > > > Well yes, The patchset seems sensible from a quality POV. But to make > > a decision we should first have a decent understanding of its downside > > impact. > > I guess most (all?) of us ... dislike ... vmsplice(), so trying to remove it > entirely is certainly very appealing ... > > > > > I haven't seen a description of that impact in the discussion thus far. > > And that description is owed, please. > > > > I assume a small number of specialized applications are using > > vmsplice() to great effect? What are those applications? What is the > > impact of this change? > > > I did some digging, and the kernel crypto API documents using splice/vmsplice > for zero-copy[1] and libkcapi [2]. > > I did not find performance numbers, how much vmsplice/splice actually gives us. > Playing with the kcapi-speed tool [3] (specifying --vmsplice vs. --sendmsg) > doesn't really reveal a big difference at least on my notebook. Not sure if the > parameters I specify are reasonable. > > I don't know whether downgrading vmsplice to preadv2/pwritev2 would perform > significantly worse than sendmsg ... and I don't know what the default would > usually be (default to vmsplice or sendmsg). I might try finding some time to > play with it more, but I doubt it, so if anybody else has time ... :) AF_ALG is a mistake and isn't commonly used. Using a userspace crypto library is faster and is what almost everyone does anyway, as it avoids the syscall overhead. There are many other issues with AF_ALG as well. 7.2 will mark AF_ALG as deprecated, mostly remove AF_ALG's zero-copy support, and remove AF_ALG's async I/O support: https://lore.kernel.org/linux-crypto/[email protected]/ https://lore.kernel.org/linux-crypto/[email protected]/ https://lore.kernel.org/linux-crypto/[email protected]/ In practice, the programs that are keeping Linux distros from disabling AF_ALG in their kconfig outright are just iwd, cryptsetup, and bluez. They use AF_ALG just because it was mistakenly thought to be easier than using a userspace crypto library. They don't need maximum performance, nor do they use vmsplice, splice, or sendfile. There is other highly niche code out there that does implement the AF_ALG + vmsplice + splice thing, e.g. libkcapi. But it's just not enough of a reason to keep zero-copy support, especially considering that AF_ALG has always been the wrong solution in the first place. The fallback to copying the data is fine for this deprecated API. - Eric