From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202510 header.b=CJUBPDpV; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id 2AA125A08B5 for ; Mon, 10 Nov 2025 06:57:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202510; t=1762754256; bh=8+FuAieTvXyqD3M9tS0pciYcdSCqEUzC21jiyKDU1aI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=CJUBPDpVvbt7IO0l/NnFQHoCRhE/aRQhSmtk9BInnfA8OP31Nj96CD/a+a84Mfk0c 5VOHQg/b3dQtf7e5vbTmc7rYfI+n1K1zTYYaD4DqJAWQxvlOWoijRKGn8uG/nsjbR3 xWO5T/ycAtZCcJjCtAkg9/Yar+ET8O8vJmhTtl7/N69FiYxEMnie+mS2M4UMRjaNiL iUVwkqYHTYpJ7yPztkVgZCaAM/pBZOXFWg28UGjKieQTSFsw8NK3UHFLZQDwRatWFX +RbNosICQ+JfC/ze7ujpQQETLN/LIch7k61fyedmoxl8vVKEA+2BDCgIzFIoQAViFN xjktjfGo3sDiw== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4d4f8J6ZPCz4wD0; Mon, 10 Nov 2025 16:57:36 +1100 (AEDT) Date: Mon, 10 Nov 2025 16:57:32 +1100 From: David Gibson To: Laurent Vivier Subject: Re: [PATCH 4/4] test: Add multiqueue support to vhost-user test infrastructure Message-ID: References: <20251107143901.89955-1-lvivier@redhat.com> <20251107143901.89955-5-lvivier@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="+3gyhuOAc/h3zTh1" Content-Disposition: inline In-Reply-To: <20251107143901.89955-5-lvivier@redhat.com> Message-ID-Hash: CCWI3HEOMC463BE7VWF6CBKFKTIK36QJ X-Message-ID-Hash: CCWI3HEOMC463BE7VWF6CBKFKTIK36QJ X-MailFrom: dgibson@gandalf.ozlabs.org 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: passt-dev@passt.top X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: --+3gyhuOAc/h3zTh1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Nov 07, 2025 at 03:39:01PM +0100, Laurent Vivier wrote: > Extend test suite to support multiqueue testing with vhost-user > backend. This change: >=20 > - Adds VHOST_USER_MQ environment variable to control queue count > - Passes --max-queues parameter to passt when VHOST_USER_MQ > 1 > - Configures QEMU with queues=3D parameter for vhost-user netdev > - Updates setup scripts for passt, passt_in_ns, and two_guests setups > - Adds new test runs with 8 queues for comprehensive multiqueue testing. This is a good start, but it's definitely not "comprehensive" (our existing testsuite is also far from comprehensive). That's not Claude putting words in your mouth, is it? > Note that the guest kernel will not enable more queues than the number > of vCPUs. >=20 > The test infrastructure now validates multiqueue functionality across > all test scenarios including TCP, UDP, ICMP, DHCP, NDP, and performance > tests. >=20 > Signed-off-by: Laurent Vivier > --- > test/lib/setup | 60 ++++++++++++++++++++++++++++++++++++++------------ > test/run | 23 +++++++++++++++++++ > 2 files changed, 69 insertions(+), 14 deletions(-) >=20 > diff --git a/test/lib/setup b/test/lib/setup > index 5994598744a3..69433aa89adc 100755 > --- a/test/lib/setup > +++ b/test/lib/setup > @@ -45,7 +45,8 @@ setup_passt() { > [ ${PCAP} -eq 1 ] && __opts=3D"${__opts} -p ${LOGDIR}/passt.pcap" > [ ${DEBUG} -eq 1 ] && __opts=3D"${__opts} -d" > [ ${TRACE} -eq 1 ] && __opts=3D"${__opts} --trace" > - [ ${VHOST_USER} -eq 1 ] && __opts=3D"${__opts} --vhost-user" > + [ ${VHOST_USER} -eq 1 ] && __opts=3D"${__opts} --vhost-user" && \ > + [ ${VHOST_USER_MQ} -gt 1 ] && __opts=3D"${__opts} --max-queues ${VHOST_= USER_MQ}" > =20 > context_run passt "make clean" > context_run passt "make valgrind" > @@ -59,10 +60,18 @@ setup_passt() { > __vmem=3D"$(((${__vmem} + 500) / 1000))G" > __qemu_netdev=3D" \ > -chardev socket,id=3Dc,path=3D${STATESETUP}/passt.socket \ > - -netdev vhost-user,id=3Dv,chardev=3Dc \ > - -device virtio-net,netdev=3Dv \ > -object memory-backend-memfd,id=3Dm,share=3Don,size=3D${__vmem} \ > -numa node,memdev=3Dm" > + > + if [ ${VHOST_USER_MQ} -qt 1 ]; then > + __qemu_netdev=3D"${__qemu_netdev} \ > + -device virtio-net,netdev=3Dv,mq=3Dtrue \ > + -netdev vhost-user,id=3Dv,chardev=3Dc,queues=3D${VHOST_USER_MQ}" > + else > + __qemu_netdev=3D"${__qemu_netdev} \ > + -device virtio-net,netdev=3Dv \ > + -netdev vhost-user,id=3Dv,chardev=3Dc" > + fi > else > __qemu_netdev=3D"-device virtio-net-pci,netdev=3Ds \ > -netdev stream,id=3Ds,server=3Doff,addr.type=3Dunix,addr.path=3D${STA= TESETUP}/passt.socket" > @@ -155,7 +164,8 @@ setup_passt_in_ns() { > [ ${PCAP} -eq 1 ] && __opts=3D"${__opts} -p ${LOGDIR}/passt_in_pasta.pc= ap" > [ ${DEBUG} -eq 1 ] && __opts=3D"${__opts} -d" > [ ${TRACE} -eq 1 ] && __opts=3D"${__opts} --trace" > - [ ${VHOST_USER} -eq 1 ] && __opts=3D"${__opts} --vhost-user" > + [ ${VHOST_USER} -eq 1 ] && __opts=3D"${__opts} --vhost-user" && \ > + [ ${VHOST_USER_MQ} -gt 1 ] && __opts=3D"${__opts} --max-queues ${VHOST_= USER_MQ}" > =20 > if [ ${VALGRIND} -eq 1 ]; then > context_run passt "make clean" > @@ -173,10 +183,18 @@ setup_passt_in_ns() { > __vmem=3D"$(((${__vmem} + 500) / 1000))G" > __qemu_netdev=3D" \ > -chardev socket,id=3Dc,path=3D${STATESETUP}/passt.socket \ > - -netdev vhost-user,id=3Dv,chardev=3Dc \ > - -device virtio-net,netdev=3Dv \ > -object memory-backend-memfd,id=3Dm,share=3Don,size=3D${__vmem} \ > -numa node,memdev=3Dm" > + > + if [ ${VHOST_USER_MQ} -qt 1 ]; then > + __qemu_netdev=3D"${__qemu_netdev} \ > + -device virtio-net,netdev=3Dv,mq=3Dtrue \ > + -netdev vhost-user,id=3Dv,chardev=3Dc,queues=3D${VHOST_USER_MQ}" > + else > + __qemu_netdev=3D"${__qemu_netdev} \ > + -device virtio-net,netdev=3Dv \ > + -netdev vhost-user,id=3Dv,chardev=3Dc" > + fi > else > __qemu_netdev=3D"-device virtio-net-pci,netdev=3Ds \ > -netdev stream,id=3Ds,server=3Doff,addr.type=3Dunix,addr.path=3D${STA= TESETUP}/passt.socket" > @@ -241,18 +259,20 @@ setup_two_guests() { > [ ${PCAP} -eq 1 ] && __opts=3D"${__opts} -p ${LOGDIR}/passt_1.pcap" > [ ${DEBUG} -eq 1 ] && __opts=3D"${__opts} -d" > [ ${TRACE} -eq 1 ] && __opts=3D"${__opts} --trace" > - [ ${VHOST_USER} -eq 1 ] && __opts=3D"${__opts} --vhost-user" > + [ ${VHOST_USER} -eq 1 ] && __opts=3D"${__opts} --vhost-user" && \ > + [ ${VHOST_USER_MQ} -gt 1 ] && __opts=3D"${__opts} --max-queues ${VHOST_= USER_MQ}" > =20 > - context_run_bg passt_1 "./passt -s ${STATESETUP}/passt_1.socket -P ${ST= ATESETUP}/passt_1.pid -f ${__opts} --fqdn fqdn1.passt.test -H hostname1 -t = 10001 -u 10001" > + context_run_bg passt_1 "./passt -s ${STATESETUP}/passt_1.socket -P ${ST= ATESETUP}/passt_1.pid -f ${__opts} --fqdn fqdn1.passt.test -H hostname1 -t = 10001 -u 10001 ${__passt_mq}" > wait_for [ -f "${STATESETUP}/passt_1.pid" ] > =20 > __opts=3D > [ ${PCAP} -eq 1 ] && __opts=3D"${__opts} -p ${LOGDIR}/passt_2.pcap" > [ ${DEBUG} -eq 1 ] && __opts=3D"${__opts} -d" > [ ${TRACE} -eq 1 ] && __opts=3D"${__opts} --trace" > - [ ${VHOST_USER} -eq 1 ] && __opts=3D"${__opts} --vhost-user" > + [ ${VHOST_USER} -eq 1 ] && __opts=3D"${__opts} --vhost-user" && \ > + [ ${VHOST_USER_MQ} -gt 1 ] && __opts=3D"${__opts} --max-queues ${VHOST_= USER_MQ}" > =20 > - context_run_bg passt_2 "./passt -s ${STATESETUP}/passt_2.socket -P ${ST= ATESETUP}/passt_2.pid -f ${__opts} --hostname hostname2 --fqdn fqdn2 -t 100= 04 -u 10004" > + context_run_bg passt_2 "./passt -s ${STATESETUP}/passt_2.socket -P ${ST= ATESETUP}/passt_2.pid -f ${__opts} --hostname hostname2 --fqdn fqdn2 -t 100= 04 -u 10004 ${__passt_mq}" > wait_for [ -f "${STATESETUP}/passt_2.pid" ] > =20 > __vmem=3D"$((${MEM_KIB} / 1024 / 4))" > @@ -260,16 +280,28 @@ setup_two_guests() { > __vmem=3D"$(((${__vmem} + 500) / 1000))G" > __qemu_netdev1=3D" \ > -chardev socket,id=3Dc,path=3D${STATESETUP}/passt_1.socket \ > - -netdev vhost-user,id=3Dv,chardev=3Dc \ > - -device virtio-net,netdev=3Dv \ > -object memory-backend-memfd,id=3Dm,share=3Don,size=3D${__vmem} \ > -numa node,memdev=3Dm" > __qemu_netdev2=3D" \ > -chardev socket,id=3Dc,path=3D${STATESETUP}/passt_2.socket \ > - -netdev vhost-user,id=3Dv,chardev=3Dc \ > - -device virtio-net,netdev=3Dv \ > -object memory-backend-memfd,id=3Dm,share=3Don,size=3D${__vmem} \ > -numa node,memdev=3Dm" > + > + if [ ${VHOST_USER_MQ} -qt 1 ]; then > + __qemu_netdev1=3D"${__qemu_netdev1} \ > + -device virtio-net,netdev=3Dv,mq=3Dtrue \ > + -netdev vhost-user,id=3Dv,chardev=3Dc,queues=3D${VHOST_USER_MQ}" > + __qemu_netdev2=3D"${__qemu_netdev2} \ > + -device virtio-net,netdev=3Dv,mq=3Dtrue \ > + -netdev vhost-user,id=3Dv,chardev=3Dc,queues=3D${VHOST_USER_MQ}" > + else > + __qemu_netdev1=3D"${__qemu_netdev1} \ > + -device virtio-net,netdev=3Dv \ > + -netdev vhost-user,id=3Dv,chardev=3Dc" > + __qemu_netdev2=3D"${__qemu_netdev2} \ > + -device virtio-net,netdev=3Dv \ > + -netdev vhost-user,id=3Dv,chardev=3Dc" > + fi > else > __qemu_netdev1=3D"-device virtio-net-pci,netdev=3Ds \ > -netdev stream,id=3Ds,server=3Doff,addr.type=3Dunix,addr.path=3D${STA= TESETUP}/passt_1.socket" > diff --git a/test/run b/test/run > index f858e5586847..652cc12b1234 100755 > --- a/test/run > +++ b/test/run > @@ -190,6 +190,29 @@ run() { > test passt_vu_in_ns/shutdown > teardown passt_in_ns > =20 > + VHOST_USER=3D1 > + VHOST_USER_MQ=3D8 > + setup passt_in_ns > + test passt_vu/ndp > + test passt_vu_in_ns/dhcp > + test passt_vu_in_ns/icmp > + test passt_vu_in_ns/tcp > + test passt_vu_in_ns/udp > + test passt_vu_in_ns/shutdown > + teardown passt_in_ns > + > + setup two_guests > + test two_guests_vu/basic > + teardown two_guests > + > + setup passt_in_ns > + test passt_vu/ndp > + test passt_vu_in_ns/dhcp > + test perf/passt_vu_tcp > + test perf/passt_vu_udp > + test passt_vu_in_ns/shutdown > + teardown passt_in_ns > + > # TODO: Make those faster by at least pre-installing gcc and make on > # non-x86 images, then re-enable. > skip_distro() { > --=20 > 2.51.0 >=20 --=20 David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson --+3gyhuOAc/h3zTh1 Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEO+dNsU4E3yXUXRK2zQJF27ox2GcFAmkRfssACgkQzQJF27ox 2Gf2KQ/+J5WXm8dq+19jmSwH23AkyroEa3tHA2a86SwSEb/p4FoWqGa2uY1YXSrv iprslxg2YAgA5uudnVfQN2meno5SygAFvL4d9JL/Am+D8R6HN2N7/kZ2gevntIyQ /Yv8LkZpWBEcEM9t1jtnWyZXbE4gkIz6fhrqpHEmwL2UAtjPEoutzFEQrjNpXkya nzLkiGTFv9YC7yhiZS9bJDwKaib2eLdQhJDoW0e+/LLHQNiVSx5Lhz+/9TGZ/7cD 9BK8JZd6Xnat+udOczTWKvmlKfc2NABRGZ80sjOfmlt7CwIXqwO7EO9Qta5vChqH p53tTh6pXCAhODAVPEGjtpZkLaFZgoxs68Hw+bfY6/DqTx68TV+k6DZ3yiWeJJqT KUMO9nnOJbZZhNavUgbqwKWG37cgLJmOmhUyGqWohlMKoYj9kLffPCIfVzxBzRoH KPiJ796+CgixUR3A/bUZk2Nm4v5TUpCb0vcR2wFeXLWA4eEd6FSh93ufczFcCOxY 4VMwV0ojbZrxXbMm2T26ZQggfa3LfhVb6+8D/2e9FM3/4+MYmR77n0YL4suVQlj/ NUSy72p7CmCFZxOd/u6Eti9JHBFxfNALWVoCavVJYHvUC67ZY3WJO/oChAWe+7Fp GrcKfSTheqLJOeKjBaXB+8XCDU2CbK2eMsu8afOfr1+IEnkpWxA= =qAfb -----END PGP SIGNATURE----- --+3gyhuOAc/h3zTh1--