Hey all! This series introduces support for datagrams to virtio/vsock. It is a spin-off (and smaller version) of this series from the summer: https://lore.kernel.org/all/cover.1660362668.git.bobby.eshleman@xxxxxxxxxxxxx/ Please note that this is an RFC and should not be merged until associated changes are made to the virtio specification, which will follow after discussion from this series. This series first supports datagrams in a basic form for virtio, and then optimizes the sendpath for all transports. The result is a very fast datagram communication protocol that outperforms even UDP on multi-queue virtio-net w/ vhost on a variety of multi-threaded workload samples. For those that are curious, some summary data comparing UDP and VSOCK DGRAM (N=5): vCPUS: 16 virtio-net queues: 16 payload size: 4KB Setup: bare metal + vm (non-nested) UDP: 287.59 MB/s VSOCK DGRAM: 509.2 MB/s Some notes about the implementation... This datagram implementation forces datagrams to self-throttle according to the threshold set by sk_sndbuf. It behaves similar to the credits used by streams in its effect on throughput and memory consumption, but it is not influenced by the receiving socket as credits are. The device drops packets silently. As discussed previously, this series introduces datagrams and defers fairness to future work. See discussion in v2 for more context around datagrams, fairness, and this implementation. Signed-off-by: Bobby Eshleman <bobby.eshleman@xxxxxxxxxxxxx> --- Changes in v3: - Support multi-transport dgram, changing logic in connect/bind to support VMCI case - Support per-pkt transport lookup for sendto() case - Fix dgram_allow() implementation - Fix dgram feature bit number (now it is 3) - Fix binding so dgram and connectible (cid,port) spaces are non-overlapping - RCU protect transport ptr so connect() calls never leave a lockless read of the transport and remote_addr are always in sync - Link to v2: https://lore.kernel.org/r/20230413-b4-vsock-dgram-v2-0-079cc7cee62e@xxxxxxxxxxxxx --- Bobby Eshleman (7): vsock/dgram: generalize recvmsg and drop transport->dgram_dequeue vsock: refactor transport lookup code vsock: support multi-transport datagrams vsock: make vsock bind reusable virtio/vsock: add VIRTIO_VSOCK_F_DGRAM feature bit virtio/vsock: support dgrams vsock: Add lockless sendmsg() support Jiang Wang (1): tests: add vsock dgram tests drivers/vhost/vsock.c | 44 ++- include/linux/virtio_vsock.h | 13 +- include/net/af_vsock.h | 53 ++- include/uapi/linux/virtio_vsock.h | 2 + net/vmw_vsock/af_vsock.c | 615 ++++++++++++++++++++++++++------ net/vmw_vsock/diag.c | 10 +- net/vmw_vsock/hyperv_transport.c | 42 ++- net/vmw_vsock/virtio_transport.c | 28 +- net/vmw_vsock/virtio_transport_common.c | 227 +++++++++--- net/vmw_vsock/vmci_transport.c | 152 ++++---- net/vmw_vsock/vsock_bpf.c | 10 +- net/vmw_vsock/vsock_loopback.c | 13 +- tools/testing/vsock/util.c | 105 ++++++ tools/testing/vsock/util.h | 4 + tools/testing/vsock/vsock_test.c | 193 ++++++++++ 15 files changed, 1259 insertions(+), 252 deletions(-) --- base-commit: ed72bd5a6790a0c3747cb32b0427f921bd03bb71 change-id: 20230413-b4-vsock-dgram-3b6eba6a64e5 Best regards, -- Bobby Eshleman <bobby.eshleman@xxxxxxxxxxxxx>