aboutgitcodebugslistschat
path: root/test/memory/passt
blob: 3da62352d60c7e894717cca1874fe1f831631ad9 (plain) (tree)













































                                                                                                  
                                                                                  




                                                                                                 
                                                                               





































































































































                                                                                                                                                             
# SPDX-License-Identifier: AGPL-3.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