From mboxrd@z Thu Jan  1 00:00:00 1970
Authentication-Results: passt.top; dmarc=pass (p=none dis=none) header.from=redhat.com
Authentication-Results: passt.top;
	dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=b4EgwdeX;
	dkim-atps=neutral
Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124])
	by passt.top (Postfix) with ESMTP id 9E8EC5A004C
	for <passt-dev@passt.top>; Mon, 07 Oct 2024 16:41:00 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
	s=mimecast20190719; t=1728312059;
	h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
	 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
	 content-transfer-encoding:content-transfer-encoding;
	bh=eiC2jipcZM00yooZ/q+pJPIVOr47RdIsl6px/UANj4Q=;
	b=b4EgwdeXftfOpeawQCLbhQA5mTqEK8NsBUy3o0vZ/z/ft6nFozGj0g7OtAIUS9OQkmD4Ga
	NV8NA+TWQ1KSxi2NRXn6siJMW956eJJLl/RxsdPpPiQYIUSYI9l3Sp6LrIQbO71EjhCiqe
	IfIOGtkSuRPNv841ZWQ2VoS34jDn+T0=
Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com
 (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by
 relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,
 cipher=TLS_AES_256_GCM_SHA384) id us-mta-695-A3VtQwrhOpqce5CwZzAJlA-1; Mon,
 07 Oct 2024 10:40:57 -0400
X-MC-Unique: A3VtQwrhOpqce5CwZzAJlA-1
Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
	(No client certificate requested)
	by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C8F3F1964CF2
	for <passt-dev@passt.top>; Mon,  7 Oct 2024 14:40:56 +0000 (UTC)
Received: from lenovo-t14s.redhat.com (unknown [10.39.192.162])
	by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D90761956052;
	Mon,  7 Oct 2024 14:40:55 +0000 (UTC)
From: Laurent Vivier <lvivier@redhat.com>
To: passt-dev@passt.top
Subject: [PATCH v6 0/7] Add vhost-user support to passt. (part 3)
Date: Mon,  7 Oct 2024 16:40:46 +0200
Message-ID: <20241007144054.41868-1-lvivier@redhat.com>
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17
X-Mimecast-Spam-Score: 0
X-Mimecast-Originator: redhat.com
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Message-ID-Hash: HXLARRSBROCOGVCJYDUXEU65VVMZEP56
X-Message-ID-Hash: HXLARRSBROCOGVCJYDUXEU65VVMZEP56
X-MailFrom: lvivier@redhat.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: Laurent Vivier <lvivier@redhat.com>
X-Mailman-Version: 3.3.8
Precedence: list
List-Id: Development discussion and patches for passt <passt-dev.passt.top>
Archived-At: <https://archives.passt.top/passt-dev/20241007144054.41868-1-lvivier@redhat.com/>
Archived-At: <https://passt.top/hyperkitty/list/passt-dev@passt.top/message/HXLARRSBROCOGVCJYDUXEU65VVMZEP56/>
List-Archive: <https://archives.passt.top/passt-dev/>
List-Archive: <https://passt.top/hyperkitty/list/passt-dev@passt.top/>
List-Help: <mailto:passt-dev-request@passt.top?subject=help>
List-Owner: <mailto:passt-dev-owner@passt.top>
List-Post: <mailto:passt-dev@passt.top>
List-Subscribe: <mailto:passt-dev-join@passt.top>
List-Unsubscribe: <mailto:passt-dev-leave@passt.top>

This series of patches adds vhost-user support to passt=0D
and then allows passt to connect to QEMU network backend using=0D
virtqueue rather than a socket.=0D
=0D
With QEMU, rather than using to connect:=0D
=0D
  -netdev stream,id=3Ds,server=3Doff,addr.type=3Dunix,addr.path=3D/tmp/pass=
t_1.socket=0D
=0D
we will use:=0D
=0D
  -chardev socket,id=3Dchr0,path=3D/tmp/passt_1.socket=0D
  -netdev vhost-user,id=3Dnetdev0,chardev=3Dchr0=0D
  -device virtio-net,netdev=3Dnetdev0=0D
  -object memory-backend-memfd,id=3Dmemfd0,share=3Don,size=3D$RAMSIZE=0D
  -numa node,memdev=3Dmemfd0=0D
=0D
The memory backend is needed to share data between passt and QEMU.=0D
=0D
Performance comparison between "-netdev stream" and "-netdev vhost-user":=
=0D
=0D
$ iperf3 -c localhost -p 10001  -t 60 -6 -u -b 50G=0D
=0D
socket:=0D
[  5]   0.00-60.05  sec  95.6 GBytes  13.7 Gbits/sec  0.017 ms  6998988/101=
32413 (69%)  receiver=0D
vhost-user:=0D
[  5]   0.00-60.04  sec   237 GBytes  33.9 Gbits/sec  0.006 ms  53673/78137=
70 (0.69%)  receiver=0D
=0D
$ iperf3 -c localhost -p 10001  -t 60 -4 -u -b 50G=0D
=0D
socket:=0D
[  5]   0.00-60.05  sec  98.9 GBytes  14.1 Gbits/sec  0.018 ms  6260735/950=
1832 (66%)  receiver=0D
vhost-user:=0D
[  5]   0.00-60.05  sec   235 GBytes  33.7 Gbits/sec  0.008 ms  37581/77526=
99 (0.48%)  receiver=0D
=0D
$ iperf3 -c localhost -p 10001  -t 60 -6=0D
=0D
socket:=0D
[  5]   0.00-60.00  sec  17.3 GBytes  2.48 Gbits/sec    0             sende=
r=0D
[  5]   0.00-60.06  sec  17.3 GBytes  2.48 Gbits/sec                  recei=
ver=0D
vhost-user:=0D
[  5]   0.00-60.00  sec   191 GBytes  27.4 Gbits/sec    0             sende=
r=0D
[  5]   0.00-60.05  sec   191 GBytes  27.3 Gbits/sec                  recei=
ver=0D
=0D
$ iperf3 -c localhost -p 10001  -t 60 -4=0D
=0D
socket:=0D
[  5]   0.00-60.00  sec  15.6 GBytes  2.24 Gbits/sec    0             sende=
r=0D
[  5]   0.00-60.06  sec  15.6 GBytes  2.24 Gbits/sec                  recei=
ver=0D
vhost-user:=0D
[  5]   0.00-60.00  sec   189 GBytes  27.1 Gbits/sec    0             sende=
r=0D
[  5]   0.00-60.04  sec   189 GBytes  27.0 Gbits/sec                  recei=
ver=0D
=0D
v5:=0D
  - rebase on top of 2024_09_06.6b38f07=0D
  - rework udp_vu.c as ref.udp.v6 has been removed and we need to=0D
    know if we receive IPv4 or IPv6 frame when we prepare the=0D
    guest buffers for recvmsg()=0D
  - remove vnet->hdrlen as the size is always the same with virtio-net v1=
=0D
  - address comments from David and Stefano=0D
=0D
v6:=0D
  - rebase=0D
  - extract 3 patches from "vhost-user: add vhost-user":=0D
      passt: rename tap_sock_init() to tap_backend_init()=0D
      tcp: Export headers functions=0D
      udp: Prepare udp.c to be shared with vhost-user=0D
  - introduce new functions vu_collect_one_frame(),=0D
    vu_collect(), vu_set_vnethdr(), vu_flush(), vu_send_single()=0D
    to be called from tcp_vu.c, udp_vu.c and ICMP/DHCP where vhost-user=0D
    code was duplicated.=0D
=0D
v4:=0D
  - rebase on top of 2024_08_21.1d6142f=0D
    (rebasing on top of 620e19a1b48a ("udp: Merge udp[46]_mh_recv arrays")=
=0D
     introduces a regression in the measure of the latency with UDP=0D
     because I think I don't replace correctly ref.udp.v6 that is removed=
=0D
     by this commit)=0D
  - Addressed most of the comments from David and Stefano=0D
    (I didn't want to postpone this version to next week,=0D
     so I'll address the remaining comments in the next version).=0D
=0D
v3:=0D
  - rebase on top of flow table=0D
  - update tcp_vu.c to look like udp_vu.c (recv()/prepare()/send_frame())=
=0D
  - address comments from Stefano and David on version 2=0D
=0D
v2:=0D
  - remove PATCH 4=0D
  - rewrite PATCH 2 and 3 to follow passt coding style=0D
  - move some code from PATCH 3 to PATCH 4 (previously PATCH 5)=0D
  - partially addressed David's comment on PATCH 5=0D
=0D
Laurent Vivier (7):=0D
  packet: replace struct desc by struct iovec=0D
  vhost-user: introduce virtio API=0D
  vhost-user: introduce vhost-user API=0D
  udp: Prepare udp.c to be shared with vhost-user=0D
  tcp: Export headers functions=0D
  passt: rename tap_sock_init() to tap_backend_init()=0D
  vhost-user: add vhost-user=0D
=0D
 Makefile       |    6 +-=0D
 conf.c         |   22 +-=0D
 epoll_type.h   |    4 +=0D
 iov.c          |    1 -=0D
 isolation.c    |   15 +-=0D
 packet.c       |   91 +++--=0D
 packet.h       |   22 +-=0D
 passt.1        |   10 +-=0D
 passt.c        |   11 +-=0D
 passt.h        |    6 +=0D
 pcap.c         |    1 -=0D
 tap.c          |  128 ++++--=0D
 tap.h          |    7 +-=0D
 tcp.c          |   37 +-=0D
 tcp_internal.h |   15 +=0D
 tcp_vu.c       |  476 +++++++++++++++++++++++=0D
 tcp_vu.h       |   12 +=0D
 udp.c          |   84 ++--=0D
 udp_internal.h |   34 ++=0D
 udp_vu.c       |  332 ++++++++++++++++=0D
 udp_vu.h       |   13 +=0D
 util.h         |    8 +=0D
 vhost_user.c   | 1005 ++++++++++++++++++++++++++++++++++++++++++++++++=0D
 vhost_user.h   |  206 ++++++++++=0D
 virtio.c       |  660 +++++++++++++++++++++++++++++++=0D
 virtio.h       |  184 +++++++++=0D
 vu_common.c    |  327 ++++++++++++++++=0D
 vu_common.h    |   47 +++=0D
 28 files changed, 3626 insertions(+), 138 deletions(-)=0D
 create mode 100644 tcp_vu.c=0D
 create mode 100644 tcp_vu.h=0D
 create mode 100644 udp_internal.h=0D
 create mode 100644 udp_vu.c=0D
 create mode 100644 udp_vu.h=0D
 create mode 100644 vhost_user.c=0D
 create mode 100644 vhost_user.h=0D
 create mode 100644 virtio.c=0D
 create mode 100644 virtio.h=0D
 create mode 100644 vu_common.c=0D
 create mode 100644 vu_common.h=0D
=0D
--=20=0D
2.46.2=0D
=0D