All of lore.kernel.org
 help / color / mirror / Atom feed
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.

  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 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: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: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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.