Add support for sockmap to vsock.
We're testing usage of vsock as a way to redirect guest-local UDS requests to the host and this patch series greatly improves the performance of such a setup.
Compared to copying packets via userspace, this improves throughput by 221% in basic testing.
Tested as follows.
Setup: guest unix dgram sender -> guest vsock redirector -> host vsock server Threads: 1 Payload: 64k No sockmap: - 76.3 MB/s - The guest vsock redirector was "socat VSOCK-CONNECT:2:1234 UNIX-RECV:/path/to/sock" Using sockmap (this patch): - 168.8 MB/s (+221%) - The guest redirector was a simple sockmap echo server, redirecting unix ingress to vsock 2:1234 egress. - Same sender and server programs
Only the virtio transport has been tested. The loopback transport was used in writing bpf/selftests, but not thoroughly tested otherwise.
This series requires the skb patch.
To: Stefan Hajnoczi stefanha@redhat.com To: Stefano Garzarella sgarzare@redhat.com To: "Michael S. Tsirkin" mst@redhat.com To: Jason Wang jasowang@redhat.com To: "David S. Miller" davem@davemloft.net To: Eric Dumazet edumazet@google.com To: Jakub Kicinski kuba@kernel.org To: Paolo Abeni pabeni@redhat.com To: Andrii Nakryiko andrii@kernel.org To: Mykola Lysenko mykolal@fb.com To: Alexei Starovoitov ast@kernel.org To: Daniel Borkmann daniel@iogearbox.net To: Martin KaFai Lau martin.lau@linux.dev To: Song Liu song@kernel.org To: Yonghong Song yhs@fb.com To: John Fastabend john.fastabend@gmail.com To: KP Singh kpsingh@kernel.org To: Stanislav Fomichev sdf@google.com To: Hao Luo haoluo@google.com To: Jiri Olsa jolsa@kernel.org To: Shuah Khan shuah@kernel.org Cc: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org Cc: virtualization@lists.linux-foundation.org Cc: netdev@vger.kernel.org Cc: bpf@vger.kernel.org Cc: linux-kselftest@vger.kernel.org Signed-off-by: Bobby Eshleman bobby.eshleman@bytedance.com
--- Bobby Eshleman (3): vsock: support sockmap selftests/bpf: add vsock to vmtest.sh selftests/bpf: Add a test case for vsock sockmap
drivers/vhost/vsock.c | 1 + include/linux/virtio_vsock.h | 1 + include/net/af_vsock.h | 17 ++ net/vmw_vsock/Makefile | 1 + net/vmw_vsock/af_vsock.c | 59 ++++++- net/vmw_vsock/virtio_transport.c | 2 + net/vmw_vsock/virtio_transport_common.c | 22 +++ net/vmw_vsock/vsock_bpf.c | 180 +++++++++++++++++++++ net/vmw_vsock/vsock_loopback.c | 2 + tools/testing/selftests/bpf/config.x86_64 | 4 + .../selftests/bpf/prog_tests/sockmap_listen.c | 163 +++++++++++++++++++ tools/testing/selftests/bpf/vmtest.sh | 1 + 12 files changed, 447 insertions(+), 6 deletions(-) --- base-commit: f12f4326c6a75a74e908714be6d2f0e2f0fd0d76 change-id: 20230118-support-vsock-sockmap-connectible-2e1297d2111a
Best regards,