Re: [RFC] extending splice for copy offloading

Jeff Layton
2013-09-19T13:09:16Z

On Wed, 11 Sep 2013 21:17:23 +0000
Eric Wong <normalperson@yhbt.net> wrote:

> Zach Brown <zab@redhat.com> wrote:
> > Towards the end of that thread Eric Wong asked why we didn't just
> > extend splice. I immediately replied with some dumb dismissive
> > answer. Once I sat down and looked at it, though, it does make a
> > lot of sense. So good job, Eric. +10 Dummie points for me.
>
> Thanks for revisiting that :>
>
> > Some things to talk about:
> > - I really don't care about the naming here. If you do, holler.
>
> Exposing "DIRECT" to userspace now might confuse users into expecting
> O_DIRECT behavior. I say this as an easily-confused user.
>
> In the future, perhaps O_DIRECT behavior can become per-splice (instead
> of just per-open) and can save SPLICE_F_DIRECT for that.
>
> > - We might want different flags for file-to-file splicing and acceleration
> > - We might want flags to require or forbid acceleration
>

Do we need new flags at all? If both fds refer to files, then perhaps
we can just take it that SPLICE_F_DIRECT behavior is implied?

I'd probably suggest that we not add any more flags than are necessary
until use-cases for them become clear.

> > - We might want to provide all these flags to sendfile, too
>
> Another syscall? I prefer not. Better to just maintain the sendfile
> API as-is for compatibility reasons and nudge users towards splice.
>

Agreed.

> > Thoughts? Objections?
>
> I'll try to test/comment more in a week or two (not much time for
> computing until then).

On the whole, the concept looks sound.

I'll note too that by simply lifting the restriction that one of the
fd's to splice must always be a pipe, that may also give us a relatively
simple way to add recvfile() as well, even if only as a macro wrapper
around splice(). That's been a long sought-after feature of the samba
developers...

Just allow userland to do a splice straight from a socket fd to a file.
We may end up having to copy data if the alignment isn't right, but it'd
still be valuable to do that directly in the kernel in a single syscall.

--
Jeff Layton <jlayton@redhat.com>