Re: [PATCH 3/3] blktests: block/025: an io.latency test

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/4/18 6:47 PM, Josef Bacik wrote:
> This is a test to verify io.latency is working properly.  It does this
> by first running a fio job by itself to figure out how fast it runs.
> Then we calculate some thresholds, set up 2 cgroups, a fast and a slow
> cgroup, and then run the same job in both groups simultaneously.  We
> should see the slow group get throttled until the first cgroup is able
> to finish, and then the slow cgroup will be allowed to finish.
> 
Hi,
two small typos below.

> Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
> ---
>  tests/block/025     | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/block/025.out |   1 +
>  2 files changed, 134 insertions(+)
>  create mode 100644 tests/block/025
>  create mode 100644 tests/block/025.out
> 
> diff --git a/tests/block/025 b/tests/block/025
> new file mode 100644
> index 000000000000..88ce7cca944e
> --- /dev/null
> +++ b/tests/block/025
> @@ -0,0 +1,133 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-3.0+
> +#
> +# Test io.latency to make sure it's protecting the higher priority group
> +# properly.
> +
> +. tests/block/rc
> +
> +DESCRIPTION="test the io.latency interface to make sure it's working right"
> +
> +requires() {
> +	_have_cgroup2_controller_file io io.latency && _have_fio && \
> +		_have_program python
> +}
> +
> +_fio_results_key() {
> +	_job=$1
> +	_key=$2
> +	_resultfile=$3
> +
> +	python src/fio-key-value.py -k $_key -j $_job $_resultfile
> +}
> +
> +test_device() {
> +	local fio_config_single fio_config_double fio_results fio_args qd
> +
> +	fio_config_single=${TMPDIR}/single.fio
> +	fio_config_double=${TMPDIR}/double.fio
> +	fio_results=${TMPDIR}/025.json
> +	fio_args="--output-format=json --output=${fio_results}"
> +	qd=$(cat ${TEST_DEV_SYSFS}/queue/nr_requests)
> +
> +	cat << EOF > "${fio_config_single}"
> +	[fast]
> +	filename=${TEST_DEV}
> +	direct=1
> +	allrandrepeat=1
> +	readwrite=randrw
> +	size=4G
> +	ioengine=libaio
> +	iodepth=${qd}
> +	fallocate=none
> +	randseed=12345
> +EOF
> +
> +	cat << EOF > "${fio_config_double}"
> +	[global]
> +	filename=${TEST_DEV}
> +	direct=1
> +	allrandrepeat=1
> +	readwrite=randrw
> +	size=4G
> +	ioengine=libaio
> +	iodepth=${qd}
> +	fallocate=none
> +	randseed=12345
> +
> +	[fast]
> +	cgroup=blktests/fast
> +
> +	[slow]
> +	cgroup=blktests/slow
> +EOF
> +	# We run the test once so we have an idea of how fast this workload will
> +	# go with nobody else doing IO on the device.
> +	if ! fio ${fio_args} ${fio_config_single}; then
> +		echo "fio exited with status $?"
> +		return 1
> +	fi
> +
> +	_time_taken=$(_fio_results_key fast job_runtime ${fio_results})
> +	if [ "${_time_taken}" = "" ]; then
> +		echo "fio doesn't report job_runtime"
> +		return 1
> +	fi
> +
> +	echo "normal time taken ${_time_taken}" >> $FULL
> +
> +	# There's no way to predict how the two workloads are going to affect
> +	# each other, so we weant to set thresholds to something reasonable so
> +	# we can verify io.latency is doing something.  This means we set 15%
> +	# for the fast cgroup, just to give us enough wiggle room as throttling
> +	# doesn't happen immediately.  But if we have a super fast disk we could
> +	# run both groups really fast and make it under our fast threshold, so
> +	# we need to set a threshold for the slow group at 50%.  We assume that
> +	# if it was faster than 50% of the fast threshold then we probably
> +	# didn't throttle and we can assume io.latency is broken.
> +	_fast_thresh=$((${_time_taken} + ${_time_taken} * 15 / 100))
> +	_slow_thresh=$((${_time_taken} + ${_time_taken} * 50 / 100))
> +	echo "fast threshold time is ${_fast_thresh}" >> $FULL
> +	echo "slow threshold time is ${_slow_thresh}" >> $FULL
> +
> +	# Create teh cgroup files
Typo, "the".      ^

> +	_dir=$(_cgroup2_base_dir)/blktests
> +	echo "+io" > ${_dir}/cgroup.subtree_control
> +	mkdir ${_dir}/fast
> +	mkdir ${_dir}/slow
> +
> +	# We set teh target to 1usec because we could have a fast device that is
Also here, "the". ^

> +	# capable of remarkable IO latencies that would skew the test.  It needs
> +	# to be low enough that we do actually throttle the slow group,
> +	# otherwise the test will fail when there's nothing wrong.
> +	_major=$((0x$(stat -c "%t" ${TEST_DEV})))
> +	_minor=$((0x$(stat -c "%T" ${TEST_DEV})))
> +	echo "${_major}:${_minor} is our device" >> $FULL
> +	if ! echo "${_major}:${_minor} target=1" > ${_dir}/fast/io.latency; then
> +		echo "Failed to set our latency target"
> +		return 1
> +	fi
> +
> +	if ! fio ${fio_args} ${fio_config_double}; then
> +		echo "fio exited with status $?"
> +		return 1
> +	fi
> +
> +	_fast_time=$(_fio_results_key fast job_runtime ${fio_results})
> +	echo "Fast time ${_fast_time}" >> $FULL
> +	_slow_time=$(_fio_results_key slow job_runtime ${fio_results})
> +	echo "Slow time ${_slow_time}" >> $FULL
> +	
There is a trailing whitespace in the above line.

> +	if [ ${_fast_thresh} -lt ${_fast_time} ]; then
> +		echo "Too much of a performance drop for the protected workload"
> +		return 1
> +	fi
> +
> +	if [ ${_slow_thresh} -gt ${_slow_time} ]; then
> +		echo "The slow group does not appear to have been throttled"
> +		return 1
> +	fi
> +
> +	echo "Silence is golden"
> +	return 0
> +}
> diff --git a/tests/block/025.out b/tests/block/025.out
> new file mode 100644
> index 000000000000..c19ff631b9b5
> --- /dev/null
> +++ b/tests/block/025.out
> @@ -0,0 +1 @@
> +Silence is golden
> 

Thank you,
Federico

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux