From: Anton Nefedov <anton.nefedov@virtuozzo.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Cc: "qemu-block@nongnu.org" <qemu-block@nongnu.org>,
"kwolf@redhat.com" <kwolf@redhat.com>,
"mreitz@redhat.com" <mreitz@redhat.com>,
"eblake@redhat.com" <eblake@redhat.com>,
Denis Lunev <den@virtuozzo.com>,
"berto@igalia.com" <berto@igalia.com>
Subject: Re: [Qemu-devel] [PATCH v10 8/9] qcow2: skip writing zero buffers to empty COW areas
Date: Mon, 17 Dec 2018 10:17:49 +0000 [thread overview]
Message-ID: <08bc9976-7702-0410-557f-03b72fe6c8da@virtuozzo.com> (raw)
In-Reply-To: <407c1184-67fa-1d0f-a1f7-c4050521d332@virtuozzo.com>
On 14/12/2018 7:20 PM, Vladimir Sementsov-Ogievskiy wrote:
> 03.12.2018 13:14, Anton Nefedov wrote:
>> If COW areas of the newly allocated clusters are zeroes on the backing image,
>> efficient bdrv_write_zeroes(flags=BDRV_REQ_ALLOCATE) can be used on the whole
>> cluster instead of writing explicit zero buffers later in perform_cow().
>>
>> iotest 060:
>> write to the discarded cluster does not trigger COW anymore.
>> Use a backing image instead.
>>
>
> [..]
>
>> --- a/tests/qemu-iotests/060
>> +++ b/tests/qemu-iotests/060
>> @@ -150,27 +150,33 @@ $QEMU_IO -c "$OPEN_RO" -c "read -P 1 0 512" | _filter_qemu_io
>> echo
>> echo "=== Testing overlap while COW is in flight ==="
>> echo
>> +BACKING_IMG=$TEST_IMG.base
>> +TEST_IMG=$BACKING_IMG _make_test_img 1G
>> +
>> +$QEMU_IO -c 'write 64k 64k' "$BACKING_IMG" | _filter_qemu_io
>> +
>> # compat=0.10 is required in order to make the following discard actually
>> -# unallocate the sector rather than make it a zero sector - we want COW, after
>> -# all.
>> -IMGOPTS='compat=0.10' _make_test_img 1G
>> +# unallocate the sector rather than make it a zero sector as we would like
>> +# to reuse it for another guest offset
>> +IMGOPTS='compat=0.10' _make_test_img -b "$BACKING_IMG" 1G
>> # Write two clusters, the second one enforces creation of an L2 table after
>> # the first data cluster.
>> $QEMU_IO -c 'write 0k 64k' -c 'write 512M 64k' "$TEST_IMG" | _filter_qemu_io
>> -# Discard the first cluster. This cluster will soon enough be reallocated and
>> -# used for COW.
>> +# Discard the first cluster. This cluster will soon enough be reallocated
>> $QEMU_IO -c 'discard 0k 64k' "$TEST_IMG" | _filter_qemu_io
>> # Now, corrupt the image by marking the second L2 table cluster as free.
>> poke_file "$TEST_IMG" '131084' "\x00\x00" # 0x2000c
>> -# Start a write operation requiring COW on the image stopping it right before
>> -# doing the read; then, trigger the corruption prevention by writing anything to
>> -# any unallocated cluster, leading to an attempt to overwrite the second L2
>> +# Start a write operation requiring COW on the image;
>> +# this write will reuse the host offset released by a previous discard.
>> +# Stop it right before doing the read.
>> +# Then, trigger the corruption prevention by writing anything to
>> +# another unallocated cluster, leading to an attempt to overwrite the second L2
>> # table. Finally, resume the COW write and see it fail (but not crash).
>> echo "open -o file.driver=blkdebug $TEST_IMG
>> break cow_read 0
>> -aio_write 0k 1k
>> +aio_write 64k 1k
>> wait_break 0
>> -write 64k 64k
>> +write 128k 64k
>
> don't understand why you need these changes.
>
> works for me, without them, if write to backing at 0 offset, of course.
>
> As I understand, discard create unallocated holes in top qcow2 for old qcow2 version.
>
Ok, so COW happens regardless if this guest offset has been discarded
before. These offset changes are indeed not needed. Just the backing
file.
next prev parent reply other threads:[~2018-12-17 10:18 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-03 10:14 [Qemu-devel] [PATCH v10 0/9] qcow2: cluster space preallocation Anton Nefedov
2018-12-03 10:14 ` [Qemu-devel] [PATCH v10 1/9] mirror: inherit supported write/zero flags Anton Nefedov
2018-12-05 12:43 ` Vladimir Sementsov-Ogievskiy
2018-12-05 13:27 ` Anton Nefedov
2018-12-07 14:31 ` Alberto Garcia
2018-12-12 12:15 ` Vladimir Sementsov-Ogievskiy
2018-12-03 10:14 ` [Qemu-devel] [PATCH v10 2/9] blkverify: set " Anton Nefedov
2018-12-07 14:32 ` Alberto Garcia
2018-12-12 12:26 ` Vladimir Sementsov-Ogievskiy
2018-12-03 10:14 ` [Qemu-devel] [PATCH v10 3/9] quorum: set supported write flags Anton Nefedov
2018-12-07 14:33 ` Alberto Garcia
2018-12-07 14:46 ` Anton Nefedov
2018-12-07 14:54 ` Alberto Garcia
2018-12-12 12:33 ` Vladimir Sementsov-Ogievskiy
2018-12-03 10:14 ` [Qemu-devel] [PATCH v10 4/9] block: introduce BDRV_REQ_ALLOCATE flag Anton Nefedov
2018-12-05 12:59 ` Vladimir Sementsov-Ogievskiy
2018-12-05 13:38 ` Anton Nefedov
2018-12-03 10:14 ` [Qemu-devel] [PATCH v10 5/9] block: treat BDRV_REQ_ALLOCATE as serialising Anton Nefedov
2018-12-05 13:14 ` Vladimir Sementsov-Ogievskiy
2018-12-05 14:01 ` Anton Nefedov
2018-12-12 12:48 ` Vladimir Sementsov-Ogievskiy
2018-12-13 11:57 ` Anton Nefedov
2018-12-03 10:14 ` [Qemu-devel] [PATCH v10 6/9] file-posix: support BDRV_REQ_ALLOCATE Anton Nefedov
2018-12-05 13:25 ` Vladimir Sementsov-Ogievskiy
2018-12-05 14:11 ` Anton Nefedov
2018-12-12 17:19 ` Vladimir Sementsov-Ogievskiy
2018-12-13 12:01 ` Anton Nefedov
2018-12-07 15:09 ` Alberto Garcia
2018-12-03 10:14 ` [Qemu-devel] [PATCH v10 8/9] qcow2: skip writing zero buffers to empty COW areas Anton Nefedov
2018-12-03 13:59 ` Alberto Garcia
2018-12-03 14:04 ` Anton Nefedov
2018-12-05 14:01 ` Vladimir Sementsov-Ogievskiy
2018-12-05 16:59 ` Anton Nefedov
2018-12-05 17:42 ` Vladimir Sementsov-Ogievskiy
2018-12-13 12:02 ` Vladimir Sementsov-Ogievskiy
2018-12-13 13:57 ` Anton Nefedov
2018-12-14 16:20 ` Vladimir Sementsov-Ogievskiy
2018-12-17 10:17 ` Anton Nefedov [this message]
2018-12-03 10:14 ` [Qemu-devel] [PATCH v10 7/9] block: support BDRV_REQ_ALLOCATE in passthrough drivers Anton Nefedov
2018-12-05 13:28 ` Vladimir Sementsov-Ogievskiy
2018-12-07 15:00 ` Alberto Garcia
2018-12-03 10:15 ` [Qemu-devel] [PATCH v10 9/9] iotest 134: test cluster-misaligned encrypted write Anton Nefedov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=08bc9976-7702-0410-557f-03b72fe6c8da@virtuozzo.com \
--to=anton.nefedov@virtuozzo.com \
--cc=berto@igalia.com \
--cc=den@virtuozzo.com \
--cc=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).