[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 7/7] iotests/271: check disk usage on subcluster-based discard/un
From: |
Andrey Drobyshev |
Subject: |
[PATCH 7/7] iotests/271: check disk usage on subcluster-based discard/unmap |
Date: |
Sat, 21 Oct 2023 00:56:22 +0300 |
Add _verify_du_delta() checker which is used to check that real disk
usage delta meets the expectations. For now we use it for checking that
subcluster-based discard/unmap operations lead to actual disk usage
decrease (i.e. PUNCH_HOLE operation is performed).
Also add separate test case for discarding particular subcluster within
one cluster.
Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
---
tests/qemu-iotests/271 | 25 ++++++++++++++++++++++++-
tests/qemu-iotests/271.out | 2 ++
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/tests/qemu-iotests/271 b/tests/qemu-iotests/271
index c7c2cadda0..5fcb209f5f 100755
--- a/tests/qemu-iotests/271
+++ b/tests/qemu-iotests/271
@@ -81,6 +81,15 @@ _verify_l2_bitmap()
fi
}
+# Check disk usage delta after a discard/unmap operation
+# _verify_du_delta $before $after $expected_delta
+_verify_du_delta()
+{
+ if [ $(($1 - $2)) -ne $3 ]; then
+ printf "ERROR: unexpected delta: $1 - $2 = $(($1 - $2)) != $3\n"
+ fi
+}
+
# This should be called as _run_test c=XXX sc=XXX off=XXX len=XXX cmd=XXX
# c: cluster number (0 if unset)
# sc: subcluster number inside cluster @c (0 if unset)
@@ -198,9 +207,12 @@ for use_backing_file in yes no; do
alloc="$(seq 0 31)"; zero=""
_run_test sc=0 len=64k
- ### Zero and unmap half of cluster #0 (this won't unmap it)
+ ### Zero and unmap half of cluster #0 (this will unmap it)
alloc="$(seq 16 31)"; zero="$(seq 0 15)"
+ before=$(disk_usage "$TEST_IMG")
_run_test sc=0 len=32k cmd=unmap
+ after=$(disk_usage "$TEST_IMG")
+ _verify_du_delta $before $after 32768
### Zero and unmap cluster #0
alloc=""; zero="$(seq 0 31)"
@@ -447,7 +459,10 @@ for use_backing_file in yes no; do
# Subcluster-aligned request from clusters #12 to #14
alloc="$(seq 0 15)"; zero="$(seq 16 31)"
+ before=$(disk_usage "$TEST_IMG")
_run_test c=12 sc=16 len=128k cmd=unmap
+ after=$(disk_usage "$TEST_IMG")
+ _verify_du_delta $before $after $((128 * 1024))
alloc=""; zero="$(seq 0 31)"
_verify_l2_bitmap 13
alloc="$(seq 16 31)"; zero="$(seq 0 15)"
@@ -528,6 +543,14 @@ for use_backing_file in yes no; do
else
_make_test_img -o extended_l2=on 1M
fi
+ # Write cluster #0 and discard its subclusters #0-#3
+ $QEMU_IO -c 'write -q 0 64k' "$TEST_IMG"
+ before=$(disk_usage "$TEST_IMG")
+ $QEMU_IO -c 'discard -q 0 8k' "$TEST_IMG"
+ after=$(disk_usage "$TEST_IMG")
+ _verify_du_delta $before $after 8192
+ alloc="$(seq 4 31)"; zero="$(seq 0 3)"
+ _verify_l2_bitmap 0
# Write clusters #0-#2 and then discard them
$QEMU_IO -c 'write -q 0 128k' "$TEST_IMG"
$QEMU_IO -c 'discard -q 0 128k' "$TEST_IMG"
diff --git a/tests/qemu-iotests/271.out b/tests/qemu-iotests/271.out
index 5be780de76..0da8d72cde 100644
--- a/tests/qemu-iotests/271.out
+++ b/tests/qemu-iotests/271.out
@@ -426,6 +426,7 @@ L2 entry #29: 0x0000000000000000 0000ffff00000000
### Discarding clusters with non-zero bitmaps (backing file: yes) ###
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=raw
+L2 entry #0: 0x8000000000050000 0000000ffffffff0
L2 entry #0: 0x0000000000000000 ffffffff00000000
L2 entry #1: 0x0000000000000000 ffffffff00000000
Image resized.
@@ -436,6 +437,7 @@ L2 entry #1: 0x0000000000000000 ffffffff00000000
### Discarding clusters with non-zero bitmaps (backing file: no) ###
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
+L2 entry #0: 0x8000000000050000 0000000ffffffff0
L2 entry #0: 0x0000000000000000 ffffffff00000000
L2 entry #1: 0x0000000000000000 ffffffff00000000
Image resized.
--
2.39.3
- [PATCH 0/7] qcow2: make subclusters discardable, Andrey Drobyshev, 2023/10/20
- [PATCH 3/7] qcow2: zeroize the entire cluster when there're no non-zero subclusters, Andrey Drobyshev, 2023/10/20
- [PATCH 5/7] qcow2: zero_l2_subclusters: fall through to discard operation when requested, Andrey Drobyshev, 2023/10/20
- [PATCH 7/7] iotests/271: check disk usage on subcluster-based discard/unmap,
Andrey Drobyshev <=
- [PATCH 2/7] qcow2: add get_sc_range_info() helper for working with subcluster ranges, Andrey Drobyshev, 2023/10/20
- [PATCH 6/7] iotests/common.rc: add disk_usage function, Andrey Drobyshev, 2023/10/20
- [PATCH 4/7] qcow2: make subclusters discardable, Andrey Drobyshev, 2023/10/20
- [PATCH 1/7] qcow2: make function update_refcount_discard() global, Andrey Drobyshev, 2023/10/20