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 >> >