qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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


      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).