qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 3/3] qcow2: handle_dependencies(): relax conflict detectio


From: Hanna Reitz
Subject: Re: [PATCH v2 3/3] qcow2: handle_dependencies(): relax conflict detection
Date: Mon, 13 Sep 2021 16:51:45 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

On 24.08.21 12:15, Vladimir Sementsov-Ogievskiy wrote:
There is no conflict and no dependency if we have parallel writes to
different subclusters of one cluster when the cluster itself is already
allocated. So, relax extra dependency.

Measure performance:
First, prepare build/qemu-img-old and build/qemu-img-new images.

cd scripts/simplebench
./img_bench_templater.py

Paste the following to stdin of running script:

qemu_img=../../build/qemu-img-{old|new}
$qemu_img create -f qcow2 -o extended_l2=on /ssd/x.qcow2 1G
$qemu_img bench -c 100000 -d 8 [-s 2K|-s 2K -o 512|-s $((1024*2+512))] \
         -w -t none -n /ssd/x.qcow2

The result:

All results are in seconds

------------------  ---------  ---------
                     old        new
-s 2K               6.7 ± 15%  6.2 ± 12%
                                  -7%
-s 2K -o 512        13 ± 3%    11 ± 5%
                                  -16%
-s $((1024*2+512))  9.5 ± 4%   8.4
                                  -12%
------------------  ---------  ---------

So small writes are more independent now and that helps to keep deeper
io queue which improves performance.

271 iotest output becomes racy for three allocation in one cluster.
Second and third writes may finish in different order. Second and
third requests don't depend on each other any more. Still they both
depend on first request anyway. Filter out second and third write
offsets to cover both possible outputs.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
  block/qcow2-cluster.c      | 11 +++++++++++
  tests/qemu-iotests/271     |  5 ++++-
  tests/qemu-iotests/271.out |  4 ++--
  3 files changed, 17 insertions(+), 3 deletions(-)

[...]

diff --git a/tests/qemu-iotests/271 b/tests/qemu-iotests/271
index 599b849cc6..d9d391955e 100755
--- a/tests/qemu-iotests/271
+++ b/tests/qemu-iotests/271
@@ -893,7 +893,10 @@ EOF
  }
_make_test_img -o extended_l2=on 1M
-_concurrent_io     | $QEMU_IO | _filter_qemu_io
+# Second an third writes in _concurrent_io() are independent and may finish in

s/ an / and /

With that fixed:

Reviewed-by: Hanna Reitz <hreitz@redhat.com>

+# different order. So, filter offset out to match both possible variants.
+_concurrent_io     | $QEMU_IO | _filter_qemu_io | \
+    $SED -e 's/\(20480\|40960\)/OFFSET/'
  _concurrent_verify | $QEMU_IO | _filter_qemu_io
# success, all done




reply via email to

[Prev in Thread] Current Thread [Next in Thread]