Re: [PATCH RFC v2 00/12] socket sendmsg MSG_ZEROCOPY

Started by Eric Dumazet on Feb 28, 2017 · 3 messages from 3 authors · Last reply Feb 28, 2017

open the first message on its own page

Message details and related content
On Tue, 2017-02-28 at 14:25 -0800, Andy Lutomirski wrote:
On Tue, Feb 28, 2017 at 1:47 PM, Eric Dumazet [off-list ref] wrote:
quoted
On Tue, 2017-02-28 at 13:09 -0800, Andy Lutomirski wrote:
quoted
Does this mean that a user program that does a zerocopy send can cause
a retransmitted segment to contain different data than the original
segment?  If so, is that okay?
Same remark applies to sendfile() already
True.
quoted
, or other zero copy modes
(vmsplice() + splice() )
I hate vmsplice().  I thought I remembered it being essentially
disabled at some point due to security problems.
Right, zero copy is hard ;)

vmsplice() is not disabled in current kernels, unless I missed
something.
Message details and related content
On Tue, Feb 28, 2017 at 2:40 PM, Eric Dumazet [off-list ref] wrote:
On Tue, 2017-02-28 at 14:25 -0800, Andy Lutomirski wrote:
quoted
On Tue, Feb 28, 2017 at 1:47 PM, Eric Dumazet [off-list ref] wrote:
quoted
On Tue, 2017-02-28 at 13:09 -0800, Andy Lutomirski wrote:
quoted
Does this mean that a user program that does a zerocopy send can cause
a retransmitted segment to contain different data than the original
segment?  If so, is that okay?
Same remark applies to sendfile() already
True.
quoted
, or other zero copy modes
(vmsplice() + splice() )
I hate vmsplice().  I thought I remembered it being essentially
disabled at some point due to security problems.
Right, zero copy is hard ;)

vmsplice() is not disabled in current kernels, unless I missed
something.
I think you're right.  That being said, from the man page:

The user pages are a gift to the kernel.  The application  may  not
modify this memory ever, otherwise the page cache and on-disk data may
differ.

This is just not okay IMO.
Message details and related content
On Tue, 2017-02-28 at 14:52 -0800, Andy Lutomirski wrote:
The user pages are a gift to the kernel.  The application  may  not
modify this memory ever, otherwise the page cache and on-disk data may
differ.

This is just not okay IMO.
TCP works just fine in this case.

TX checksum will be computed by the NIC after/while data is copied.

If really the application changes the data, that will not cause any
problems, other than user side consistency.

This is why we require a copy (for all buffers that came from zero-copy)
if network stack hits a device that can not offload TX checksum.

Even pwrite() does not guarantee consistency if multiple threads are
using it on overlapping regions.
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help