606e0c7b95
Differences in allocated Acpi-Parse entries are gone (at least) since the 6.1 Linux kernel series. I should run this on a 6.10 kernel, eventually, and adjust things further, as needed. Userspace symbols are also fairly different now: show whatever is more than 1 MiB at the moment. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Tested-by: David Gibson <david@gibson.dropbear.id.au>
182 lines
4.2 KiB
Text
182 lines
4.2 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__
|
|
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 exec switch_root /test /bin/sh
|
|
|
|
guest ulimit -Hn 300000
|
|
guest unshare -rUn
|
|
guest ip link add eth0 type dummy
|
|
guest ip link set eth0 up
|
|
guest ip address add 192.0.2.2/24 dev eth0
|
|
guest ip address add 2001:db8::2/64 dev eth0
|
|
guest ip route add default via 192.0.2.1
|
|
guest ip -6 route add default via 2001:db8::1 dev eth0
|
|
|
|
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 flowtab
|
|
nm_row
|
|
set WHAT tcp6_payload
|
|
nm_row
|
|
set WHAT tcp4_payload
|
|
nm_row
|
|
set WHAT pkt_buf
|
|
nm_row
|
|
set WHAT udp_payload
|
|
nm_row
|
|
set WHAT flow_hashtab
|
|
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 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
|