diff mbox series

[blktests,1/2] throtl/002: calculate block-size based on device max-sectors setting

Message ID 20241217131440.1980151-2-nilay@linux.ibm.com (mailing list archive)
State New
Headers show
Series throtl: fix IO block-size and race while submitting IO | expand

Commit Message

Nilay Shroff Dec. 17, 2024, 1:14 p.m. UTC
The commit 60fa2e3ff3ab ("update max_sectors setting") added max-sectors
while setting up throttle device. So now we should also calculate block-
size which matches the wiops. Typically, size of each IO which is submitted
to the block device depends on the max-sectors setting of the block device.
For example setting max-sectors to 128 results into 64kb of max. IO size
which should be used for sending read/write command to the device. So take
into account the max-sectors-kb and wiops settings and calculate the
appropriate block-size which is then used to issue IO to the block device.
This change would result in always submitting 256 I/O read/write commands
to block device.

Without this change on a system with 64k PAGE SIZE, using block-size of 1M
would result in 16 I/O being submitted to the device and this operation may
finish in a fraction of a section and result in test failure. However the
intent of this test case is that we want to test submitting 256 I/O after
setting wiops limit to 256.

Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
---
 tests/throtl/002 | 14 ++++++++++----
 tests/throtl/rc  |  4 ++++
 2 files changed, 14 insertions(+), 4 deletions(-)

Comments

Yu Kuai Dec. 18, 2024, 2:14 a.m. UTC | #1
在 2024/12/17 21:14, Nilay Shroff 写道:
> The commit 60fa2e3ff3ab ("update max_sectors setting") added max-sectors
> while setting up throttle device. So now we should also calculate block-
> size which matches the wiops. Typically, size of each IO which is submitted
> to the block device depends on the max-sectors setting of the block device.
> For example setting max-sectors to 128 results into 64kb of max. IO size
> which should be used for sending read/write command to the device. So take
> into account the max-sectors-kb and wiops settings and calculate the
> appropriate block-size which is then used to issue IO to the block device.
> This change would result in always submitting 256 I/O read/write commands
> to block device.
> 
> Without this change on a system with 64k PAGE SIZE, using block-size of 1M
> would result in 16 I/O being submitted to the device and this operation may
> finish in a fraction of a section and result in test failure. However the
> intent of this test case is that we want to test submitting 256 I/O after
> setting wiops limit to 256.
> 
> Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
> ---
>   tests/throtl/002 | 14 ++++++++++----
>   tests/throtl/rc  |  4 ++++
>   2 files changed, 14 insertions(+), 4 deletions(-)
> 
LGTM
Reviewed-by: Yu Kuai <yukuai3@huawei.com>

> diff --git a/tests/throtl/002 b/tests/throtl/002
> index 185e66b..02b0969 100755
> --- a/tests/throtl/002
> +++ b/tests/throtl/002
> @@ -14,6 +14,9 @@ test() {
>   	echo "Running ${TEST_NAME}"
>   
>   	local page_size max_secs
> +	local io_size_kb block_size
> +	local iops=256
> +
>   	page_size=$(getconf PAGE_SIZE)
>   	max_secs=$((page_size / 512))
>   
> @@ -21,12 +24,15 @@ test() {
>   		return 1;
>   	fi
>   
> -	_throtl_set_limits wiops=256
> -	_throtl_test_io write 1M 1
> +	io_size_kb=$(($(_throtl_get_max_io_size) * 1024))
> +	block_size=$((iops * io_size_kb))
> +
> +	_throtl_set_limits wiops="${iops}"
> +	_throtl_test_io write "${block_size}" 1
>   	_throtl_remove_limits
>   
> -	_throtl_set_limits riops=256
> -	_throtl_test_io read 1M 1
> +	_throtl_set_limits riops="${iops}"
> +	_throtl_test_io read "${block_size}" 1
>   	_throtl_remove_limits
>   
>   	_clean_up_throtl
> diff --git a/tests/throtl/rc b/tests/throtl/rc
> index 9c264bd..330e6b9 100644
> --- a/tests/throtl/rc
> +++ b/tests/throtl/rc
> @@ -71,6 +71,10 @@ _throtl_remove_limits() {
>   		"$CGROUP2_DIR/$THROTL_DIR/io.max"
>   }
>   
> +_throtl_get_max_io_size() {
> +	cat "/sys/block/$THROTL_DEV/queue/max_sectors_kb"
> +}
> +
>   _throtl_issue_io() {
>   	local start_time
>   	local end_time
>
diff mbox series

Patch

diff --git a/tests/throtl/002 b/tests/throtl/002
index 185e66b..02b0969 100755
--- a/tests/throtl/002
+++ b/tests/throtl/002
@@ -14,6 +14,9 @@  test() {
 	echo "Running ${TEST_NAME}"
 
 	local page_size max_secs
+	local io_size_kb block_size
+	local iops=256
+
 	page_size=$(getconf PAGE_SIZE)
 	max_secs=$((page_size / 512))
 
@@ -21,12 +24,15 @@  test() {
 		return 1;
 	fi
 
-	_throtl_set_limits wiops=256
-	_throtl_test_io write 1M 1
+	io_size_kb=$(($(_throtl_get_max_io_size) * 1024))
+	block_size=$((iops * io_size_kb))
+
+	_throtl_set_limits wiops="${iops}"
+	_throtl_test_io write "${block_size}" 1
 	_throtl_remove_limits
 
-	_throtl_set_limits riops=256
-	_throtl_test_io read 1M 1
+	_throtl_set_limits riops="${iops}"
+	_throtl_test_io read "${block_size}" 1
 	_throtl_remove_limits
 
 	_clean_up_throtl
diff --git a/tests/throtl/rc b/tests/throtl/rc
index 9c264bd..330e6b9 100644
--- a/tests/throtl/rc
+++ b/tests/throtl/rc
@@ -71,6 +71,10 @@  _throtl_remove_limits() {
 		"$CGROUP2_DIR/$THROTL_DIR/io.max"
 }
 
+_throtl_get_max_io_size() {
+	cat "/sys/block/$THROTL_DEV/queue/max_sectors_kb"
+}
+
 _throtl_issue_io() {
 	local start_time
 	local end_time