Add test for covering prioritized meta IO when throttling, regression test for commit 29390bb5661d ("blk-throttle: support prioritized processing of metadata"). Cc: Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> --- tests/throtl/006 | 58 ++++++++++++++++++++++++++++++++++++++++++++ tests/throtl/006.out | 4 +++ tests/throtl/rc | 19 +++++++++++++++ 3 files changed, 81 insertions(+) create mode 100755 tests/throtl/006 create mode 100644 tests/throtl/006.out diff --git a/tests/throtl/006 b/tests/throtl/006 new file mode 100755 index 0000000..4baadaf --- /dev/null +++ b/tests/throtl/006 @@ -0,0 +1,58 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2025 Ming Lei +# +# Test prioritized meta IO when IO throttling, regression test for +# commit 29390bb5661d ("blk-throttle: support prioritized processing of metadata") + +. tests/throtl/rc + +DESCRIPTION="test if meta IO has higher priority than data IO" +QUICK=1 + +requires() { + _have_program mkfs.ext4 +} + +test_meta_io() { + local path="$1" + local start_time + local end_time + local elapsed + + start_time=$(date +%s.%N) + mkdir "${path}"/xxx + touch "${path}"/xxx/1 + sync "${path}"/xxx + + end_time=$(date +%s.%N) + elapsed=$(echo "$end_time - $start_time" | bc) + printf "%.0f\n" "$elapsed" +} + +test() { + echo "Running ${TEST_NAME}" + + if ! _set_up_throtl memory_backed=1; then + return 1; + fi + + mkdir -p "${TMPDIR}/mnt" + mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -F "/dev/${THROTL_DEV}" >> "$FULL" 2>&1 + mount "/dev/${THROTL_DEV}" "${TMPDIR}/mnt" >> "$FULL" 2>&1 + + _throtl_set_limits wbps=$((1024 * 1024)) + { + echo "$BASHPID" > "$CGROUP2_DIR/$THROTL_DIR/cgroup.procs" + _throtl_issue_fs_io "${TMPDIR}/mnt/test.img" write 64K 64 & + sleep 2 + test_meta_io "${TMPDIR}/mnt" + wait + } & + wait $! + + umount "${TMPDIR}/mnt" || return $? + _throtl_remove_limits + _clean_up_throtl + echo "Test complete" +} diff --git a/tests/throtl/006.out b/tests/throtl/006.out new file mode 100644 index 0000000..8c3d176 --- /dev/null +++ b/tests/throtl/006.out @@ -0,0 +1,4 @@ +Running throtl/006 +0 +4 +Test complete diff --git a/tests/throtl/rc b/tests/throtl/rc index df54cb9..327084b 100644 --- a/tests/throtl/rc +++ b/tests/throtl/rc @@ -75,6 +75,25 @@ _throtl_get_max_io_size() { cat "/sys/block/$THROTL_DEV/queue/max_sectors_kb" } +_throtl_issue_fs_io() { + local path=$1 + local start_time + local end_time + local elapsed + + start_time=$(date +%s.%N) + + if [ "$2" == "read" ]; then + dd if="${path}" of=/dev/null bs="$3" count="$4" iflag=direct status=none + elif [ "$2" == "write" ]; then + dd of="${path}" if=/dev/zero bs="$3" count="$4" oflag=direct conv=fdatasync status=none + fi + + end_time=$(date +%s.%N) + elapsed=$(echo "$end_time - $start_time" | bc) + printf "%.0f\n" "$elapsed" +} + _throtl_issue_io() { local start_time local end_time -- 2.47.1