#!/bin/bash

TEST_DIR=`dirname $0`
echo "TEST_DIR: $TEST_DIR"

CG_ROOT=/sys/fs/cgroup

nr_level1=2
nr_level2=2
nr_level3=2
nr_level4=5
nr_level5=5

for i in `seq $nr_level1`; do
	CG_LEVEL1=$CG_ROOT/$i
	echo "cg_level1: $CG_LEVEL1"
	[ -d $CG_LEVEL1 ] || sudo mkdir -p $CG_LEVEL1
	sudo sh -c "echo +cpu > $CG_LEVEL1/cgroup.subtree_control"

	for j in `seq $nr_level2`; do
		CG_LEVEL2=$CG_LEVEL1/${i}_$j
		echo "cg_level2: $CG_LEVEL2"
		[ -d $CG_LEVEL2 ] || sudo mkdir -p $CG_LEVEL2
		sudo sh -c "echo +cpu > $CG_LEVEL2/cgroup.subtree_control"

		for k in `seq $nr_level3`; do
			CG_LEVEL3=$CG_LEVEL2/${i}_${j}_$k
			[ -d $CG_LEVEL3 ] || sudo mkdir -p $CG_LEVEL3
			sudo sh -c "echo +cpu > $CG_LEVEL3/cgroup.subtree_control"

			for l in `seq $nr_level4`; do
				CG_LEVEL4=$CG_LEVEL3/${i}_${j}_${k}_$l
				[ -d $CG_LEVEL4 ] || sudo mkdir -p $CG_LEVEL4
				sudo sh -c "echo +cpu > $CG_LEVEL4/cgroup.subtree_control"

				for m in `seq $nr_level5`; do
					CG_LEVEL5=$CG_LEVEL4/${i}_${j}_${k}_${l}_$m
					[ -d $CG_LEVEL5 ] || sudo mkdir -p $CG_LEVEL5
				done
			done
		done
	done
done

for i in `seq $nr_level1`; do
	CG_LEVEL1=$CG_ROOT/$i
	for j in `seq $nr_level2`; do
		CG_LEVEL2=$CG_LEVEL1/${i}_$j
		for k in `seq $nr_level3`; do
			CG_LEVEL3=$CG_LEVEL2/${i}_${j}_$k
			for l in `seq $nr_level4`; do
				CG_LEVEL4=$CG_LEVEL3/${i}_${j}_${k}_$l
				for m in `seq $nr_level5`; do
					CG_LEVEL5=$CG_LEVEL4/${i}_${j}_${k}_${l}_$m
					$TEST_DIR/run_in_cg.sh $CG_LEVEL5 &
				done
			done
		done
	done
done

function set_quota
{
	quota=$1

	for i in `seq $nr_level1`; do
		CG_LEVEL1=$CG_ROOT/$i
		sudo sh -c "echo $quota 100000 > $CG_LEVEL1/cpu.max"
		echo "$CG_LEVEL1: `cat $CG_LEVEL1/cpu.max`"
	done
}

$TEST_DIR/run_monitor.sh

echo "set 50cpu quota to first level cgroups"
set_quota 5000000

echo "`date`: start"
wait
echo "`date`: done"

cp /sys/fs/cgroup/1/cpu.stat 1_cpu.stat
cp /sys/fs/cgroup/2/cpu.stat 2_cpu.stat

$TEST_DIR/kill_monitor.sh
