blob: aa7300acc8c96cdad39f797078a7f60ffbd09f40 [file] [log] [blame]
#!/bin/sh
. ./hw_vars
if [ "$SwapTotal" -eq 0 ]; then
echo "No swap space. Please setup swap before running $0" >&2
exit 1
fi
[ -n "$unit_size" ] || unit_size=$((MemAvailable << 10))
TMP=/tmp
# start N detached processes and do write first to consume all memory
# then wait for SIGUSR1 to resume to do read
./usemem -n $nr_task -W -d -p $TMP/pidfile $((unit_size / nr_task))
# Now that the N detached processes are done, start another process
# to consume memory to push pages allocated by the first N processes
# to swap.
# Also, redirect its output to /dev/null so that it won't output any
# statistics related information
swapfree=$(grep SwapFree /proc/meminfo |awk '{print $2}')
swapfree=$((swapfree << 10))
pushsize=$(($swapfree < $unit_size ? $swapfree : $unit_size))
./usemem $pushsize >/dev/null
# do it again to push more memory to swap
./usemem $pushsize >/dev/null
# wake those detached processes up to do read
kill -USR1 `cat $TMP/pidfile`
any_pid_alive()
{
local pidfile=$1
for pid in $(cat $pidfile)
do
test -d /proc/$pid && return
done
return 1
}
# wait till those detached processes exit
while true
do
sleep 5
any_pid_alive $TMP/pidfile && continue
break
done
rm $TMP/pidfile