diff options
| author | Jakob Unterwurzacher | 2016-07-16 21:18:59 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2016-07-16 21:20:54 +0200 | 
| commit | 0a3225b1ebb3a005886866ffd48c1260a57107c8 (patch) | |
| tree | 6bc0ac3fca61a2ceabe9f3bc5aec3cf91fe024c9 | |
| parent | 6b50f2debcc78448053b8b015b828833b2796db0 (diff) | |
tests: add RSS tracking to extractloop
This obsoletes loopback-mem.bash.
| -rwxr-xr-x | tests/stress_tests/extractloop.bash | 51 | ||||
| -rwxr-xr-x | tests/stress_tests/extractloop_plot_csv.m | 11 | ||||
| -rwxr-xr-x | tests/stress_tests/loopback-mem.bash | 45 | 
3 files changed, 48 insertions, 59 deletions
| diff --git a/tests/stress_tests/extractloop.bash b/tests/stress_tests/extractloop.bash index 1c0d4ce..09dfec8 100755 --- a/tests/stress_tests/extractloop.bash +++ b/tests/stress_tests/extractloop.bash @@ -17,39 +17,50 @@ MD5="$PWD/linux-3.0.md5sums"  # Setup dirs  cd /tmp  wget -nv --show-progress -c https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.gz -DIR1=$(mktemp -d /tmp/extractloop.XXX) -DIR2=$DIR1.mnt -mkdir $DIR2 +CRYPT=$(mktemp -d /tmp/extractloop.XXX) +CSV=$CRYPT.csv +MNT=$CRYPT.mnt +mkdir $MNT  # Mount +FSPID=0  if [ $# -eq 1 ] && [ "$1" == "-encfs" ]; then  	echo "Testing EncFS" -	encfs --extpass="echo test" --standard $DIR1 $DIR2 > /dev/null +	encfs --extpass="echo test" --standard $CRYPT $MNT > /dev/null  elif [ $# -eq 1 ] && [ "$1" == "-loopback" ]; then  	echo "Testing go-fuse loopback" -	loopback -l $DIR2 $DIR1 & -	sleep 1 +	rm -f /tmp/loopback*.memprof +	loopback -l -memprofile=/tmp/loopback $MNT $CRYPT & +	FSPID=$(jobs -p)  else -	gocryptfs -q -init -extpass="echo test" -scryptn=10 $DIR1 -	gocryptfs -q -extpass="echo test" $DIR1 $DIR2 -	#gocryptfs -q -extpass="echo test" -nosyslog -memprofile /tmp/extractloop-mem $DIR1 $DIR2 +	echo "Testing gocryptfs" +	gocryptfs -q -init -extpass="echo test" -scryptn=10 $CRYPT +	gocryptfs -q -extpass="echo test" -nosyslog -f $CRYPT $MNT & +	FSPID=$(jobs -p) +	#gocryptfs -q -extpass="echo test" -nosyslog -memprofile /tmp/extractloop-mem $CRYPT $MNT  fi -cd $DIR2 +echo "Test dir: $CRYPT" +# Sleep to make sure the FS is already mounted on MNT +sleep 1 +cd $MNT + +ln -sTf $CSV /tmp/extractloop.csv  # Cleanup trap  # Note: gocryptfs may have already umounted itself because bash relays SIGINT  # Just ignore fusermount errors. -trap "cd /; fusermount -u -z $DIR2; rm -rf $DIR1 $DIR2" EXIT +trap "cd /; fusermount -u -z $MNT; rm -rf $CRYPT $MNT" EXIT  function loop { -	# Note: In a subshell, $$ returns the PID of the *parent* shell, -	# we need our own, which is why we have to use $BASHPID. +	# Note: In a subshell, $$ returns the PID of the parent shell. +	# We need our own PID, which is why we use $BASHPID.  	mkdir $BASHPID  	cd $BASHPID  	echo "[pid $BASHPID] Starting loop"  	N=1 +	RSS=0  	while true  	do  		t1=$SECONDS @@ -58,11 +69,23 @@ function loop {  		rm -Rf linux-3.0  		t2=$SECONDS  		delta=$((t2-t1)) -		echo "[pid $BASHPID] Iteration $N done, $delta seconds" +		if [ $FSPID -gt 0 ]; then +			RSS=$(grep VmRSS /proc/$FSPID/status | tr -s ' ' | cut -f2 -d ' ') +			echo "$N,$SECONDS,$RSS" >> $CSV +		fi +		echo "[pid $BASHPID] Iteration $N done, $delta seconds, RSS $RSS kiB"  		let N=$N+1  	done  } +function memprof { +	while true; do +		kill -USR1 $FSPID +		sleep 60 +	done +} +  loop &  loop & +#memprof &  wait diff --git a/tests/stress_tests/extractloop_plot_csv.m b/tests/stress_tests/extractloop_plot_csv.m new file mode 100755 index 0000000..d6c164e --- /dev/null +++ b/tests/stress_tests/extractloop_plot_csv.m @@ -0,0 +1,11 @@ +#!/usr/bin/octave + +r=csvread('/tmp/extractloop.csv'); +figure('Position',[100,100,1600,800]); +plot(r(:,2), r(:,3)/1024, '-o'); +xlabel('seconds') +ylabel('RSS MiB') +grid on; +drawnow; +disp('press enter to exit'); +input(''); diff --git a/tests/stress_tests/loopback-mem.bash b/tests/stress_tests/loopback-mem.bash deleted file mode 100755 index fa3b0e3..0000000 --- a/tests/stress_tests/loopback-mem.bash +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -# -# Mount a loopback filesystem somewhere on /tmp, then run an -# infinite loop inside that does the following: -# 1) Extract linux-3.0.tar.gz -# 2) Delete -# 3) Get memory profile -# -# This test is good at discovering inode-related memory leaks because it creates -# huge numbers of files. - -set -eu - -# Setup dirs -cd /tmp -wget -nv --show-progress -c https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.gz -DIR1=$(mktemp -d /tmp/loopback-mem.XXX) -DIR2=$DIR1.mnt -mkdir $DIR2 - -# Mount -loopback -l -memprofile /tmp/lmem $DIR2 $DIR1 & -LOOPBACKPID=$(jobs -p) -sleep 1 -cd $DIR2 - -# Cleanup trap -trap "cd /; fusermount -u -z $DIR2; rm -rf $DIR1 $DIR2" EXIT - -echo "Starting loop" - -N=1 -while true; do -	t1=$SECONDS -	tar xf /tmp/linux-3.0.tar.gz -	rm -Rf linux-3.0 -	t2=$SECONDS -	delta=$((t2-t1)) -	rss=$(grep VmRSS /proc/$LOOPBACKPID/status) -	echo "Iteration $N done, $delta seconds, $rss" -	let N=$N+1 -	sleep 1 -	kill -USR1 $LOOPBACKPID -done - | 
