#!/bin/sh
set -e

#
# Runs create.pl and rename.pl on two mountpoints with increasing load, varying
# debug levels.  Assumes that the node is already setup with llmount2.sh
#

SRCDIR="`dirname $0`"
CREATE=$SRCDIR/create.pl
RENAME=$SRCDIR/rename.pl

TIME=${TIME:-/usr/bin/time}

display_elapsed_time() {
    PREVIOUS_TS=$CURRENT_TS
    CURRENT_TS=`date +%s`
    BLOCK_ELAPSED=`expr $CURRENT_TS - $PREVIOUS_TS`
    TOTAL_ELAPSED=`expr $CURRENT_TS - $START_TS`

    echo " "
    echo "Elapsed time (block): ${BLOCK_ELAPSED} seconds"
    echo "Elapsed time (TOTAL): ${TOTAL_ELAPSED} seconds"
    echo " "
}    

debug_client_on()
{
	echo -1 > /proc/sys/lnet/debug
}

debug_client_off()
{
	echo 0x3f0400 > /proc/sys/lnet/debug
}

MNT=${MNT:-/mnt/lustre}

# Get our initial timestamps.
START_TS=`date +%s`
CURRENT_TS=$START_TS
PREVIOUS_TS=$START_TS

debug_client_on
echo "create.pl, 2 mounts, 1 thread, 10 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=10
echo "create.pl, 2 mounts, 1 thread, 100 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=100 --silent
echo "create.pl --use_mcreate=0, 2 mounts, 1 thread, 10 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=10 --use_mcreate=0
echo "create.pl --use_mcreate=0, 2 mounts, 1 thread, 100 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=100 --use_mcreate=0 --silent
echo "rename.pl, 2 mounts, 1 thread, 10 ops, debug on"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=10
echo "rename.pl, 2 mounts, 1 thread, 100 ops, debug on"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=100 --silent

display_elapsed_time

debug_client_off
echo "create.pl, 2 mounts, 1 thread, 1000 ops, debug off"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=1000 --silent
echo "create.pl --use_mcreate=0, 2 mounts, 1 thread, 1000 ops, debug off"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=1000 --use_mcreate=0 --silent
echo "rename.pl, 2 mounts, 1 thread, 1000 ops, debug off"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=1000 --silent

display_elapsed_time

debug_client_on
echo "create.pl, 2 mounts, 2 threads, 100 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=100 --num_threads=2 --silent
echo "create.pl --use_mcreate=0, 2 mounts, 2 threads, 100 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=100 --num_threads=2 --use_mcreate=0 --silent
echo "rename.pl, 2 mounts, 2 thread, 1000 ops, debug on"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=1000 --num_threads=2 --silent

display_elapsed_time

debug_client_off
echo "create.pl, 2 mounts, 2 threads, 2000 ops, debug off"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=2 --silent
echo "create.pl --use_mcreate=0, 2 mounts, 2 threads, 2000 ops, debug off"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=2 --use_mcreate=0 --silent
echo "rename.pl, 2 mounts, 2 threads, 2000 ops, debug off"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=2 --silent

display_elapsed_time

debug_client_on
echo "create.pl, 2 mounts, 4 threads, 100 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=100 --num_threads=4 --silent
echo "create.pl --use_mcreate=0, 2 mounts, 4 threads, 100 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=100 --num_threads=4 --use_mcreate=0 --silent
echo "rename.pl, 2 mounts, 4 threads, 2000 ops, debug on"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=4 --silent

display_elapsed_time

debug_client_off
echo "create.pl, 2 mounts, 4 threads, 2000 ops, debug off"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=4 --silent
echo "create.pl --use_mcreate=0, 2 mounts, 4 threads, 2000 ops, debug off"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=4 --use_mcreate=0 --silent
echo "rename.pl, 2 mounts, 4 threads, 2000 ops, debug off"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=4 --silent

display_elapsed_time

debug_client_on
echo "create.pl, 2 mounts, 8 threads, 500 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=500 --num_threads=8 --silent
echo "create.pl --use_mcreate=0, 2 mounts, 8 threads, 500 ops, debug on"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=500 --num_threads=8 --use_mcreate=0 --silent
echo "rename.pl, 2 mounts, 8 threads, 2000 ops, debug on"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=8 --silent

display_elapsed_time

debug_client_off
echo "create.pl, 2 mounts, 8 threads, 2000 ops, debug off"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=8 --silent
echo "create.pl --use_mcreate=0, 2 mounts, 8 threads, 2000 ops, debug off"
$TIME perl $CREATE --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=8 --use_mcreate=0 --silent
echo "rename.pl, 2 mounts, 8 threads, 2000 ops, debug off"
$TIME perl $RENAME --mountpt=${MNT} --num_mounts=2 --iterations=2000 --num_threads=8 --silent

display_elapsed_time