#! /bin/sh

# Trouver le premier nom de fichier inutilise.
COMPTEUR=0
while true
do
	COMPTEUR=$((COMPTEUR + 1))
	FICHIER_RESULTATS=/root/resultat-fluctuations-timer-xenomai-${COMPTEUR}.txt
	if ! [ -f "${FICHIER_RESULTATS}" ]; then break; fi
done

while true
do
	# Retour dans le passe ! 
	date -s 1970.01.01-00:00

        # Lancer la mesure
        
	date +"##[%s] Debut de l'experience" > "${FICHIER_RESULTATS}"
	txt=$(uname -a)
	date +"##[%s] $txt" >> "${FICHIER_RESULTATS}"

	/usr/local/bin/fluctuations-timer-xenomai 100 0 >> "${FICHIER_RESULTATS}"  &


	mkdir -p /mnt/ramdisk
	mount none /mnt/ramdisk -t ramfs

	if [ -e /proc/sys/kernel/hung_task_timeout_secs ]
	then 
		echo 0 > /proc/sys/kernel/hung_task_timeout_secs
	fi

	while true
	do 
		txt=$(uptime)
		date +"##[%s] $txt" >> "${FICHIER_RESULTATS}"
		txt=$(/usr/local/bin/omap4_temp)
		date +"##[%s] temperature : $txt" >> "${FICHIER_RESULTATS}"
	
		date +"##[%s] Periode de repos" >> "${FICHIER_RESULTATS}"
		sleep 60
		
		date +"##[%s] Periode de charge" >> "${FICHIER_RESULTATS}"
	
		PIDS=""

		# --------------------------------------------------------		
		# Charge importante en appels systeme sur les deux CPU
		
		taskset 1 top -d 0 > /dev/null 2>&1 &
		PIDS="$PIDS $!"
		taskset 2 top -d 0 > /dev/null 2>&1 &
		PIDS="$PIDS $!"
	
		while true; do taskset 1 cat /proc/interrupts; done > /dev/null 2>&1 &
		PIDS="$PIDS $!"
		while true; do taskset 2 cat /proc/interrupts; done > /dev/null 2>&1 &
		PIDS="$PIDS $!"
		
		while true; do taskset 1 ps ; done > /dev/null 2>&1 &
		PIDS="$PIDS $!"
		while true; do taskset 2 ps ; done > /dev/null 2>&1 &
		PIDS="$PIDS $!"
		
		# -------------------------------------------------------		
		# Charge importante en I/O fichiers sur les deux CPUs	
		
		taskset 1 dd if=/dev/zero of=/dev/null &
		PIDS="$PIDS $!"
		taskset 2 dd if=/dev/zero of=/dev/null &
		PIDS="$PIDS $!"
		
		cpu=1
		while true ; do taskset $cpu dd if=/dev/zero of=/mnt/ramdisk/file bs=1024000 count=100; i=$((3-i)); done &
		PIDS="$PIDS $!"
		
		cpu=2
		while true ; do taskset $cpu ls -lR / > /dev/null 2>&1; i=$((3-i)); done &
		PIDS="$PIDS $!"

		# ------------------------------------------------------
		# Charge importante en interruptions sur les deux CPU
		
		CIBLE=192.168.3.1
		PORT=2012
		# Il faut lancer auparavant 
		# nc $CIBLE $PORT -l -k > /dev/null
		# sur la machine cible du transfert reseau
		seq 1 399999 > /tmp/netcat.data
		while true ; do nc $CIBLE $PORT < /tmp/netcat.data ; sleep 15; done  &
		PIDS="$PIDS $!"
        	
		sleep 300
	
		kill -KILL $PIDS 2>/dev/null
		killall -KILL dd ls  nc sleep 2>/dev/null

		SECONDES=$(date +%s)
		if [ $SECONDES -ge 86400 ]; then break; fi
	done

	killall fluctuations-timer-xenomai
	echo "##[$SECONDES] Fin de l'experience" >> "${FICHIER_RESULTATS}"

	COMPTEUR=$((COMPTEUR + 1))
	FICHIER_RESULTATS=/root/resultat-fluctuations-timer-xenomai-${COMPTEUR}.txt
done

