Re: [RFC PATCH v5 14/17] docs: net: description of MSG_ZEROCOPY for AF_VSOCK

From: Arseniy Krasnov
Date: Fri Jul 07 2023 - 00:51:01 EST




On 06.07.2023 20:06, Stefano Garzarella wrote:
> On Sat, Jul 01, 2023 at 09:39:44AM +0300, Arseniy Krasnov wrote:
>> This adds description of MSG_ZEROCOPY flag support for AF_VSOCK type of
>> socket.
>>
>> Signed-off-by: Arseniy Krasnov <AVKrasnov@xxxxxxxxxxxxxx>
>> ---
>> Documentation/networking/msg_zerocopy.rst | 12 ++++++++++--
>> 1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/networking/msg_zerocopy.rst b/Documentation/networking/msg_zerocopy.rst
>> index b3ea96af9b49..34bc7ff411ce 100644
>> --- a/Documentation/networking/msg_zerocopy.rst
>> +++ b/Documentation/networking/msg_zerocopy.rst
>> @@ -7,7 +7,8 @@ Intro
>> =====
>>
>> The MSG_ZEROCOPY flag enables copy avoidance for socket send calls.
>> -The feature is currently implemented for TCP and UDP sockets.
>> +The feature is currently implemented for TCP, UDP and VSOCK (with
>> +virtio transport) sockets.
>>
>>
>> Opportunity and Caveats
>> @@ -174,7 +175,7 @@ read_notification() call in the previous snippet. A notification
>> is encoded in the standard error format, sock_extended_err.
>>
>> The level and type fields in the control data are protocol family
>> -specific, IP_RECVERR or IPV6_RECVERR.
>> +specific, IP_RECVERR or IPV6_RECVERR (for TCP or UDP socket).
>>
>> Error origin is the new type SO_EE_ORIGIN_ZEROCOPY. ee_errno is zero,
>> as explained before, to avoid blocking read and write system calls on
>> @@ -201,6 +202,7 @@ undefined, bar for ee_code, as discussed below.
>>
>> printf("completed: %u..%u\n", serr->ee_info, serr->ee_data);
>>
>> +For VSOCK socket, cmsg_level will be SOL_VSOCK and cmsg_type will be 0.
>
> Maybe better to move up, just under the previous change.
>
> By the way, should we define a valid type value for vsock
> (e.g. VSOCK_RECVERR)?

Yes I think, I'll add it in the same patch which adds SOL_VSOCK.

Thanks, Arseniy

>
>>
>> Deferred copies
>> ~~~~~~~~~~~~~~~
>> @@ -235,12 +237,15 @@ Implementation
>> Loopback
>> --------
>>
>> +For TCP and UDP:
>> Data sent to local sockets can be queued indefinitely if the receive
>> process does not read its socket. Unbound notification latency is not
>> acceptable. For this reason all packets generated with MSG_ZEROCOPY
>> that are looped to a local socket will incur a deferred copy. This
>> includes looping onto packet sockets (e.g., tcpdump) and tun devices.
>>
>> +For VSOCK:
>> +Data path sent to local sockets is the same as for non-local sockets.
>>
>> Testing
>> =======
>> @@ -254,3 +259,6 @@ instance when run with msg_zerocopy.sh between a veth pair across
>> namespaces, the test will not show any improvement. For testing, the
>> loopback restriction can be temporarily relaxed by making
>> skb_orphan_frags_rx identical to skb_orphan_frags.
>> +
>> +For VSOCK type of socket example can be found in tools/testing/vsock/
>> +vsock_test_zerocopy.c.
>
> For VSOCK socket, example can be found in
> tools/testing/vsock/vsock_test_zerocopy.c
>
> (we should leave the entire path on the same line)
>
>> --
>> 2.25.1
>>
>