Message ID | 1518441241-32557-2-git-send-email-anton.nefedov@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon 12 Feb 2018 02:14:00 PM CET, Anton Nefedov wrote: > +# Trigger truncate that would shrink qcow2 L1 table, which is done by > +# clearing one entry (8 bytes) with bdrv_co_pwrite_zeroes() > + > +echo > +echo "=== Test misaligned write zeroes via truncate ===" > +echo > + > +CLUSTER_SIZE=$((64 * 1024)) > +L2_COVERAGE=$(($CLUSTER_SIZE * $CLUSTER_SIZE / 8)) > +_make_test_img $(($L2_COVERAGE * 2)) If my numbers are correct, that's a 1GB image. For qcow2 this is not a problem but I wonder if it's ok to create such large images for other formats (for raw they should be sparse by default, but still). Berto
On 12/2/2018 6:54 PM, Alberto Garcia wrote: > On Mon 12 Feb 2018 02:14:00 PM CET, Anton Nefedov wrote: >> +# Trigger truncate that would shrink qcow2 L1 table, which is done by >> +# clearing one entry (8 bytes) with bdrv_co_pwrite_zeroes() >> + >> +echo >> +echo "=== Test misaligned write zeroes via truncate ===" >> +echo >> + >> +CLUSTER_SIZE=$((64 * 1024)) >> +L2_COVERAGE=$(($CLUSTER_SIZE * $CLUSTER_SIZE / 8)) >> +_make_test_img $(($L2_COVERAGE * 2)) > > If my numbers are correct, that's a 1GB image. For qcow2 this is not a > problem but I wonder if it's ok to create such large images for other > formats (for raw they should be sparse by default, but still). > > Berto > Good point. Actually even 512 byte clusters will work here, resulting in a just 64k image.
On 2018-02-12 14:14, Anton Nefedov wrote: > This new test case only makes sense for qcow2 while iotest 033 is generic; > however it matches the test purpose perfectly and also 033 contains those > do_test() tricks to pass the alignment, which won't look nice being > duplicated in other tests or moved to the common code. > > Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> > --- > tests/qemu-iotests/033 | 28 ++++++++++++++++++++++++++++ > tests/qemu-iotests/033.out | 13 +++++++++++++ > 2 files changed, 41 insertions(+) > > diff --git a/tests/qemu-iotests/033 b/tests/qemu-iotests/033 > index 2cdfd13..5fa3983 100755 > --- a/tests/qemu-iotests/033 > +++ b/tests/qemu-iotests/033 > @@ -64,6 +64,9 @@ do_test() > } | $QEMU_IO $IO_EXTRA_ARGS > } > > +echo > +echo "=== Test aligned and misaligned write zeroes operations ===" > + > for write_zero_cmd in "write -z" "aio_write -z"; do > for align in 512 4k; do > echo > @@ -102,7 +105,32 @@ for align in 512 4k; do > done > done > > + > +# Trigger truncate that would shrink qcow2 L1 table, which is done by > +# clearing one entry (8 bytes) with bdrv_co_pwrite_zeroes() > + > +echo > +echo "=== Test misaligned write zeroes via truncate ===" > +echo > + > +CLUSTER_SIZE=$((64 * 1024)) > +L2_COVERAGE=$(($CLUSTER_SIZE * $CLUSTER_SIZE / 8)) > +_make_test_img $(($L2_COVERAGE * 2)) There should be a _cleanup_test_img before this or this test will fail with nbd. Max
On 02/23/2018 07:34 AM, Max Reitz wrote: > On 2018-02-12 14:14, Anton Nefedov wrote: >> This new test case only makes sense for qcow2 while iotest 033 is generic; >> however it matches the test purpose perfectly and also 033 contains those >> do_test() tricks to pass the alignment, which won't look nice being >> duplicated in other tests or moved to the common code. >> >> Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> >> --- > > There should be a _cleanup_test_img before this or this test will fail > with nbd. Thanks for spotting that; patch posted: https://lists.gnu.org/archive/html/qemu-devel/2018-03/msg03688.html
diff --git a/tests/qemu-iotests/033 b/tests/qemu-iotests/033 index 2cdfd13..5fa3983 100755 --- a/tests/qemu-iotests/033 +++ b/tests/qemu-iotests/033 @@ -64,6 +64,9 @@ do_test() } | $QEMU_IO $IO_EXTRA_ARGS } +echo +echo "=== Test aligned and misaligned write zeroes operations ===" + for write_zero_cmd in "write -z" "aio_write -z"; do for align in 512 4k; do echo @@ -102,7 +105,32 @@ for align in 512 4k; do done done + +# Trigger truncate that would shrink qcow2 L1 table, which is done by +# clearing one entry (8 bytes) with bdrv_co_pwrite_zeroes() + +echo +echo "=== Test misaligned write zeroes via truncate ===" +echo + +CLUSTER_SIZE=$((64 * 1024)) +L2_COVERAGE=$(($CLUSTER_SIZE * $CLUSTER_SIZE / 8)) +_make_test_img $(($L2_COVERAGE * 2)) + +do_test 512 "write -P 1 0 0x200" "$TEST_IMG" | _filter_qemu_io +# next L2 table +do_test 512 "write -P 1 $L2_COVERAGE 0x200" "$TEST_IMG" | _filter_qemu_io + +# only interested in qcow2 here; also other formats might respond with +# "not supported" error message +if [ $IMGFMT = "qcow2" ]; then + do_test 512 "truncate $L2_COVERAGE" "$TEST_IMG" | _filter_qemu_io +fi + +do_test 512 "read -P 1 0 0x200" "$TEST_IMG" | _filter_qemu_io + # success, all done +echo echo "*** done" rm -f $seq.full status=0 diff --git a/tests/qemu-iotests/033.out b/tests/qemu-iotests/033.out index 95929ef..57799cb 100644 --- a/tests/qemu-iotests/033.out +++ b/tests/qemu-iotests/033.out @@ -1,6 +1,8 @@ QA output created by 033 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 +=== Test aligned and misaligned write zeroes operations === + == preparing image == wrote 1024/1024 bytes at offset 512 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) @@ -164,4 +166,15 @@ read 512/512 bytes at offset 512 read 3072/3072 bytes at offset 1024 3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +=== Test misaligned write zeroes via truncate === + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 +wrote 512/512 bytes at offset 0 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 512/512 bytes at offset 536870912 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 512/512 bytes at offset 0 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + *** done
This new test case only makes sense for qcow2 while iotest 033 is generic; however it matches the test purpose perfectly and also 033 contains those do_test() tricks to pass the alignment, which won't look nice being duplicated in other tests or moved to the common code. Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> --- tests/qemu-iotests/033 | 28 ++++++++++++++++++++++++++++ tests/qemu-iotests/033.out | 13 +++++++++++++ 2 files changed, 41 insertions(+)