mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 19:43:43 -04:00
Some ublk selftests have strange behavior when fio is not installed. While most tests behave correctly (run if they don't need fio, or skip if they need fio), the following tests have different behavior: - test_null_01, test_null_02, test_generic_01, test_generic_02, and test_generic_12 try to run fio without checking if it exists first, and fail on any failure of the fio command (including "fio command not found"). So these tests fail when they should skip. - test_stress_05 runs fio without checking if it exists first, but doesn't fail on fio command failure. This test passes, but that pass is misleading as the test doesn't do anything useful without fio installed. So this test passes when it should skip. Fix these issues by adding _have_program fio checks to the top of all of these tests. Signed-off-by: Uday Shankar <ushankar@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
60 lines
1.5 KiB
Bash
Executable File
60 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
|
|
|
|
TID="generic_12"
|
|
ERR_CODE=0
|
|
|
|
if ! _have_program bpftrace; then
|
|
exit "$UBLK_SKIP_CODE"
|
|
fi
|
|
|
|
if ! _have_program fio; then
|
|
exit "$UBLK_SKIP_CODE"
|
|
fi
|
|
|
|
_prep_test "null" "do imbalanced load, it should be balanced over I/O threads"
|
|
|
|
NTHREADS=6
|
|
dev_id=$(_add_ublk_dev -t null -q 4 -d 16 --nthreads $NTHREADS --per_io_tasks)
|
|
_check_add_dev $TID $?
|
|
|
|
dev_t=$(_get_disk_dev_t "$dev_id")
|
|
bpftrace trace/count_ios_per_tid.bt "$dev_t" > "$UBLK_TMP" 2>&1 &
|
|
btrace_pid=$!
|
|
sleep 2
|
|
|
|
if ! kill -0 "$btrace_pid" > /dev/null 2>&1; then
|
|
_cleanup_test "null"
|
|
exit "$UBLK_SKIP_CODE"
|
|
fi
|
|
|
|
# do imbalanced I/O on the ublk device
|
|
# pin to cpu 0 to prevent migration/only target one queue
|
|
fio --name=write_seq \
|
|
--filename=/dev/ublkb"${dev_id}" \
|
|
--ioengine=libaio --iodepth=16 \
|
|
--rw=write \
|
|
--size=512M \
|
|
--direct=1 \
|
|
--bs=4k \
|
|
--cpus_allowed=0 > /dev/null 2>&1
|
|
ERR_CODE=$?
|
|
kill "$btrace_pid"
|
|
wait
|
|
|
|
# check that every task handles some I/O, even though all I/O was issued
|
|
# from a single CPU. when ublk gets support for round-robin tag
|
|
# allocation, this check can be strengthened to assert that every thread
|
|
# handles the same number of I/Os
|
|
NR_THREADS_THAT_HANDLED_IO=$(grep -c '@' ${UBLK_TMP})
|
|
if [[ $NR_THREADS_THAT_HANDLED_IO -ne $NTHREADS ]]; then
|
|
echo "only $NR_THREADS_THAT_HANDLED_IO handled I/O! expected $NTHREADS"
|
|
cat "$UBLK_TMP"
|
|
ERR_CODE=255
|
|
fi
|
|
|
|
_cleanup_test "null"
|
|
_show_result $TID $ERR_CODE
|