aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher2016-07-16 21:18:59 +0200
committerJakob Unterwurzacher2016-07-16 21:20:54 +0200
commit0a3225b1ebb3a005886866ffd48c1260a57107c8 (patch)
tree6bc0ac3fca61a2ceabe9f3bc5aec3cf91fe024c9
parent6b50f2debcc78448053b8b015b828833b2796db0 (diff)
tests: add RSS tracking to extractloop
This obsoletes loopback-mem.bash.
-rwxr-xr-xtests/stress_tests/extractloop.bash51
-rwxr-xr-xtests/stress_tests/extractloop_plot_csv.m11
-rwxr-xr-xtests/stress_tests/loopback-mem.bash45
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
-