#!/usr/bin/bash
###SHELLPACK preamble thpcompact-bench 0

###SHELLPACK parseargBegin
###SHELLPACK parseargInstall
###SHELLPACK parseargParam	--min-threads	THPCOMPACT_MIN_THREADS
###SHELLPACK parseargParam	--max-threads	THPCOMPACT_MAX_THREADS
###SHELLPACK parseargParam	--anon-mapsize	THPCOMPACT_ANONSIZE
###SHELLPACK parseargParam	--file-mapsize	THPCOMPACT_FILESIZE
###SHELLPACK parseargParam	--madv-huge	THPCOMPACT_MADV_HUGEPAGE
###SHELLPACK parseargEnd
###SHELLPACK monitor_hooks

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

ALIGN=$((2*1048576*THPCOMPACT_MAX_THREADS))
THPCOMPACT_FILESIZE=$(((THPCOMPACT_FILESIZE+ALIGN)&~(ALIGN-1)))

# Increase max map count to account for hole punching
sysctl vm.max_map_count=$((THPCOMPACT_ANONSIZE*2/1048576))

create_random_file $THPCOMPACT_FILESIZE $SHELLPACK_DATA/workfile
echo Total anon: $((THPCOMPACT_ANONSIZE/1048576)) MB
echo Total file: $((THPCOMPACT_FILESIZE/1048576)) MB

MADV_HUGEPAGE=0
if [ "$THPCOMPACT_MADV_HUGEPAGE" = "yes" ]; then
	MADV_HUGEPAGE=1
fi

###SHELLPACK threads_large_stride_begin $THPCOMPACT_MIN_THREADS $THPCOMPACT_MAX_THREADS
	echo Dropping cache to avoid distorting init timings
	echo 3 > /proc/sys/vm/drop_caches
	monitor_pre_hook $LOGDIR_RESULTS $NR_THREADS
	echo Starting $NR_THREADS/$THPCOMPACT_MAX_THREADS
	BENCH_CMD="./thpcompact $NR_THREADS $THPCOMPACT_ANONSIZE $THPCOMPACT_FILESIZE $SHELLPACK_DATA/workfile $MADV_HUGEPAGE"
	log_cmd "$BENCH_CMD"
	$TIME_CMD -o $LOGDIR_RESULTS/threads-${NR_THREADS}.time 		\
		$BENCH_CMD > $LOGDIR_RESULTS/threads-${NR_THREADS}.log 2>&1
	monitor_post_hook $LOGDIR_RESULTS $NR_THREADS
	gzip $LOGDIR_RESULTS/threads-${NR_THREADS}.log
###SHELLPACK threads_stride_end
rm $SHELLPACK_DATA/workfile
exit $SHELLPACK_SUCCESS
