Commit bac2cac1 authored by Arseniy Krasnov's avatar Arseniy Krasnov Committed by David S. Miller

docs: net: description of MSG_ZEROCOPY for AF_VSOCK

This adds description of MSG_ZEROCOPY flag support for AF_VSOCK type of
socket.
Signed-off-by: default avatarArseniy Krasnov <avkrasnov@salutedevices.com>
Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e0718bd8
...@@ -7,7 +7,8 @@ Intro ...@@ -7,7 +7,8 @@ Intro
===== =====
The MSG_ZEROCOPY flag enables copy avoidance for socket send calls. 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 Opportunity and Caveats
...@@ -174,7 +175,9 @@ read_notification() call in the previous snippet. A notification ...@@ -174,7 +175,9 @@ read_notification() call in the previous snippet. A notification
is encoded in the standard error format, sock_extended_err. is encoded in the standard error format, sock_extended_err.
The level and type fields in the control data are protocol family 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).
For VSOCK socket, cmsg_level will be SOL_VSOCK and cmsg_type will be
VSOCK_RECVERR.
Error origin is the new type SO_EE_ORIGIN_ZEROCOPY. ee_errno is zero, 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 as explained before, to avoid blocking read and write system calls on
...@@ -235,12 +238,15 @@ Implementation ...@@ -235,12 +238,15 @@ Implementation
Loopback Loopback
-------- --------
For TCP and UDP:
Data sent to local sockets can be queued indefinitely if the receive Data sent to local sockets can be queued indefinitely if the receive
process does not read its socket. Unbound notification latency is not process does not read its socket. Unbound notification latency is not
acceptable. For this reason all packets generated with MSG_ZEROCOPY acceptable. For this reason all packets generated with MSG_ZEROCOPY
that are looped to a local socket will incur a deferred copy. This that are looped to a local socket will incur a deferred copy. This
includes looping onto packet sockets (e.g., tcpdump) and tun devices. 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 Testing
======= =======
...@@ -254,3 +260,6 @@ instance when run with msg_zerocopy.sh between a veth pair across ...@@ -254,3 +260,6 @@ instance when run with msg_zerocopy.sh between a veth pair across
namespaces, the test will not show any improvement. For testing, the namespaces, the test will not show any improvement. For testing, the
loopback restriction can be temporarily relaxed by making loopback restriction can be temporarily relaxed by making
skb_orphan_frags_rx identical to skb_orphan_frags. 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.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment