#!/usr/bin/bash
# cyclictest
###SHELLPACK preamble cyclictest-bench v1.5
###SHELLPACK addon fragment

CYCLICTEST_BACKGROUND=none
sudo_required

PERF_VERSION=6.3

###SHELLPACK parseargBegin
###SHELLPACK parseargInstall
###SHELLPACK parseargParam   --duration		CYCLICTEST_DURATION
###SHELLPACK parseargParam   --background	CYCLICTEST_BACKGROUND
###SHELLPACK parseargYes     --affinity		CYCLICTEST_AFFINITY
###SHELLPACK parseargEnd
###SHELLPACK monitor_hooks

###SHELLPACK init_only_start
###SHELLPACK check_external_install_required rttestbuild rttestbuild-${VERSION}		${VERSION}
###SHELLPACK check_external_install_required klp         klp-0				0
###SHELLPACK check_external_install_required perfbuild   perfbuild-${PERF_VERSION}	${PERF_VERSION}

case $CYCLICTEST_BACKGROUND in
hackbench|kernel-build|klp)
	fragment prepare --method $CYCLICTEST_BACKGROUND || die "Failed to prepare $CYCLICTEST_BACKGROUND"
	;;
none)
	echo No background task to prepare
	;;
*)
	die "Unrecognised background task $CYCLICTEST_BACKGROUND"
esac

###SHELLPACK init_only_end

cd $SHELLPACK_SOURCES/rttestbuild-${VERSION}-installed || die "Failed to change to rttest directory"
if [ "$CYCLICTEST_AFFINITY" = "yes" ]; then
	CYCLICTEST_AFFINITY_PARAM=-a
fi

BACKGROUND_PID=
case $CYCLICTEST_BACKGROUND in
hackbench)
	fragment run --method hackbench --perf-version $PERF_VERSION || die "Failed to run background $CYCLICTEST_BACKGROUND"
	;;
kernel-build)
	fragment run --method kernel-build || die "Failed to run background $CYCLICTEST_BACKGROUND"
	;;
klp)
	fragment run --method klp || die "Failed to run background $CYCLICTEST_BACKGROUND"
	;;
none)
	echo "No background task to run"
	;;
*)
	die "Unrecognised background task $CYCLICTEST_BACKGROUND"
	;;
esac
monitor_pre_hook $LOGDIR_RESULTS $P
echo Starting cyclictest threads
if [ "$CYCLICTEST_FINEGRAINED" != "yes" ]; then
	$MMTESTS_SUDO ./cyclictest --mlockall -p99 --threads $CYCLICTEST_AFFINITY_PARAM \
		--distance=0 --duration=$CYCLICTEST_DURATION --quiet 2>&1 | \
		tee $LOGDIR_RESULTS/cyclictest.log
else
	$MMTESTS_SUDO ./cyclictest --mlockall -p99 --threads $CYCLICTEST_AFFINITY_PARAM \
		--distance=0 --duration=$CYCLICTEST_DURATION -v 2>&1 | \
		stdout-buffer > $LOGDIR_RESULTS/cyclictest.log
fi

case $CYCLICTEST_BACKGROUND in
hackbench|kernel-build|klp)
	fragment cleanup --method $CYCLICTEST_BACKGROUND
	;;
none)
	echo No background task to shutdown
	;;
*)
	die "Unrecognised background task $CYCLICTEST_BACKGROUND"
esac

monitor_post_hook $LOGDIR_RESULTS $P

if [ "$CYCLICTEST_FINEGRAINED" = "yes" ]; then
	echo Compressing $LOGDIR_RESULTS/cyclictest.log
	xz $LOGDIR_RESULTS/cyclictest.log
fi
exit $SHELLPACK_SUCCESS
