[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 27/36] block/backup: improve sync=bitmap work estimat
From: |
John Snow |
Subject: |
[Qemu-devel] [PULL 27/36] block/backup: improve sync=bitmap work estimates |
Date: |
Fri, 16 Aug 2019 19:13:09 -0400 |
When making backups based on bitmaps, the work estimate can be more
accurate. Update iotests to reflect the new strategy.
TOP work estimates are broken, but do not get worse with this commit.
That issue is addressed in the following commits instead.
Signed-off-by: John Snow <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
Message-id: address@hidden
Signed-off-by: John Snow <address@hidden>
---
block/backup.c | 8 +++-----
tests/qemu-iotests/256.out | 4 ++--
tests/qemu-iotests/257.out | 36 ++++++++++++++++++------------------
3 files changed, 23 insertions(+), 25 deletions(-)
diff --git a/block/backup.c b/block/backup.c
index f704c83a98f..b04ab2d5f0c 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -459,9 +459,8 @@ static void
backup_incremental_init_copy_bitmap(BackupBlockJob *job)
NULL, true);
assert(ret);
- /* TODO job_progress_set_remaining() would make more sense */
- job_progress_update(&job->common.job,
- job->len - bdrv_get_dirty_count(job->copy_bitmap));
+ job_progress_set_remaining(&job->common.job,
+ bdrv_get_dirty_count(job->copy_bitmap));
}
static int coroutine_fn backup_run(Job *job, Error **errp)
@@ -473,12 +472,11 @@ static int coroutine_fn backup_run(Job *job, Error **errp)
QLIST_INIT(&s->inflight_reqs);
qemu_co_rwlock_init(&s->flush_rwlock);
- job_progress_set_remaining(job, s->len);
-
if (s->sync_mode == MIRROR_SYNC_MODE_BITMAP) {
backup_incremental_init_copy_bitmap(s);
} else {
bdrv_set_dirty_bitmap(s->copy_bitmap, 0, s->len);
+ job_progress_set_remaining(job, s->len);
}
s->before_write.notify = backup_before_write_notify;
diff --git a/tests/qemu-iotests/256.out b/tests/qemu-iotests/256.out
index eec38614ec4..f18ecb0f912 100644
--- a/tests/qemu-iotests/256.out
+++ b/tests/qemu-iotests/256.out
@@ -113,7 +113,7 @@
{
"return": {}
}
-{"data": {"device": "j2", "len": 67108864, "offset": 67108864, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "j3", "len": 67108864, "offset": 67108864, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "j2", "len": 0, "offset": 0, "speed": 0, "type":
"backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds":
"USECS", "seconds": "SECS"}}
+{"data": {"device": "j3", "len": 0, "offset": 0, "speed": 0, "type":
"backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds":
"USECS", "seconds": "SECS"}}
--- Done ---
diff --git a/tests/qemu-iotests/257.out b/tests/qemu-iotests/257.out
index 43f2e0f9c99..811b1b11f19 100644
--- a/tests/qemu-iotests/257.out
+++ b/tests/qemu-iotests/257.out
@@ -150,7 +150,7 @@ expecting 7 dirty sectors; have 7. OK!
{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -228,7 +228,7 @@ expecting 15 dirty sectors; have 15. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -367,7 +367,7 @@ expecting 6 dirty sectors; have 6. OK!
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap":
"bitmap0", "bitmap-mode": "never", "device": "drive0", "job-id": "backup_1",
"sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"},
"event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds":
"SECS"}}
-{"data": {"device": "backup_1", "error": "Input/output error", "len":
67108864, "offset": 66781184, "speed": 0, "type": "backup"}, "event":
"BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds":
"SECS"}}
+{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216,
"offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -445,7 +445,7 @@ expecting 14 dirty sectors; have 14. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -633,7 +633,7 @@ expecting 7 dirty sectors; have 7. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -711,7 +711,7 @@ expecting 15 dirty sectors; have 15. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -899,7 +899,7 @@ expecting 7 dirty sectors; have 7. OK!
{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -977,7 +977,7 @@ expecting 15 dirty sectors; have 15. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 983040, "offset": 983040, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -1116,7 +1116,7 @@ expecting 6 dirty sectors; have 6. OK!
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap":
"bitmap0", "bitmap-mode": "on-success", "device": "drive0", "job-id":
"backup_1", "sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"},
"event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds":
"SECS"}}
-{"data": {"device": "backup_1", "error": "Input/output error", "len":
67108864, "offset": 66781184, "speed": 0, "type": "backup"}, "event":
"BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds":
"SECS"}}
+{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216,
"offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -1194,7 +1194,7 @@ expecting 14 dirty sectors; have 14. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 917504, "offset": 917504, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -1382,7 +1382,7 @@ expecting 7 dirty sectors; have 7. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -1460,7 +1460,7 @@ expecting 12 dirty sectors; have 12. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -1648,7 +1648,7 @@ expecting 7 dirty sectors; have 7. OK!
{"execute": "job-cancel", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -1726,7 +1726,7 @@ expecting 12 dirty sectors; have 12. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -1865,7 +1865,7 @@ expecting 6 dirty sectors; have 6. OK!
{"execute": "blockdev-backup", "arguments": {"auto-finalize": false, "bitmap":
"bitmap0", "bitmap-mode": "always", "device": "drive0", "job-id": "backup_1",
"sync": "bitmap", "target": "backup_target_1"}}
{"return": {}}
{"data": {"action": "report", "device": "backup_1", "operation": "read"},
"event": "BLOCK_JOB_ERROR", "timestamp": {"microseconds": "USECS", "seconds":
"SECS"}}
-{"data": {"device": "backup_1", "error": "Input/output error", "len":
67108864, "offset": 66781184, "speed": 0, "type": "backup"}, "event":
"BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds":
"SECS"}}
+{"data": {"device": "backup_1", "error": "Input/output error", "len": 393216,
"offset": 65536, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -1943,7 +1943,7 @@ expecting 13 dirty sectors; have 13. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 851968, "offset": 851968, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -2131,7 +2131,7 @@ expecting 7 dirty sectors; have 7. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_1"}}
{"return": {}}
{"data": {"id": "backup_1", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_1", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_1", "len": 393216, "offset": 393216, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
@@ -2209,7 +2209,7 @@ expecting 12 dirty sectors; have 12. OK!
{"execute": "job-finalize", "arguments": {"id": "backup_2"}}
{"return": {}}
{"data": {"id": "backup_2", "type": "backup"}, "event": "BLOCK_JOB_PENDING",
"timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
-{"data": {"device": "backup_2", "len": 67108864, "offset": 67108864, "speed":
0, "type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
+{"data": {"device": "backup_2", "len": 786432, "offset": 786432, "speed": 0,
"type": "backup"}, "event": "BLOCK_JOB_COMPLETED", "timestamp":
{"microseconds": "USECS", "seconds": "SECS"}}
{
"bitmaps": {
"device0": [
--
2.21.0
- [Qemu-devel] [PULL 11/36] block/backup: upgrade copy_bitmap to BdrvDirtyBitmap, (continued)
- [Qemu-devel] [PULL 11/36] block/backup: upgrade copy_bitmap to BdrvDirtyBitmap, John Snow, 2019/08/16
- [Qemu-devel] [PULL 21/36] iotests: test bitmap moving inside 254, John Snow, 2019/08/16
- [Qemu-devel] [PULL 19/36] blockdev: reduce aio_context locked sections in bitmap add/remove, John Snow, 2019/08/16
- [Qemu-devel] [PULL 20/36] qapi: implement block-dirty-bitmap-remove transaction action, John Snow, 2019/08/16
- [Qemu-devel] [PULL 22/36] iotests/257: add Pattern class, John Snow, 2019/08/16
- [Qemu-devel] [PULL 25/36] block/backup: hoist bitmap check into QMP interface, John Snow, 2019/08/16
- [Qemu-devel] [PULL 23/36] iotests/257: add EmulatedBitmap class, John Snow, 2019/08/16
- [Qemu-devel] [PULL 29/36] block/backup: add backup_is_cluster_allocated, John Snow, 2019/08/16
- [Qemu-devel] [PULL 28/36] block/backup: centralize copy_bitmap initialization, John Snow, 2019/08/16
- [Qemu-devel] [PULL 30/36] block/backup: teach TOP to never copy unallocated regions, John Snow, 2019/08/16
- [Qemu-devel] [PULL 27/36] block/backup: improve sync=bitmap work estimates,
John Snow <=
- [Qemu-devel] [PULL 34/36] block/backup: deal with zero detection, John Snow, 2019/08/16
- [Qemu-devel] [PULL 35/36] block/backup: refactor write_flags, John Snow, 2019/08/16
- [Qemu-devel] [PULL 33/36] qapi: add dirty-bitmaps to query-named-block-nodes result, John Snow, 2019/08/16
- [Qemu-devel] [PULL 26/36] iotests/257: test API failures, John Snow, 2019/08/16
- [Qemu-devel] [PULL 31/36] block/backup: support bitmap sync modes for non-bitmap backups, John Snow, 2019/08/16
- [Qemu-devel] [PULL 36/36] tests/test-hbitmap: test next_zero and _next_dirty_area after truncate, John Snow, 2019/08/16
- [Qemu-devel] [PULL 24/36] iotests/257: Refactor backup helpers, John Snow, 2019/08/16
- [Qemu-devel] [PULL 17/36] iotests: add test 257 for bitmap-mode backups, John Snow, 2019/08/16
- [Qemu-devel] [PULL 32/36] iotests/257: test traditional sync modes, John Snow, 2019/08/16
- Re: [Qemu-devel] [PULL 00/36] Bitmaps patches, Peter Maydell, 2019/08/19