From: Kevin Wolf <kwolf@redhat.com>
To: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, hreitz@redhat.com,
vsementsov@yandex-team.ru, pbonzini@redhat.com,
eesposit@redhat.com, den@virtuozzo.com
Subject: Re: [PATCH v3 2/3] iotests/298: add testcase for async writes with preallocation filter
Date: Mon, 5 Aug 2024 14:04:58 +0200 [thread overview]
Message-ID: <ZrC_6jb8M6YU1AfQ@redhat.com> (raw)
In-Reply-To: <20240716144123.651476-3-andrey.drobyshev@virtuozzo.com>
Am 16.07.2024 um 16:41 hat Andrey Drobyshev geschrieben:
> The testcase simply creates a 64G image with 1M clusters, generates a list
> of 1M aligned offsets and feeds aio_write commands with those offsets to
> qemu-io run with '--aio native --nocache'. Then we check the data
> written at each of the offsets. Before the previous commit this could
> result into a race within the preallocation filter which would zeroize
> some clusters after actually writing data to them.
>
> Note: the test doesn't fail in 100% cases as there's a race involved,
> but the failures are pretty consistent so it should be good enough for
> detecting the problem.
>
> Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
I left it running in a loop for a while, but couldn't reproduce the bug
with this test.
> tests/qemu-iotests/298 | 49 ++++++++++++++++++++++++++++++++++++++
> tests/qemu-iotests/298.out | 4 ++--
> 2 files changed, 51 insertions(+), 2 deletions(-)
>
> diff --git a/tests/qemu-iotests/298 b/tests/qemu-iotests/298
> index 09c9290711..b7126e9e15 100755
> --- a/tests/qemu-iotests/298
> +++ b/tests/qemu-iotests/298
> @@ -20,8 +20,10 @@
>
> import os
> import iotests
> +import random
>
> MiB = 1024 * 1024
> +GiB = MiB * 1024
> disk = os.path.join(iotests.test_dir, 'disk')
> overlay = os.path.join(iotests.test_dir, 'overlay')
> refdisk = os.path.join(iotests.test_dir, 'refdisk')
> @@ -176,5 +178,52 @@ class TestTruncate(iotests.QMPTestCase):
> self.do_test('off', '150M')
>
>
> +class TestPreallocAsyncWrites(iotests.QMPTestCase):
> + def setUp(self):
> + # Make sure we get reproducible write patterns on each run
> + random.seed(42)
> + iotests.qemu_img_create('-f', iotests.imgfmt, disk, '-o',
> + f'cluster_size={MiB},lazy_refcounts=on',
> + str(64 * GiB))
> +
> + def tearDown(self):
> + os.remove(disk)
> +
> + def test_prealloc_async_writes(self):
> + def gen_write_pattern():
> + n = 0
> + while True:
> + yield '-P 0xaa' if n else '-z'
> + n = 1 - n
This looks like a complicated way to write the following?
# Alternate between write_zeroes and writing data
def gen_write_pattern():
while True:
yield '-z'
yield '-P 0xaa'
> + def gen_read_pattern():
> + n = 0
> + while True:
> + yield '-P 0xaa' if n else '-P 0x00'
> + n = 1 - n
Same here.
Kevin
next prev parent reply other threads:[~2024-08-05 12:05 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-16 14:41 [PATCH v3 0/3] Fix data corruption within preallocation Andrey Drobyshev
2024-07-16 14:41 ` [PATCH v3 1/3] block: zero data data corruption using prealloc-filter Andrey Drobyshev
2024-07-18 15:51 ` Kevin Wolf
2024-07-18 15:52 ` Denis V. Lunev
2024-07-18 19:46 ` Denis V. Lunev
2024-08-05 11:59 ` Kevin Wolf
2024-08-05 12:13 ` Denis V. Lunev
2024-07-16 14:41 ` [PATCH v3 2/3] iotests/298: add testcase for async writes with preallocation filter Andrey Drobyshev
2024-08-05 12:04 ` Kevin Wolf [this message]
2024-08-05 12:56 ` Andrey Drobyshev
2024-08-05 13:50 ` Kevin Wolf
2024-07-16 14:41 ` [PATCH v3 3/3] scripts: add filev2p.py script for mapping virtual file offsets mapping Andrey Drobyshev
2024-08-05 12:29 ` Kevin Wolf
2024-08-05 13:02 ` Andrey Drobyshev
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=ZrC_6jb8M6YU1AfQ@redhat.com \
--to=kwolf@redhat.com \
--cc=andrey.drobyshev@virtuozzo.com \
--cc=den@virtuozzo.com \
--cc=eesposit@redhat.com \
--cc=hreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@yandex-team.ru \
/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.