[LTP] [PATCH 1/2] adjust io-throttle testcases

Cyril Hrubis chrubis@suse.cz
Tue Dec 12 13:12:02 CET 2017


Hi!
(just resending so that Sebastian who recently subscribed to the list
 can comment)
> The current io-throttle testcases only can running on the very
> old kernel which has the old block io cgroup interface. and the
> cgroup name has renamed to blkio from blockio.
> 
> This patch update them.
> 
> Signed-off-by: Wang Long <wanglong19@meituan.com>
> ---
>  .../io-throttle/io_throttle_testplan.txt           | 11 ++----
>  .../controllers/io-throttle/myfunctions-io.sh      | 43 +++++++++++++---------
>  .../io-throttle/run_io_throttle_test.sh            | 41 ++++++++-------------
>  3 files changed, 45 insertions(+), 50 deletions(-)
> 
> diff --git a/testcases/kernel/controllers/io-throttle/io_throttle_testplan.txt b/testcases/kernel/controllers/io-throttle/io_throttle_testplan.txt
> index fa5b85b..b726e40 100644
> --- a/testcases/kernel/controllers/io-throttle/io_throttle_testplan.txt
> +++ b/testcases/kernel/controllers/io-throttle/io_throttle_testplan.txt
> @@ -21,15 +21,12 @@ limitations:
>  Each test is considered passed only if the I/O limitations above are respected.
>  
>  Currently the following different scenarios are tested:
> -- 1 single stream per cgroup using leaky-bucket I/O throttling
> -- 1 single stream per cgroup using token-bucket I/O throttling
> -- 2 parallel streams per cgroup using leaky-bucket I/O throttling
> -- 2 parallel streams per cgroup using token-bucket I/O throttling
> -- 4 parallel streams per cgroup using leaky-bucket I/O throttling
> -- 4 parallel streams per cgroup using token-bucket I/O throttling
> +- 1 single stream per cgroup I/O throttling
> +- 2 parallel streams per cgroup I/O throttling
> +- 4 parallel streams per cgroup I/O throttling
>  
>  For any other information please refer to
> -Documentation/controllers/io-throttle.txt in kernel documentation.
> +Documentation/cgroup-v1/blkio-controller.txt in kernel documentation.
>  
>  Questions?
>  ----------
> diff --git a/testcases/kernel/controllers/io-throttle/myfunctions-io.sh b/testcases/kernel/controllers/io-throttle/myfunctions-io.sh
> index bf4bb2b..b604520 100755
> --- a/testcases/kernel/controllers/io-throttle/myfunctions-io.sh
> +++ b/testcases/kernel/controllers/io-throttle/myfunctions-io.sh
> @@ -19,27 +19,34 @@
>  #
>  # usage . myfunctions.sh
>  
> +mounted=1
> +
>  setup()
>  {
>  	# create testcase cgroups
> -	if [ -e /dev/blockioctl ]; then
> -		echo "WARN: /dev/blockioctl already exist! overwriting."
> -		cleanup
> -	fi
> -	mkdir /dev/blockioctl
> -	mount -t cgroup -o blockio cgroup /dev/blockioctl
> -	if [ $? -ne 0 ]; then
> -		echo "ERROR: could not mount cgroup filesystem " \
> -			" on /dev/blockioctl. Exiting test."
> -		cleanup
> -		exit 1
> +	mount_point=`grep -w blkio /proc/mounts | cut -f 2 | cut -d " " -f2`
> +	if [ "$mount_point" = "" ]; then
> +		mounted=0
> +		mount_point=/dev/cgroup
>  	fi
> +
> +	if [ "$mounted" -eq "0" ]; then
> +		mkdir -p $mount_point
> +		mount -t cgroup -o blkio none $mount_point
> +		if [ $? -ne 0 ]; then
> +			echo "ERROR: could not mount cgroup filesystem " \
> +			" on $mount_point. Exiting test."
> +			cleanup
> +			exit 1
> +		fi
> +        fi
> +
>  	for i in `seq 1 3`; do
> -		if [ -e /dev/blockioctl/cgroup-$i ]; then
> -			rmdir /dev/blockioctl/cgroup-$i
> +		if [ -e $mount_point/cgroup-$i ]; then
> +			rmdir $mount_point/cgroup-$i
>  			echo "WARN: earlier cgroup-$i found and removed"
>  		fi
> -		mkdir /dev/blockioctl/cgroup-$i
> +		mkdir $mount_point/cgroup-$i
>  		if [ $? -ne 0 ]; then
>  			echo "ERROR: could not create cgroup-$i" \
>  				"Check your permissions. Exiting test."
> @@ -53,9 +60,11 @@ cleanup()
>  {
>  	echo "Cleanup called"
>  	for i in `seq 1 3`; do
> -		rmdir /dev/blockioctl/cgroup-$i
> +		rmdir $mount_point/cgroup-$i
>  		rm -f /tmp/cgroup-$i.out
>  	done
> -	umount /dev/blockioctl
> -	rmdir /dev/blockioctl
> +	if [ "$mounted" -eq "0" ]; then
> +		umount $mount_point
> +		rmdir $mount_point
> +	fi
>  }
> diff --git a/testcases/kernel/controllers/io-throttle/run_io_throttle_test.sh b/testcases/kernel/controllers/io-throttle/run_io_throttle_test.sh
> index c855fd0..7e591be 100755
> --- a/testcases/kernel/controllers/io-throttle/run_io_throttle_test.sh
> +++ b/testcases/kernel/controllers/io-throttle/run_io_throttle_test.sh
> @@ -25,12 +25,15 @@
>  trap cleanup SIGINT
>  
>  BUFSIZE=16m
> -DATASIZE=64m
> +DATASIZE=320m
>  
>  setup
>  
> -# get the device name of the entire mounted block device
> +# get the major and minor device type of the entire mounted block device
>  dev=`df -P . | sed '1d' | cut -d' ' -f1 | sed 's/[p]*[0-9]*$//'`
> +dev_major=`stat -L -c %t $dev`
> +dev_minor=`stat -L -c %T $dev`
> +devtype=`printf "%d:%d" 0x$dev_major 0x$dev_minor`
>  
>  # evaluate device bandwidth
>  export MYGROUP=
> @@ -49,22 +52,13 @@ for i in `seq 1 3`; do
>  done
>  
>  for tasks in 1 2 4; do
> -for strategy in 0 1; do
> -	# set bw limiting rules
> -	if [ -f /dev/blockioctl/blockio.bandwidth ]; then
> -		io_throttle_file=blockio.bandwidth
> -	elif [ -f /dev/blockioctl/blockio.bandwidth-max ]; then
> -		io_throttle_file=blockio.bandwidth-max
> -	else
> -		echo "ERROR: unknown kernel ABI. Exiting test."
> -		cleanup
> -		exit 1
> -	fi
>  	for i in `seq 1 3`; do
>  		limit=$(($phys_bw * 1024 / `echo 2^$i | bc`))
>  		IOBW[$i]=$(($limit / 1024))
> -		/bin/echo $dev:$limit:$strategy:$limit > \
> -			/dev/blockioctl/cgroup-$i/${io_throttle_file}
> +		/bin/echo "$devtype $limit" > \
> +			$mount_point/cgroup-$i/blkio.throttle.read_bps_device
> +		/bin/echo "$devtype $limit" > \
> +			$mount_point/cgroup-$i/blkio.throttle.write_bps_device
>  		if [ $? -ne 0 ]; then
>  			echo "ERROR: could not set i/o bandwidth limit for cgroup-$i. Exiting test."
>  			cleanup
> @@ -79,14 +73,10 @@ for strategy in 0 1; do
>  		stream="streams"
>  	fi
>  	echo -n ">> testing $tasks parallel $stream per cgroup "
> -	if [ $strategy -eq 0 ]; then
> -		echo "(leaky-bucket i/o throttling)"
> -	else
> -		echo "(token-bucket i/o throttling)"
> -	fi
> +	echo ""
>  	for i in `seq 1 3`; do
>  		MYGROUP=cgroup-$i
> -		/bin/echo $$ > /dev/blockioctl/$MYGROUP/tasks
> +		/bin/echo $$ > $mount_point/$MYGROUP/tasks
>  		if [ $? -ne 0 ]; then
>  			echo "ERROR: could not set i/o bandwidth limit for cgroup-$i. Exiting test."
>  			cleanup
> @@ -96,7 +86,7 @@ for strategy in 0 1; do
>  		./iobw -direct $tasks $BUFSIZE $DATASIZE > /tmp/$MYGROUP.out &
>  		PID[$i]=$!
>  	done
> -	/bin/echo $$ > /dev/blockioctl/tasks
> +	/bin/echo $$ > $mount_point/tasks
>  
>  	# wait for children completion
>  	for i in `seq 1 3`; do
> @@ -104,7 +94,7 @@ for strategy in 0 1; do
>  		wait ${PID[$i]}
>  		ret=$?
>  		if [ $ret -ne 0 ]; then
> -			echo "ERROR: error code $ret during test $tasks.$strategy.$i. Exiting test."
> +			echo "ERROR: error code $ret during test $tasks.$i. Exiting test."
>  			cleanup
>  			exit 1
>  		fi
> @@ -112,12 +102,11 @@ for strategy in 0 1; do
>  		diff=$((${IOBW[$i]} - $iorate))
>  		echo "($MYGROUP) i/o-bw ${IOBW[$i]} KiB/s, i/o-rate $iorate KiB/s, err $diff KiB/s"
>  		if [ ${IOBW[$i]} -ge $iorate ]; then
> -			echo "TPASS   Block device I/O bandwidth controller: test $tasks.$strategy.$i PASSED";
> +			echo "TPASS   Block device I/O bandwidth controller: test $tasks.$i PASSED";
>  		else
> -			echo "TFAIL   Block device I/O bandwidth controller: test $tasks.$strategy.$i FAILED";
> +			echo "TFAIL   Block device I/O bandwidth controller: test $tasks.$i FAILED";
>  		fi
>  	done
>  done
> -done
>  
>  cleanup
> -- 
> 1.8.3.1
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz


More information about the ltp mailing list