Skip to content

Commit

Permalink
scsi/008: Test SCSI disk data lifetime support
Browse files Browse the repository at this point in the history
SCSI disk data lifetime support is available since kernel v6.9-rc1.
See also https://lore.kernel.org/linux-scsi/3b789eacddd6265921be9da6e15257908f29b186.camel@HansenPartnership.com/.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
  • Loading branch information
bvanassche committed Mar 26, 2024
1 parent 30b3ae2 commit de79585
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 0 deletions.
14 changes: 14 additions & 0 deletions common/scsi_debug
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,20 @@ _scsi_debug_key_path() {
echo "$path"
}

_have_scsi_debug_group_number_stats() {
local ret=0

modprobe -qr scsi_debug >&/dev/null
if ! modprobe -q scsi_debug delay=0 >&/dev/null ||
! [[ -e ${SD_PSEUDO_PATH}/group_number_stats ]]
then
SKIP_REASONS+=("scsi_debug does not support group number statistics")
ret=1
fi
modprobe -qr scsi_debug >&/dev/null
return ${ret}
}

declare -a SCSI_DEBUG_HOSTS
declare -a SCSI_DEBUG_TARGETS
declare -a SCSI_DEBUG_DEVICES
Expand Down
85 changes: 85 additions & 0 deletions tests/scsi/008
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2024 Google LLC

. tests/scsi/rc
. common/scsi_debug

DESCRIPTION="test block data lifetime support"
QUICK=1

requires() {
_have_fio
_have_scsi_debug_group_number_stats
# For patch "Fall back to F_SET_RW_HINT if F_SET_FILE_RW_HINT is not
# supported"
# (https://github.com/axboe/fio/commit/0cfea592fedf0011e695a604a6961e9cbc1fe9b6).
_have_fio_ver 3 33
}

submit_io() {
local stats_attr=/sys/bus/pseudo/drivers/scsi_debug/group_number_stats
echo "$1 ($3)"
echo "$*" >>"${FULL}"
local direct_io=$2
echo 0 > "${stats_attr}" &&
local fio_args wh &&
for wh in none short medium long extreme; do
if [ "${direct_io}" = 0 ]; then
sync
echo 1 > /proc/sys/vm/drop_caches
fi
fio_args=(
--bs=4K
--buffer_pattern='"'"$wh"'"'
--direct="${direct_io}"
--disable_clat=1
--disable_slat=1
--end_fsync=$((1 - direct_io))
--filename="${dev}"
--group_reporting=1
--gtod_reduce=1
--ioengine="$3"
--ioscheduler=none
--name=whint_"$wh"
--norandommap
--rw=randwrite
--size=4M
--thread=1
--write_hint="$wh"
)
echo "fio ${fio_args[*]}" >>"${FULL}" 2>&1
fio "${fio_args[@]}" >>"${FULL}" 2>&1 || return $?
done &&
grep -v ' 0$' "${stats_attr}" >> "${FULL}"
while read -r group count; do
if [ "$count" -gt 0 ]; then echo "$group"; fi
done < "${stats_attr}"
}

test() {
echo "Running ${TEST_NAME}"

local scsi_debug_params=(
delay=0
dev_size_mb=1024
sector_size=4096
)
_configure_scsi_debug "${scsi_debug_params[@]}" &&
local dev="/dev/${SCSI_DEBUG_DEVICES[0]}" fail &&
ls -ldi "${dev}" >>"${FULL}" &&
submit_io "Direct I/O" 1 pvsync &&
submit_io "Direct I/O" 1 libaio &&
submit_io "Direct I/O" 1 io_uring &&
submit_io "Buffered I/O" 0 pvsync ||
fail=true

_exit_scsi_debug

if [ -z "$fail" ]; then
echo "Test complete"
else
echo "Test failed"
return 1
fi
}
26 changes: 26 additions & 0 deletions tests/scsi/008.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
Running scsi/008
Direct I/O (pvsync)
1
2
3
4
5
Direct I/O (libaio)
1
2
3
4
5
Direct I/O (io_uring)
1
2
3
4
5
Buffered I/O (pvsync)
1
2
3
4
5
Test complete

0 comments on commit de79585

Please sign in to comment.