#! /bin/bash # PAGE_SIZE=4096 RESULTS_DIR=ioprio_inv_test_results TEST_FILE=/root/dummy TEST_FILE_SIZE=$[256*1024] # in pages DROP_CACHES=1 PREP_TEST_FILE=1 CGROUP_MNT=/mnt/cgroup NR_CGROUPS=2 CGROUP[0]=test1 CGROUP_NR_BUSYLOOPS[0]=2 CGROUP_CFS_PERIOD[0]=100000 CGROUP_CFS_QUOTA[0]=10000 CGROUP_CPUMASK[0]=1 CGROUP_MEMMASK[0]=0 CGROUP[1]=test2 CGROUP_NR_BUSYLOOPS[1]=0 CGROUP_CFS_PERIOD[1]=100000 CGROUP_CFS_QUOTA[1]=-1 CGROUP_CPUMASK[1]=2 CGROUP_MEMMASK[1]=0 function do_test() { local cgrp=$1 sleep 3 local pidlist= local i= for i in `seq 1 ${CGROUP_NR_BUSYLOOPS[$cgrp]}`; do while :; do :; done & pidlist="$pidlist $!" done dd if=$TEST_FILE of=/dev/null bs=$PAGE_SIZE count=$TEST_FILE_SIZE &> $RESULTS_DIR/$cgrp.log local pid for pid in $pidlist; do kill $pid done } rm -rf $RESULTS_DIR mkdir -p $RESULTS_DIR if [ $PREP_TEST_FILE -ne 0 ]; then echo "Creating test file ($TEST_FILE_SIZE pages)..." rm -f $TEST_FILE_SIZE dd if=/dev/zero of=$TEST_FILE bs=$PAGE_SIZE count=$TEST_FILE_SIZE &>/dev/null echo "Syncing..." sync; sync fi if [ $DROP_CACHES -ne 0 ]; then echo "Dropping caches..." echo 3 > /proc/sys/vm/drop_caches fi echo "Mounting cgroup..." mkdir -p $CGROUP_MNT mount -t cgroup -o cpu,cpuset none $CGROUP_MNT pidlist= echo "Preparing test..." for i in `seq 0 $[NR_CGROUPS-1]`; do cgrp=$CGROUP_MNT/${CGROUP[$i]} mkdir -p $cgrp echo ${CGROUP_CFS_PERIOD[$i]} > $cgrp/cpu.cfs_period_us echo ${CGROUP_CFS_QUOTA[$i]} > $cgrp/cpu.cfs_quota_us echo ${CGROUP_CPUMASK[$i]} > $cgrp/cpuset.cpus echo ${CGROUP_MEMMASK[$i]} > $cgrp/cpuset.mems echo $$ > $cgrp/tasks do_test $i & pidlist="$pidlist $!" done echo $$ > $CGROUP_MNT/tasks echo "Testing..." for pid in $pidlist; do wait $pid done echo echo "Results:" echo tail -n1 $RESULTS_DIR/* echo