[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 2/6] block/block-copy: limit copy_range_size to 16 MiB
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v3 2/6] block/block-copy: limit copy_range_size to 16 MiB |
Date: |
Tue, 22 Oct 2019 14:18:01 +0300 |
Large copy range may imply memory allocation and large io effort, so
using 2G copy range request may be bad idea. Let's limit it to 16 MiB.
It also helps the following patch to refactor copy-with-offload
fallback to copy-with-bounce-buffer.
Note, that total memory usage of backup is still not limited, it will
be fixed in further commit.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
---
block/block-copy.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/block/block-copy.c b/block/block-copy.c
index ecd086010e..cd45b373a9 100644
--- a/block/block-copy.c
+++ b/block/block-copy.c
@@ -18,6 +18,9 @@
#include "qapi/error.h"
#include "block/block-copy.h"
#include "sysemu/block-backend.h"
+#include "qemu/units.h"
+
+#define BLOCK_COPY_MAX_COPY_RANGE (16 * MiB)
static void coroutine_fn block_copy_wait_inflight_reqs(BlockCopyState *s,
int64_t start,
@@ -70,9 +73,12 @@ BlockCopyState *block_copy_state_new(BdrvChild *source,
BdrvChild *target,
{
BlockCopyState *s;
BdrvDirtyBitmap *copy_bitmap;
+
+ /* Ignore BLOCK_COPY_MAX_COPY_RANGE if requested cluster_size is larger */
uint32_t max_transfer =
- MIN_NON_ZERO(INT_MAX, MIN_NON_ZERO(source->bs->bl.max_transfer,
- target->bs->bl.max_transfer));
+ MIN_NON_ZERO(MAX(cluster_size, BLOCK_COPY_MAX_COPY_RANGE),
+ MIN_NON_ZERO(source->bs->bl.max_transfer,
+ target->bs->bl.max_transfer));
copy_bitmap = bdrv_create_dirty_bitmap(source->bs, cluster_size, NULL,
errp);
--
2.21.0
- [PATCH v3 0/6] block-copy: memory limit, Vladimir Sementsov-Ogievskiy, 2019/10/22
- [PATCH v3 2/6] block/block-copy: limit copy_range_size to 16 MiB,
Vladimir Sementsov-Ogievskiy <=
- [PATCH v3 1/6] block/block-copy: allocate buffer in block_copy_with_bounce_buffer, Vladimir Sementsov-Ogievskiy, 2019/10/22
- [PATCH v3 4/6] util: introduce SharedResource, Vladimir Sementsov-Ogievskiy, 2019/10/22
- [PATCH v3 6/6] block/block-copy: increase buffered copy request, Vladimir Sementsov-Ogievskiy, 2019/10/22
- [PATCH v3 5/6] block/block-copy: add memory limit, Vladimir Sementsov-Ogievskiy, 2019/10/22
- [PATCH v3 3/6] block/block-copy: refactor copying, Vladimir Sementsov-Ogievskiy, 2019/10/22
- Re: [PATCH v3 0/6] block-copy: memory limit, Max Reitz, 2019/10/25