#!/bin/bash NR=1 basedir=/sys/fs/cgroup/blkio/null CG_PREFIX=/sys/fs/cgroup/blkio/null/nullb function set_cgroup() { testdir=$1 dev_id=$2 let weight=RANDOM%900+100 let iops=RANDOM%1000+100 let bps=RANDOM%10485760+10485760 echo "$weight" > $testdir/blkio.bfq.weight echo "$dev_id $iops" > $testdir/blkio.throttle.read_iops_device echo "$dev_id $iops" > $testdir/blkio.throttle.write_iops_device echo "$dev_id $bps" > $testdir/blkio.throttle.read_bps_device echo "$dev_id $bps" > $testdir/blkio.throttle.write_bps_device } function set_sys() { local queue_dir=/sys/block/$1/queue let rq_affinity=RANDOM%3 echo $rq_affinity > $queue_dir/rq_affinity let add_random=RANDOM%2 echo $add_random > $queue_dir/add_random let rotational=RANDOM%2 echo $rotational > $queue_dir/rotational let nomerges=RANDOM%2 echo $nomerges > $queue_dir/nomerges let s_num=RANDOM%5 case $s_num in 0) scheduler=none ;; 1) scheduler=bfq ;; 2) scheduler=bfq ;; 3) scheduler=none ;; esac echo bfq > $queue_dir/scheduler } create_cg() { local i local path for i in $(seq 0 $NR) do path=${CG_PREFIX}${i} mkdir -p $path done } switch_cg() { local path=${CG_PREFIX}$1 local t for t in $(cat $path/tasks) do echo $t > /sys/fs/cgroup/blkio/tasks done echo "tasks in $path" cat $path/tasks } rm_cg() { local path=${CG_PREFIX}$1 rmdir $path return $? } mkdir $basedir cgdir1=/sys/fs/cgroup/blkio/null/nullb0 cgdir2=/sys/fs/cgroup/blkio/null/nullb1 ADD_MOD="modprobe null_blk" while true do let flag=RANDOM%2 if [ $flag -eq 1 ];then $ADD_MOD queue_mode=2 blocking=1 nr_devices=2 else $ADD_MOD queue_mode=2 nr_devices=2 fi create_cg dev_id=`lsblk | grep nullb0 | awk '{print $2}'` set_cgroup $basedir $dev_id set_sys nullb0 dev_id=`lsblk | grep nullb1 | awk '{print $2}'` set_cgroup $basedir $dev_id set_sys nullb1 let flag=RANDOM%20 if [ $flag -eq 5 ];then echo 1 > /sys/block/nullb0/make-it-fail echo 1 > /sys/block/nullb1/make-it-fail else echo 0 > /sys/block/nullb0/make-it-fail echo 0 > /sys/block/nullb1/make-it-fail fi i=0 while [ $i -le 3 ] do cgexec -g "blkio:null/nullb0" fio -filename=/dev/nullb0 -ioengine=libaio -time_based=1 -rw=rw -thread -size=100g -bs=512 -numjobs=4 -iodepth=8 -runtime=5 -group_reporting -name=brd-IOwrite -rwmixread=50 &>/dev/null & cgexec -g "blkio:null/nullb0" fio -filename=/dev/nullb0 -ioengine=psync -direct=1 -time_based=1 -rw=rw -thread -size=100g -bs=512 -numjobs=4 -iodepth=8 -runtime=5 -group_reporting -name=brd-IOwrite -rwmixread=50 &>/dev/null & cgexec -g "blkio:null/nullb1" fio -filename=/dev/nullb1 -ioengine=libaio -time_based=1 -rw=rw -thread -size=100g -bs=1024k -numjobs=4 -iodepth=8 -runtime=5 -group_reporting -name=brd-IOwrite -rwmixread=50 &>/dev/null & cgexec -g "blkio:null/nullb1" fio -filename=/dev/nullb1 -ioengine=psync -direct=1 -time_based=1 -rw=rw -thread -size=100g -bs=1024k -numjobs=4 -iodepth=8 -runtime=5 -group_reporting -name=brd-IOwrite -rwmixread=50 &>/dev/null & ((i=i+1)) done sleep 3 until rm_cg 0 do switch_cg 0 sleep 0.1 done until rm_cg 1 do switch_cg 1 sleep 0.1 done while true do rmmod null_blk &>/dev/null && break sleep 0.1 done done