Hi Max! I applied my series onto yours 129-fixing and found, that 129 fails for backup. And setting small max-chunk and even max-workers to 1 doesn't help! (setting speed like in v3 still helps).
And I found, that the problem is that really, the whole backup job goes during drain, because in new architecture we do just job_yield() during the whole background block-copy. This leads to modifying the existing patch in the series, which does job_enter() from job_user_pause: we just need call job_enter() from job_pause() to cover not only user pauses but also drained_begin. So, now I don't need any additional fixing of 129. Changes in v4: - add a lot of Max's r-b's, thanks! 03: fix over-80 line (in comment), add r-b 09: was "[PATCH v3 10/25] job: call job_enter from job_user_pause", now changed to finally fix 129 iotest, drop r-b 10: squash-in additional wording on max-chunk, fix error message, keep r-b 17: drop extra include, assert job_is_cancelled() instead of check, add r-b 18: adjust commit message, add r-b 23: add comments and assertion, about the fact that test doesn't support paths with colon inside fix s/disable-copy-range/use-copy-range/ Vladimir Sementsov-Ogievskiy (23): 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_pause qapi: backup: add max-chunk and max-workers to x-perf struct iotests: 56: 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 | 28 ++- block/backup-top.h | 1 + include/block/block-copy.h | 61 ++++- 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 | 3 + scripts/simplebench/bench-backup.py | 167 ++++++++++++++ scripts/simplebench/bench-example.py | 2 +- scripts/simplebench/bench_block_job.py | 13 +- tests/qemu-iotests/056 | 9 +- tests/qemu-iotests/109.out | 24 ++ tests/qemu-iotests/185 | 3 +- tests/qemu-iotests/185.out | 3 +- tests/qemu-iotests/219 | 13 +- tests/qemu-iotests/257 | 1 + tests/qemu-iotests/257.out | 306 ++++++++++++------------- 22 files changed, 830 insertions(+), 297 deletions(-) create mode 100755 scripts/simplebench/bench-backup.py -- 2.29.2