From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, wencongyang2@huawei.com,
xiechanglong.d@gmail.com, qemu-devel@nongnu.org,
armbru@redhat.com, den@openvz.org, mreitz@redhat.com,
jsnow@redhat.com
Subject: Re: [PATCH v3 00/25] backup performance: block_status + async
Date: Sat, 9 Jan 2021 13:18:05 +0300 [thread overview]
Message-ID: <9d60205c-a76c-7d72-4b39-ac75aadeb79d@virtuozzo.com> (raw)
In-Reply-To: <20201026171815.13233-1-vsementsov@virtuozzo.com>
ping
26.10.2020 20:17, Vladimir Sementsov-Ogievskiy wrote:
> Hi all!
>
> The series turn backup into series of block_copy_async calls, covering
> the whole disk, so we get block-status based paralallel async requests
> out of the box, which gives performance gain:
>
> All results are in seconds
>
> ----------------- ----------- ------------- -------------- --------------------- -------------------------------- ------------------------------------
> A B C D E F
> mirror(old) backup(old) backup(old) backup(new) backup(new) backup(new)
> copy-range=on copy-range=off copy-range=on copy-range=on
> max-workers=1
> hdd-ext4:hdd-ext4 19 20 21 ± 14% 19 51 ± 12% 22 ± 24%
> A+5% A+12% B+6% A+3% B-2% C-8% A+174% B+161% C+145% D+165% A+18% B+12% C+5% D+14% E-57%
> hdd-ext4:ssd-ext4 8.7 9.4 ± 3% 9.6 ± 2% 8.8 24 ± 2% 8.9
> A+8% A+10% B+2% A+1% B-7% C-9% A+174% B+155% C+149% D+173% A+2% B-5% C-8% D+1% E-63%
> ssd-ext4:hdd-ext4 9 12 ± 9% 11 ± 7% 9.7 ± 7% 11 ± 2% 10 ± 3%
> A+36% A+28% B-6% A+7% B-21% C-16% A+21% B-11% C-5% D+13% A+16% B-14% C-9% D+8% E-4%
> ssd-ext4:ssd-ext4 4.4 11 ± 4% 10 ± 3% 4.7 5.7 10 ± 5%
> A+143% A+134% B-4% A+6% B-56% C-55% A+30% B-46% C-45% D+22% A+133% B-4% C-1% D+119% E+79%
> hdd-xfs:hdd-xfs 19 20 ± 3% 20 20 45 ± 4% 19
> A+3% A+4% B+1% A+3% B+0% C-1% A+131% B+125% C+122% D+125% A-1% B-4% C-4% D-3% E-57%
> hdd-xfs:ssd-xfs 9.1 9.9 ± 4% 9.5 9.1 ± 3% 23 ± 2% 9.2
> A+8% A+4% B-4% A+0% B-8% C-4% A+151% B+132% C+142% D+151% A+1% B-7% C-3% D+1% E-60%
> ssd-xfs:hdd-xfs 9.1 11 ± 9% 11 9.5 ± 4% 12 ± 22% 11 ± 3%
> A+16% A+22% B+6% A+4% B-10% C-15% A+32% B+14% C+8% D+26% A+18% B+2% C-4% D+13% E-10%
> ssd-xfs:ssd-xfs 4.1 8.7 ± 7% 9.2 ± 5% 4.5 ± 2% 5.7 ± 3% 9.7 ± 5%
> A+113% A+126% B+6% A+11% B-48% C-51% A+40% B-34% C-38% D+27% A+138% B+12% C+5% D+115% E+70%
> ssd-ext4:nbd 9.1 ± 2% 37 37 ± 2% 11 11 ± 3% 19 ± 2%
> A+302% A+304% B+1% A+18% B-71% C-71% A+18% B-71% C-71% D+0% A+106% B-49% C-49% D+74% E+75%
> nbd:ssd-ext4 9 30 ± 3% 31 9 9 17
> A+237% A+245% B+2% A+0% B-70% C-71% A+0% B-70% C-71% D+0% A+93% B-43% C-44% D+93% E+93%
> ----------------- ----------- ------------- -------------- --------------------- -------------------------------- ------------------------------------
>
> Here column B is current backup and column D is new backup with
> default parameters.
>
> Mirror is still faster, but we are very close to it.
>
> v3:
> 01: add Max's r-b
> 02: change to perf.use-copy-range
> 03: add Max's r-b
> 04: - more explicit finish status of async block_copy
> - block_copy_async always return non-NULL
> - personal opaque for new cb
> 05: - new arguments added in this patch
> - no default value for arguments in block_copy_async()
> 06: new
> 07: - caller does _kick() by hand
> - grammar in commit msg
> - add new parameter in _this_ patch
> - switch to opposite ignore_ratelimit
> 08: cancel now is async
> 09,10: add Max's r-b
> 11: changed a lot
> 12: add timeout
> 14: rebase on x-perf, keep r-b
> 15: rebase on x-perf
> 16: rebase on x-perf, keep r-b
> 17,18: new
> 19: now only backup.c is changed in this patch, changed a lot
> 20,21: new
> 22: rebased, keep r-b
> 23: new, split from 24
> 24: drop unrelated change (now patch23), keep r-b
> 25: changed a lot, explicitly specify options for each env (test table column)
>
>
> To run benchmark do the following:
>
> prepare images:
> In a directories, where you want to place source and target images,
> prepare images by:
>
> for img in test-source test-target; do
> ./qemu-img create -f raw $img 1000M;
> ./qemu-img bench -c 1000 -d 1 -f raw -s 1M -w --pattern=0xff $img
> done
>
> prepare similar image for nbd server, and start it somewhere by
>
> qemu-nbd --persistent --nocache -f raw IMAGE
>
> Then, run benchmark, like this:
> ./bench-backup.py --env old:/work/src/qemu/up-backup-block-copy-master/build/qemu-system-x86_64,mirror old,copy-range=on old,copy-range=off new:../../build/qemu-system-x86_64 new,copy-range=on new,copy-range=on,max-workers=1 --dir hdd-ext4:/test-a hdd-xfs:/test-b ssd-ext4:/ssd ssd-xfs:/ssd-xfs --test $(for fs in ext4 xfs; do echo hdd-$fs:hdd-$fs hdd-$fs:ssd-$fs ssd-$fs:hdd-$fs ssd-$fs:ssd-$fs; done) --nbd 192.168.100.5 --test ssd-ext4:nbd nbd:ssd-ext4
>
> (you may simply reduce number of directories/test-cases, use --help for
> help)
>
> Vladimir Sementsov-Ogievskiy (25):
> iotests: 129 don't check backup "busy"
> qapi: backup: add perf.use-copy-range parameter
> block/block-copy: More explicit call_state
> block/block-copy: implement block_copy_async
> block/block-copy: add max_chunk and max_workers parameters
> block/block-copy: add list of all call-states
> block/block-copy: add ratelimit to block-copy
> block/block-copy: add block_copy_cancel
> blockjob: add set_speed to BlockJobDriver
> job: call job_enter from job_user_pause
> qapi: backup: add max-chunk and max-workers to x-perf struct
> iotests: 56: prepare for backup over block-copy
> iotests: 129: prepare for backup over block-copy
> iotests: 185: prepare for backup over block-copy
> iotests: 219: prepare for backup over block-copy
> iotests: 257: prepare for backup over block-copy
> block/block-copy: make progress_bytes_callback optional
> block/backup: drop extra gotos from backup_run()
> backup: move to block-copy
> qapi: backup: disable copy_range by default
> block/block-copy: drop unused block_copy_set_progress_callback()
> block/block-copy: drop unused argument of block_copy()
> simplebench/bench_block_job: use correct shebang line with python3
> simplebench: bench_block_job: add cmd_options argument
> simplebench: add bench-backup.py
>
> qapi/block-core.json | 26 ++-
> block/backup-top.h | 1 +
> include/block/block-copy.h | 58 ++++-
> include/block/block_int.h | 3 +
> include/block/blockjob_int.h | 2 +
> block/backup-top.c | 6 +-
> block/backup.c | 233 ++++++++++++-------
> block/block-copy.c | 227 +++++++++++++++---
> block/replication.c | 2 +
> blockdev.c | 14 ++
> blockjob.c | 6 +
> job.c | 1 +
> scripts/simplebench/bench-backup.py | 165 +++++++++++++
> scripts/simplebench/bench-example.py | 2 +-
> scripts/simplebench/bench_block_job.py | 13 +-
> tests/qemu-iotests/056 | 9 +-
> tests/qemu-iotests/129 | 3 +-
> tests/qemu-iotests/185 | 3 +-
> tests/qemu-iotests/185.out | 2 +-
> tests/qemu-iotests/219 | 13 +-
> tests/qemu-iotests/257 | 1 +
> tests/qemu-iotests/257.out | 306 ++++++++++++-------------
> 22 files changed, 798 insertions(+), 298 deletions(-)
> create mode 100755 scripts/simplebench/bench-backup.py
>
--
Best regards,
Vladimir
prev parent reply other threads:[~2021-01-09 10:19 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-26 17:17 [PATCH v3 00/25] backup performance: block_status + async Vladimir Sementsov-Ogievskiy
2020-10-26 17:17 ` [PATCH v3 01/25] iotests: 129 don't check backup "busy" Vladimir Sementsov-Ogievskiy
2020-10-26 17:17 ` [PATCH v3 02/25] qapi: backup: add perf.use-copy-range parameter Vladimir Sementsov-Ogievskiy
2021-01-11 16:07 ` Max Reitz
2021-01-19 20:21 ` Eric Blake
2021-01-20 6:09 ` Vladimir Sementsov-Ogievskiy
2021-01-20 8:24 ` Max Reitz
2020-10-26 17:17 ` [PATCH v3 03/25] block/block-copy: More explicit call_state Vladimir Sementsov-Ogievskiy
2020-10-26 17:17 ` [PATCH v3 04/25] block/block-copy: implement block_copy_async Vladimir Sementsov-Ogievskiy
2021-01-11 16:27 ` Max Reitz
2020-10-26 17:17 ` [PATCH v3 05/25] block/block-copy: add max_chunk and max_workers parameters Vladimir Sementsov-Ogievskiy
2021-01-11 16:47 ` Max Reitz
2020-10-26 17:17 ` [PATCH v3 06/25] block/block-copy: add list of all call-states Vladimir Sementsov-Ogievskiy
2021-01-11 17:02 ` Max Reitz
2020-10-26 17:17 ` [PATCH v3 07/25] block/block-copy: add ratelimit to block-copy Vladimir Sementsov-Ogievskiy
2021-01-12 10:48 ` Max Reitz
2020-10-26 17:17 ` [PATCH v3 08/25] block/block-copy: add block_copy_cancel Vladimir Sementsov-Ogievskiy
2021-01-12 11:05 ` Max Reitz
2020-10-26 17:17 ` [PATCH v3 09/25] blockjob: add set_speed to BlockJobDriver Vladimir Sementsov-Ogievskiy
2020-10-26 17:18 ` [PATCH v3 10/25] job: call job_enter from job_user_pause Vladimir Sementsov-Ogievskiy
2020-10-26 17:18 ` [PATCH v3 11/25] qapi: backup: add max-chunk and max-workers to x-perf struct Vladimir Sementsov-Ogievskiy
2020-11-09 12:23 ` Vladimir Sementsov-Ogievskiy
2021-01-12 11:59 ` Max Reitz
2020-10-26 17:18 ` [PATCH v3 12/25] iotests: 56: prepare for backup over block-copy Vladimir Sementsov-Ogievskiy
2021-01-12 12:07 ` Max Reitz
2020-10-26 17:18 ` [PATCH v3 13/25] iotests: 129: " Vladimir Sementsov-Ogievskiy
2021-01-12 12:14 ` Max Reitz
2021-01-16 21:03 ` Vladimir Sementsov-Ogievskiy
2020-10-26 17:18 ` [PATCH v3 14/25] iotests: 185: " Vladimir Sementsov-Ogievskiy
2020-10-26 17:18 ` [PATCH v3 15/25] iotests: 219: " Vladimir Sementsov-Ogievskiy
2021-01-12 12:32 ` Max Reitz
2020-10-26 17:18 ` [PATCH v3 16/25] iotests: 257: " Vladimir Sementsov-Ogievskiy
2020-10-26 17:18 ` [PATCH v3 17/25] block/block-copy: make progress_bytes_callback optional Vladimir Sementsov-Ogievskiy
2021-01-12 12:39 ` Max Reitz
2020-10-26 17:18 ` [PATCH v3 18/25] block/backup: drop extra gotos from backup_run() Vladimir Sementsov-Ogievskiy
2021-01-12 12:40 ` Max Reitz
2020-10-26 17:18 ` [PATCH v3 19/25] backup: move to block-copy Vladimir Sementsov-Ogievskiy
2021-01-12 13:23 ` Max Reitz
2021-01-12 15:27 ` Vladimir Sementsov-Ogievskiy
2020-10-26 17:18 ` [PATCH v3 20/25] qapi: backup: disable copy_range by default Vladimir Sementsov-Ogievskiy
2021-01-12 14:05 ` Max Reitz
2021-01-12 15:44 ` Vladimir Sementsov-Ogievskiy
2021-01-12 15:55 ` Max Reitz
2020-10-26 17:18 ` [PATCH v3 21/25] block/block-copy: drop unused block_copy_set_progress_callback() Vladimir Sementsov-Ogievskiy
2021-01-12 14:07 ` Max Reitz
2020-10-26 17:18 ` [PATCH v3 22/25] block/block-copy: drop unused argument of block_copy() Vladimir Sementsov-Ogievskiy
2020-10-26 17:18 ` [PATCH v3 23/25] simplebench/bench_block_job: use correct shebang line with python3 Vladimir Sementsov-Ogievskiy
2021-01-12 14:10 ` Max Reitz
2020-10-26 17:18 ` [PATCH v3 24/25] simplebench: bench_block_job: add cmd_options argument Vladimir Sementsov-Ogievskiy
2020-10-26 17:18 ` [PATCH v3 25/25] simplebench: add bench-backup.py Vladimir Sementsov-Ogievskiy
2021-01-12 14:50 ` Max Reitz
2021-01-12 17:12 ` Vladimir Sementsov-Ogievskiy
2021-01-09 10:18 ` Vladimir Sementsov-Ogievskiy [this message]
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=9d60205c-a76c-7d72-4b39-ac75aadeb79d@virtuozzo.com \
--to=vsementsov@virtuozzo.com \
--cc=armbru@redhat.com \
--cc=den@openvz.org \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=wencongyang2@huawei.com \
--cc=xiechanglong.d@gmail.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).