#!/bin/bash
# This script installs fsmark and runs the regression tests

###SHELLPACK preamble fsmark-bench 3.3
MIN_THREADS=1
MAX_THREADS=1
NR_SUB_DIRECTORIES=100
NR_FILES_PER_ITERATION=50000
ITERATIONS=63
FILESIZE=0

###SHELLPACK parseargBegin
###SHELLPACK parseargInstall
###SHELLPACK parseargParam --min-threads            MIN_THREADS
###SHELLPACK parseargParam --max-threads            MAX_THREADS
###SHELLPACK parseargParam --filesize               FILESIZE
###SHELLPACK parseargParam --nr-files-per-iteration NR_FILES_PER_ITERATION
###SHELLPACK parseargParam --nr-sub-directories     NR_SUB_DIRECTORIES
###SHELLPACK parseargParam --iterations             ITERATIONS
###SHELLPACK parseargEnd
###SHELLPACK monitor_hooks

###SHELLPACK check_install_required fsmark-${VERSION}
###SHELLPACK init_complete

ln -s $SHELLPACK_DATA /tmp/fsmark-$$

# Scale iterations to fit on the disk
ACTUAL_DISKSIZE=`df -k $SHELLPACK_DATA | tail -1 | awk '{print $2}'`
ACTUAL_DISKSIZE=$((ACTUAL_DISKSIZE*1024))
USABLE_DISKSIZE=$((ACTUAL_DISKSIZE*6/10))
ESTIMATED_USAGE=$((FILESIZE*NR_FILES_PER_ITERATION*ITERATIONS))

echo Requested iterations: $ITERATIONS, estimated usage $((ESTIMATED_USAGE/(1048576*1024)))GB, diskspace $((ACTUAL_DISKSIZE/(1048576*1024)))GB
while [ $ESTIMATED_USAGE -gt $USABLE_DISKSIZE ]; do
	ITERATIONS=$((ITERATIONS-1))
	ESTIMATED_USAGE=$((FILESIZE*NR_FILES_PER_ITERATION*ITERATIONS))
done
echo Testing iterations: $ITERATIONS, estimated usage $((ESTIMATED_USAGE/(1048576*1024)))GB, diskspace $((ACTUAL_DISKSIZE/(1048576*1024)))GB

if [ $ITERATIONS -le 0 ]; then
	die Disk is too small to potentially run benchmark
fi

###SHELLPACK threads_large_stride_begin $MIN_THREADS $MAX_THREADS
	PARAM=
	for THREAD in `seq 1 $NR_THREADS`; do
		mkdir -p /tmp/fsmark-$$/$THREAD
		PARAM="$PARAM -d /tmp/fsmark-$$/$THREAD"
	done

	echo ./fs_mark \
		$PARAM \
		-D $NR_SUB_DIRECTORIES \
		-n $(($NR_FILES_PER_ITERATION/$NR_THREADS)) \
		-L $ITERATIONS \
		-t $NR_THREADS \
		-S0 \
		-s $FILESIZE | tee $LOGDIR_RESULTS/fsmark-cmd-${NR_THREADS}.log

	monitor_pre_hook $LOGDIR_RESULTS $NR_THREADS
	eval ./fs_mark \
		$PARAM \
		-D $NR_SUB_DIRECTORIES \
		-n $(($NR_FILES_PER_ITERATION/$NR_THREADS)) \
		-L $ITERATIONS \
		-t $NR_THREADS \
		-S0 \
		-s $FILESIZE &> $LOGDIR_RESULTS/fsmark-${NR_THREADS}.log
	monitor_post_hook $LOGDIR_RESULTS $NR_THREADS
	rm -rf $SHELLPACK_DATA/*
	gzip $LOGDIR_RESULTS/fsmark-${NR_THREADS}.log
###SHELLPACK threads_stride_end

rm /tmp/fsmark-$$
rm -rf $SHELLPACK_DATA/fsmark-$$

exit $SHELLPACK_SUCCESS
