passt/test/memory/passt
Stefano Brivio ca2749e1bd passt: Relicense to GPL 2.0, or any later version
In practical terms, passt doesn't benefit from the additional
protection offered by the AGPL over the GPL, because it's not
suitable to be executed over a computer network.

Further, restricting the distribution under the version 3 of the GPL
wouldn't provide any practical advantage either, as long as the passt
codebase is concerned, and might cause unnecessary compatibility
dilemmas.

Change licensing terms to the GNU General Public License Version 2,
or any later version, with written permission from all current and
past contributors, namely: myself, David Gibson, Laine Stump, Andrea
Bolognani, Paul Holzinger, Richard W.M. Jones, Chris Kuhn, Florian
Weimer, Giuseppe Scrivano, Stefan Hajnoczi, and Vasiliy Ulyanov.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
2023-04-06 18:00:33 +02:00

187 lines
4.1 KiB
Text

# SPDX-License-Identifier: GPL-2.0-or-later
#
# PASST - Plug A Simple Socket Transport
# for qemu/UNIX domain socket mode
#
# PASTA - Pack A Subtle Tap Abstraction
# for network namespace/tap device mode
#
# test/memory/passt - Show memory usage of passt in kernel and userspace
#
# Copyright (c) 2022 Red Hat GmbH
# Author: Stefano Brivio <sbrivio@redhat.com>
gtools sed cat diff nm sort kill tee head tail chroot unshare mount mkdir cp
def meminfo_row
gout DIFF meminfo_diff /tmp/meminfo.before /tmp/meminfo.after __WHAT__
tl __NAME__
td __DIFF__ 3 0 0
endef
def meminfo_reverse_row
gout DIFF meminfo_diff /tmp/meminfo.after /tmp/meminfo.before __WHAT__
tl __NAME__
td __DIFF__ 3 0 0
endef
def nm_row
gout SIZE nm_size /tmp/nm.size __WHAT__
tl __WHAT__
td __SIZE__ 6 0 0
endef
def slab_row
gout COUNT slab_diff_count /tmp/slabinfo.before /tmp/slabinfo.after __WHAT__
gout SIZE slab_size /tmp/slabinfo.before __WHAT__
gout DIFF slab_diff_size /tmp/slabinfo.before /tmp/slabinfo.after __WHAT__
tl __WHAT__
td __COUNT__ 0 0 0
td __SIZE__ 0 0 0
td __DIFF__ 6 0 0
endef
def start_stop_diff
guest sed /proc/slabinfo -ne 's/^\([^ ]* *[^ ]* *[^ ]* *[^ ]*\).*/\\\1/p' > /tmp/slabinfo.before
guest cat /proc/meminfo > /tmp/meminfo.before
guest /bin/passt.avx2 -l /tmp/log -s /tmp/sock -P /tmp/pid __OPTS__ --netns-only
sleep 2
guest cat /proc/meminfo > /tmp/meminfo.after
guest sed /proc/slabinfo -ne 's/^\([^ ]* *[^ ]* *[^ ]* *[^ ]*\).*/\\\1/p' > /tmp/slabinfo.after
guest kill \$(cat /tmp/pid)
guest diff -y --suppress-common-lines /tmp/meminfo.before /tmp/meminfo.after || :
guest nm -td -Sr --size-sort -P /bin/passt.avx2 | head -30 | tee /tmp/nm.size
guest sed /proc/slabinfo -ne 's/\(.*<objsize>\).*$/\1/p' | tail -1; (diff -y --suppress-common-lines /tmp/slabinfo.before /tmp/slabinfo.after | sort -grk8)
endef
def summary
info Memory usage summary
info
th type MiB
set WHAT MemFree
set NAME used
meminfo_reverse_row
set WHAT AnonPages
set NAME userspace
meminfo_row
set WHAT Slab
set NAME kernel
meminfo_row
te
endef
guest mkdir /test
guest mount -t tmpfs none /test
guest mkdir /test/proc /test/dev /test/tmp
guest mount -o bind /proc /test/proc
guest mount -o bind /dev /test/dev
guest cp -Lr /bin /lib /lib64 /usr /sbin /test/
guest ulimit -Hn 300000
guest unshare -rUm -R /test
guest chroot .
guest meminfo_size() { grep "^$2:" $1 | tr -s ' ' | cut -f2 -d ' '; }
guest meminfo_diff() { echo $(( $(meminfo_size $2 $3) - $(meminfo_size $1 $3) )); }
guest nm_size() { grep -m1 "^$2 " $1 | cut -f4 -d ' '; }
guest slab_count() { grep "^$2 " $1 | tr -s ' ' | cut -f3 -d ' '; }
guest slab_size() { grep "^$2 " $1 | tr -s ' ' | cut -f4 -d ' '; }
guest slab_diff_count() { echo $(( $(slab_count $2 $3) - $(slab_count $1 $3) )); }
guest slab_diff_size() { echo $(( $(slab_count $2 $3) * $(slab_size $2 $3) - $(slab_count $1 $3) * $(slab_size $1 $3) )); }
test Memory usage: all TCP and UDP ports forwarded, IPv4 and IPv6
set OPTS -t all -u all
start_stop_diff
summary
info Userspace memory detail
info
th symbol MiB
set WHAT tcp_buf_discard
nm_row
set WHAT tcp6_l2_buf
nm_row
set WHAT tcp4_l2_buf
nm_row
set WHAT tc
nm_row
set WHAT pkt_buf
nm_row
set WHAT udp_splice_map
nm_row
set WHAT udp6_l2_buf
nm_row
set WHAT udp4_l2_buf
nm_row
set WHAT udp_tap_map
nm_row
set WHAT icmp_id_map
nm_row
set WHAT udp_splice_buf
nm_row
set WHAT tc_hash
nm_row
set WHAT pool_tap6_storage
nm_row
set WHAT pool_tap4_storage
nm_row
set WHAT tap6_l4
nm_row
set WHAT tap4_l4
nm_row
te
info Kernel memory detail
info
th objects count size MiB
set WHAT pid
slab_row
set WHAT dentry
slab_row
set WHAT Acpi-Parse
slab_row
set WHAT kmalloc-64
slab_row
set WHAT kmalloc-32
slab_row
set WHAT lsm_file_cache
slab_row
set WHAT filp
slab_row
set WHAT anon_vma_chain
slab_row
set WHAT ep_head
slab_row
set WHAT sock_inode_cache
slab_row
set WHAT signal_cache
slab_row
set WHAT TCPv6
slab_row
set WHAT TCP
slab_row
set WHAT UDPv6
slab_row
te
test Memory usage: all TCP ports forwarded, IPv4
set OPTS -t all -4
start_stop_diff
summary
test Memory usage: all TCP and UDP ports forwarded, IPv4
set OPTS -t all -u all -4
start_stop_diff
summary
test Memory usage: no ports forwarded
set OPTS -t none -u none
start_stop_diff
summary