1
0
Fork 0
mirror of https://passt.top/passt synced 2025-05-30 12:55:42 +02:00

test: Add memory/passt test cases

These show a summary of memory usage in kernel and userspace with
different port forwarding configurations, details of userspace usage
using 'nm' (passt only uses statically allocated memory), and details
of kernel memory from slab reporting facilities.

This adds a new test image, mbuto.mem.img, with harcoded IPv4 and
IPv6 addresses and routes, and just the tools we need to start and
stop passt, to report from /proc/slabinfo, /proc/meminfo, and to
print and parse symbol sizes using nm(1).

passt can't pivot_root() for sandboxing purposes on ramfs, so we need
to create another filesystem and chroot into it, first.

We don't want to use pane context functions, as we're checking memory
usage for sockets: resort to screen-scraping.

Configure a dummy interface to provide passt with an appearance of
working IPv4 and IPv6 connectivity, contributed by David.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Stefano Brivio 2022-10-31 12:20:59 +01:00
parent ce2a0a5bb4
commit 40fc9e6e7b
6 changed files with 289 additions and 1 deletions

View file

@ -81,3 +81,33 @@ layout_pasta_simple() {
sleep 1
}
# layout_memory() - Screen-scraped panes for memory usage tests, big guest pane
layout_memory() {
sleep 3
tmux kill-pane -a -t 0
cmd_write 0 clear
tmux split-window -h -l '35%' -t passt_test
PANE_GUEST=0
PANE_INFO=1
get_info_cols
tmux send-keys -l -t ${PANE_INFO} 'while cat '"$STATEBASE/log_pipe"'; do :; done'
tmux send-keys -t ${PANE_INFO} -N 100 C-m
tmux select-pane -t ${PANE_INFO} -T "test log"
if context_exists guest; then
pane_watch_contexts ${PANE_GUEST} guest guest
else
tmux pipe-pane -O -t ${PANE_GUEST} "cat >> ${LOGDIR}/pane_guest.log"
tmux select-pane -t ${PANE_GUEST} -T "guest"
fi
info_layout "memory usage"
sleep 1
}

View file

@ -13,6 +13,8 @@
# Copyright (c) 2022 Red Hat GmbH
# Author: Stefano Brivio <sbrivio@redhat.com>
INITRAMFS_MEM="${BASEPATH}/mbuto.mem.img"
# setup_distro() - Set up pane layout for distro tests
setup_distro() {
layout_host
@ -25,6 +27,20 @@ setup_pasta_options() {
layout_pasta_simple
}
# setup_memory() - Start qemu in guest pane, and passt in passt context
setup_memory() {
layout_memory
pane_or_context_run guest 'qemu-system-$(uname -m)' \
' -machine accel=kvm' \
' -m '${VMEM}' -cpu host -smp '${VCPUS} \
' -kernel ' "/boot/vmlinuz-$(uname -r)" \
' -initrd '${INITRAMFS_MEM}' -nographic -serial stdio' \
' -nodefaults' \
' -append "console=ttyS0 mitigations=off apparmor=0"' \
" -pidfile ${STATESETUP}/qemu.pid"
}
# teardown_distro() - Nothing to do, yet
teardown_distro() {
:
@ -36,3 +52,7 @@ teardown_pasta_options() {
teardown_context_watch ${PANE_PASST} passt
}
# teardown_passt() - Kill qemu with ^C, remove passt PID file
teardown_memory() {
kill $(cat "${STATESETUP}/qemu.pid")
}