[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 11/25] qapi: backup: add max-chunk and max-workers to x-perf s
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v3 11/25] qapi: backup: add max-chunk and max-workers to x-perf struct |
Date: |
Mon, 26 Oct 2020 20:18:01 +0300 |
Add new parameters to configure future backup features. The patch
doesn't introduce aio backup requests (so we actually have only one
worker) neither requests larger than one cluster. Still, formally we
satisfy these maximums anyway, so add the parameters now, to facilitate
further patch which will really change backup job behavior.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
qapi/block-core.json | 11 ++++++++++-
block/backup.c | 28 +++++++++++++++++++++++-----
block/replication.c | 2 +-
blockdev.c | 8 +++++++-
4 files changed, 41 insertions(+), 8 deletions(-)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 71e6faa15c..5a21c24c1d 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1378,10 +1378,19 @@
#
# @use-copy-range: Use copy offloading. Default true.
#
+# @max-workers: Maximum number of parallel requests for the sustained
background
+# copying process. Doesn't influence copy-before-write
operations.
+# Default 64.
+#
+# @max-chunk: Maximum request length for the sustained background copying
+# process. Doesn't influence copy-before-write operations.
+# 0 means unlimited. Default 0.
+#
# Since: 5.2
##
{ 'struct': 'BackupPerf',
- 'data': { '*use-copy-range': 'bool' }}
+ 'data': { '*use-copy-range': 'bool',
+ '*max-workers': 'int', '*max-chunk': 'int64' } }
##
# @BackupCommon:
diff --git a/block/backup.c b/block/backup.c
index 09ff5a92ef..8c67d77504 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -388,6 +388,29 @@ BlockJob *backup_job_create(const char *job_id,
BlockDriverState *bs,
return NULL;
}
+ cluster_size = backup_calculate_cluster_size(target, errp);
+ if (cluster_size < 0) {
+ goto error;
+ }
+
+ if (perf->max_workers < 1) {
+ error_setg(errp, "max-worker must be greater than zero");
+ return NULL;
+ }
+
+ if (perf->max_chunk < 0) {
+ error_setg(errp, "max-chunk must be zero (which means no limit) or "
+ "positive");
+ return NULL;
+ }
+
+ if (perf->max_chunk && perf->max_chunk < cluster_size) {
+ error_setg(errp, "Required max-chunk (%" PRIi64 ") is less than backup
"
+ "cluster size (%" PRIi64 ")", perf->max_chunk,
cluster_size);
+ return NULL;
+ }
+
+
if (sync_bitmap) {
/* If we need to write to this bitmap, check that we can: */
if (bitmap_mode != BITMAP_SYNC_MODE_NEVER &&
@@ -420,11 +443,6 @@ BlockJob *backup_job_create(const char *job_id,
BlockDriverState *bs,
goto error;
}
- cluster_size = backup_calculate_cluster_size(target, errp);
- if (cluster_size < 0) {
- goto error;
- }
-
/*
* If source is in backing chain of target assume that target is going to
be
* used for "image fleecing", i.e. it should represent a kind of snapshot
of
diff --git a/block/replication.c b/block/replication.c
index 22ffc811ee..97be7ef4de 100644
--- a/block/replication.c
+++ b/block/replication.c
@@ -454,7 +454,7 @@ static void replication_start(ReplicationState *rs,
ReplicationMode mode,
int64_t active_length, hidden_length, disk_length;
AioContext *aio_context;
Error *local_err = NULL;
- BackupPerf perf = { .use_copy_range = true };
+ BackupPerf perf = { .use_copy_range = true, .max_workers = 1 };
aio_context = bdrv_get_aio_context(bs);
aio_context_acquire(aio_context);
diff --git a/blockdev.c b/blockdev.c
index b71ed08a3b..0ed390abe0 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2788,7 +2788,7 @@ static BlockJob *do_backup_common(BackupCommon *backup,
{
BlockJob *job = NULL;
BdrvDirtyBitmap *bmap = NULL;
- BackupPerf perf = { .use_copy_range = true };
+ BackupPerf perf = { .use_copy_range = true, .max_workers = 64 };
int job_flags = JOB_DEFAULT;
if (!backup->has_speed) {
@@ -2817,6 +2817,12 @@ static BlockJob *do_backup_common(BackupCommon *backup,
if (backup->x_perf->has_use_copy_range) {
perf.use_copy_range = backup->x_perf->use_copy_range;
}
+ if (backup->x_perf->has_max_workers) {
+ perf.max_workers = backup->x_perf->max_workers;
+ }
+ if (backup->x_perf->has_max_chunk) {
+ perf.max_chunk = backup->x_perf->max_chunk;
+ }
}
if ((backup->sync == MIRROR_SYNC_MODE_BITMAP) ||
--
2.21.3
- [PATCH v3 01/25] iotests: 129 don't check backup "busy", (continued)
- [PATCH v3 01/25] iotests: 129 don't check backup "busy", Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 05/25] block/block-copy: add max_chunk and max_workers parameters, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 02/25] qapi: backup: add perf.use-copy-range parameter, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 03/25] block/block-copy: More explicit call_state, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 06/25] block/block-copy: add list of all call-states, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 04/25] block/block-copy: implement block_copy_async, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 08/25] block/block-copy: add block_copy_cancel, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 07/25] block/block-copy: add ratelimit to block-copy, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 09/25] blockjob: add set_speed to BlockJobDriver, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 10/25] job: call job_enter from job_user_pause, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 11/25] qapi: backup: add max-chunk and max-workers to x-perf struct,
Vladimir Sementsov-Ogievskiy <=
- [PATCH v3 12/25] iotests: 56: prepare for backup over block-copy, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 14/25] iotests: 185: prepare for backup over block-copy, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 15/25] iotests: 219: prepare for backup over block-copy, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 13/25] iotests: 129: prepare for backup over block-copy, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 17/25] block/block-copy: make progress_bytes_callback optional, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 18/25] block/backup: drop extra gotos from backup_run(), Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 19/25] backup: move to block-copy, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 20/25] qapi: backup: disable copy_range by default, Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 21/25] block/block-copy: drop unused block_copy_set_progress_callback(), Vladimir Sementsov-Ogievskiy, 2020/10/26
- [PATCH v3 24/25] simplebench: bench_block_job: add cmd_options argument, Vladimir Sementsov-Ogievskiy, 2020/10/26