#!/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