mirror of
https://passt.top/passt
synced 2025-05-20 16:35:33 +02:00
test: Add tests for passt in vhost-user mode
Run functional and performance tests for vhost-user mode as well. For functional tests, we add passt_vu and passt_vu_in_ns as symbolic links to their non-vhost-user counterparts, as no differences are intended but we want to distinguish them in test logs. For performance tests, instead, we add separate perf/passt_vu_tcp and perf/passt_vu_udp files, as we need longer test duration, as well as higher UDP sending bandwidths and larger TCP windows, to actually get the highest throughput vhost-user mode offers. For valgrind tests, vhost-user mode needs two extra system calls: statx and readlink. Add them as EXTRA_SYSCALLS for the valgrind target. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
28997fcb29
commit
676bf5488e
10 changed files with 479 additions and 16 deletions
test/lib
|
@ -49,6 +49,21 @@ td:empty { visibility: hidden; }
|
|||
__passt_tcp_LINE__ __passt_udp_LINE__
|
||||
</table>
|
||||
|
||||
</li><li><p>passt with vhost-user support</p>
|
||||
<table class="passt" width="70%">
|
||||
<tr>
|
||||
<th/>
|
||||
<th id="perf_passt_vu_tcp" colspan="__passt_vu_tcp_cols__">TCP, __passt_vu_tcp_threads__ at __passt_vu_tcp_freq__ GHz</th>
|
||||
<th id="perf_passt_vu_udp" colspan="__passt_vu_udp_cols__">UDP, __passt_vu_udp_threads__ at __passt_vu_udp_freq__ GHz</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right">MTU:</td>
|
||||
__passt_vu_tcp_header__
|
||||
__passt_vu_udp_header__
|
||||
</tr>
|
||||
__passt_vu_tcp_LINE__ __passt_vu_udp_LINE__
|
||||
</table>
|
||||
|
||||
<style type="text/CSS">
|
||||
table.pasta_local td { border: 0px solid; padding: 6px; line-height: 1; }
|
||||
table.pasta_local td { text-align: right; }
|
||||
|
|
|
@ -15,8 +15,7 @@
|
|||
|
||||
INITRAMFS="${BASEPATH}/mbuto.img"
|
||||
VCPUS="$( [ $(nproc) -ge 8 ] && echo 6 || echo $(( $(nproc) / 2 + 1 )) )"
|
||||
__mem_kib="$(sed -n 's/MemTotal:[ ]*\([0-9]*\) kB/\1/p' /proc/meminfo)"
|
||||
VMEM="$((${__mem_kib} / 1024 / 4))"
|
||||
MEM_KIB="$(sed -n 's/MemTotal:[ ]*\([0-9]*\) kB/\1/p' /proc/meminfo)"
|
||||
QEMU_ARCH="$(uname -m)"
|
||||
[ "${QEMU_ARCH}" = "i686" ] && QEMU_ARCH=i386
|
||||
|
||||
|
@ -46,6 +45,7 @@ setup_passt() {
|
|||
[ ${PCAP} -eq 1 ] && __opts="${__opts} -p ${LOGDIR}/passt.pcap"
|
||||
[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
|
||||
[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
|
||||
[ ${VHOST_USER} -eq 1 ] && __opts="${__opts} --vhost-user"
|
||||
|
||||
context_run passt "make clean"
|
||||
context_run passt "make valgrind"
|
||||
|
@ -54,16 +54,29 @@ setup_passt() {
|
|||
# pidfile isn't created until passt is listening
|
||||
wait_for [ -f "${STATESETUP}/passt.pid" ]
|
||||
|
||||
__vmem="$((${MEM_KIB} / 1024 / 4))"
|
||||
if [ ${VHOST_USER} -eq 1 ]; then
|
||||
__vmem="$(((${__vmem} + 500) / 1000))G"
|
||||
__qemu_netdev=" \
|
||||
-chardev socket,id=c,path=${STATESETUP}/passt.socket \
|
||||
-netdev vhost-user,id=v,chardev=c \
|
||||
-device virtio-net,netdev=v \
|
||||
-object memory-backend-memfd,id=m,share=on,size=${__vmem} \
|
||||
-numa node,memdev=m"
|
||||
else
|
||||
__qemu_netdev="-device virtio-net-pci,netdev=s \
|
||||
-netdev stream,id=s,server=off,addr.type=unix,addr.path=${STATESETUP}/passt.socket"
|
||||
fi
|
||||
|
||||
GUEST_CID=94557
|
||||
context_run_bg qemu 'qemu-system-'"${QEMU_ARCH}" \
|
||||
' -machine accel=kvm' \
|
||||
' -m '${VMEM}' -cpu host -smp '${VCPUS} \
|
||||
' -m '${__vmem}' -cpu host -smp '${VCPUS} \
|
||||
' -kernel '"${KERNEL}" \
|
||||
' -initrd '${INITRAMFS}' -nographic -serial stdio' \
|
||||
' -nodefaults' \
|
||||
' -append "console=ttyS0 mitigations=off apparmor=0" ' \
|
||||
' -device virtio-net-pci,netdev=s0 ' \
|
||||
" -netdev stream,id=s0,server=off,addr.type=unix,addr.path=${STATESETUP}/passt.socket " \
|
||||
" ${__qemu_netdev}" \
|
||||
" -pidfile ${STATESETUP}/qemu.pid" \
|
||||
" -device vhost-vsock-pci,guest-cid=$GUEST_CID"
|
||||
|
||||
|
@ -142,6 +155,7 @@ setup_passt_in_ns() {
|
|||
[ ${PCAP} -eq 1 ] && __opts="${__opts} -p ${LOGDIR}/passt_in_pasta.pcap"
|
||||
[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
|
||||
[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
|
||||
[ ${VHOST_USER} -eq 1 ] && __opts="${__opts} --vhost-user"
|
||||
|
||||
if [ ${VALGRIND} -eq 1 ]; then
|
||||
context_run passt "make clean"
|
||||
|
@ -154,17 +168,30 @@ setup_passt_in_ns() {
|
|||
fi
|
||||
wait_for [ -f "${STATESETUP}/passt.pid" ]
|
||||
|
||||
__vmem="$((${MEM_KIB} / 1024 / 4))"
|
||||
if [ ${VHOST_USER} -eq 1 ]; then
|
||||
__vmem="$(((${__vmem} + 500) / 1000))G"
|
||||
__qemu_netdev=" \
|
||||
-chardev socket,id=c,path=${STATESETUP}/passt.socket \
|
||||
-netdev vhost-user,id=v,chardev=c \
|
||||
-device virtio-net,netdev=v \
|
||||
-object memory-backend-memfd,id=m,share=on,size=${__vmem} \
|
||||
-numa node,memdev=m"
|
||||
else
|
||||
__qemu_netdev="-device virtio-net-pci,netdev=s \
|
||||
-netdev stream,id=s,server=off,addr.type=unix,addr.path=${STATESETUP}/passt.socket"
|
||||
fi
|
||||
|
||||
GUEST_CID=94557
|
||||
context_run_bg qemu 'qemu-system-'"${QEMU_ARCH}" \
|
||||
' -machine accel=kvm' \
|
||||
' -M accel=kvm:tcg' \
|
||||
' -m '${VMEM}' -cpu host -smp '${VCPUS} \
|
||||
' -m '${__vmem}' -cpu host -smp '${VCPUS} \
|
||||
' -kernel '"${KERNEL}" \
|
||||
' -initrd '${INITRAMFS}' -nographic -serial stdio' \
|
||||
' -nodefaults' \
|
||||
' -append "console=ttyS0 mitigations=off apparmor=0" ' \
|
||||
' -device virtio-net-pci,netdev=s0 ' \
|
||||
" -netdev stream,id=s0,server=off,addr.type=unix,addr.path=${STATESETUP}/passt.socket " \
|
||||
" ${__qemu_netdev}" \
|
||||
" -pidfile ${STATESETUP}/qemu.pid" \
|
||||
" -device vhost-vsock-pci,guest-cid=$GUEST_CID"
|
||||
|
||||
|
@ -214,6 +241,7 @@ setup_two_guests() {
|
|||
[ ${PCAP} -eq 1 ] && __opts="${__opts} -p ${LOGDIR}/passt_1.pcap"
|
||||
[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
|
||||
[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
|
||||
[ ${VHOST_USER} -eq 1 ] && __opts="${__opts} --vhost-user"
|
||||
|
||||
context_run_bg passt_1 "./passt -s ${STATESETUP}/passt_1.socket -P ${STATESETUP}/passt_1.pid -f ${__opts} -t 10001 -u 10001"
|
||||
wait_for [ -f "${STATESETUP}/passt_1.pid" ]
|
||||
|
@ -222,33 +250,54 @@ setup_two_guests() {
|
|||
[ ${PCAP} -eq 1 ] && __opts="${__opts} -p ${LOGDIR}/passt_2.pcap"
|
||||
[ ${DEBUG} -eq 1 ] && __opts="${__opts} -d"
|
||||
[ ${TRACE} -eq 1 ] && __opts="${__opts} --trace"
|
||||
[ ${VHOST_USER} -eq 1 ] && __opts="${__opts} --vhost-user"
|
||||
|
||||
context_run_bg passt_2 "./passt -s ${STATESETUP}/passt_2.socket -P ${STATESETUP}/passt_2.pid -f ${__opts} -t 10004 -u 10004"
|
||||
wait_for [ -f "${STATESETUP}/passt_2.pid" ]
|
||||
|
||||
__vmem="$((${MEM_KIB} / 1024 / 4))"
|
||||
if [ ${VHOST_USER} -eq 1 ]; then
|
||||
__vmem="$(((${__vmem} + 500) / 1000))G"
|
||||
__qemu_netdev1=" \
|
||||
-chardev socket,id=c,path=${STATESETUP}/passt_1.socket \
|
||||
-netdev vhost-user,id=v,chardev=c \
|
||||
-device virtio-net,netdev=v \
|
||||
-object memory-backend-memfd,id=m,share=on,size=${__vmem} \
|
||||
-numa node,memdev=m"
|
||||
__qemu_netdev2=" \
|
||||
-chardev socket,id=c,path=${STATESETUP}/passt_2.socket \
|
||||
-netdev vhost-user,id=v,chardev=c \
|
||||
-device virtio-net,netdev=v \
|
||||
-object memory-backend-memfd,id=m,share=on,size=${__vmem} \
|
||||
-numa node,memdev=m"
|
||||
else
|
||||
__qemu_netdev1="-device virtio-net-pci,netdev=s \
|
||||
-netdev stream,id=s,server=off,addr.type=unix,addr.path=${STATESETUP}/passt_1.socket"
|
||||
__qemu_netdev2="-device virtio-net-pci,netdev=s \
|
||||
-netdev stream,id=s,server=off,addr.type=unix,addr.path=${STATESETUP}/passt_2.socket"
|
||||
fi
|
||||
|
||||
GUEST_1_CID=94557
|
||||
context_run_bg qemu_1 'qemu-system-'"${QEMU_ARCH}" \
|
||||
' -M accel=kvm:tcg' \
|
||||
' -m '${VMEM}' -cpu host -smp '${VCPUS} \
|
||||
' -m '${__vmem}' -cpu host -smp '${VCPUS} \
|
||||
' -kernel '"${KERNEL}" \
|
||||
' -initrd '${INITRAMFS}' -nographic -serial stdio' \
|
||||
' -nodefaults' \
|
||||
' -append "console=ttyS0 mitigations=off apparmor=0" ' \
|
||||
' -device virtio-net-pci,netdev=s0 ' \
|
||||
" -netdev stream,id=s0,server=off,addr.type=unix,addr.path=${STATESETUP}/passt_1.socket " \
|
||||
" ${__qemu_netdev1}" \
|
||||
" -pidfile ${STATESETUP}/qemu_1.pid" \
|
||||
" -device vhost-vsock-pci,guest-cid=$GUEST_1_CID"
|
||||
|
||||
GUEST_2_CID=94558
|
||||
context_run_bg qemu_2 'qemu-system-'"${QEMU_ARCH}" \
|
||||
' -M accel=kvm:tcg' \
|
||||
' -m '${VMEM}' -cpu host -smp '${VCPUS} \
|
||||
' -m '${__vmem}' -cpu host -smp '${VCPUS} \
|
||||
' -kernel '"${KERNEL}" \
|
||||
' -initrd '${INITRAMFS}' -nographic -serial stdio' \
|
||||
' -nodefaults' \
|
||||
' -append "console=ttyS0 mitigations=off apparmor=0" ' \
|
||||
' -device virtio-net-pci,netdev=s0 ' \
|
||||
" -netdev stream,id=s0,server=off,addr.type=unix,addr.path=${STATESETUP}/passt_2.socket " \
|
||||
" ${__qemu_netdev2}" \
|
||||
" -pidfile ${STATESETUP}/qemu_2.pid" \
|
||||
" -device vhost-vsock-pci,guest-cid=$GUEST_2_CID"
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ setup_memory() {
|
|||
|
||||
pane_or_context_run guest 'qemu-system-$(uname -m)' \
|
||||
' -machine accel=kvm' \
|
||||
' -m '${VMEM}' -cpu host -smp '${VCPUS} \
|
||||
' -m '$((${MEM_KIB} / 1024 / 4))' -cpu host -smp '${VCPUS} \
|
||||
' -kernel ' "/boot/vmlinuz-$(uname -r)" \
|
||||
' -initrd '${INITRAMFS_MEM}' -nographic -serial stdio' \
|
||||
' -nodefaults' \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue