From 4b906c1db5e578f4be84ba6d00b88382fd77c5b7 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Tue, 3 Oct 2023 14:46:37 -0700 Subject: [PATCH] scsi/097: Test SCSI disk write hint support --- tests/scsi/097 | 82 ++++++++++++++++++++++++++++++++++++++++++++++ tests/scsi/097.out | 26 +++++++++++++++ 2 files changed, 108 insertions(+) create mode 100755 tests/scsi/097 create mode 100644 tests/scsi/097.out diff --git a/tests/scsi/097 b/tests/scsi/097 new file mode 100755 index 00000000..fab672d5 --- /dev/null +++ b/tests/scsi/097 @@ -0,0 +1,82 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2022 Google LLC + +. tests/zbd/rc +. common/null_blk +. common/scsi_debug + +DESCRIPTION="test block write hint support" +QUICK=1 + +requires() { + _have_fio + _have_scsi_debug_group_number_stats +} + +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 + ) + _init_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 +} diff --git a/tests/scsi/097.out b/tests/scsi/097.out new file mode 100644 index 00000000..353b38a4 --- /dev/null +++ b/tests/scsi/097.out @@ -0,0 +1,26 @@ +Running scsi/097 +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