qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PULL 2/2] block-migration: limit the memory usage


From: Juan Quintela
Subject: [Qemu-devel] [PULL 2/2] block-migration: limit the memory usage
Date: Wed, 25 Nov 2015 15:32:06 +0100

From: Wen Congyang <address@hidden>

If we set migration speed in a very large value, block-migration will try to 
read
all data to the memory. Because
    (block_mig_state.submitted + block_mig_state.read_done) * BLOCK_SIZE
will be overflow, and it will be always less than rate limit.

There is no need to read too many data into memory when the rate limit is very 
large.
So limit the memory usage can fix the overflow problem.

Signed-off-by: Wen Congyang <address@hidden>
Reviewed-by: Juan Quintela <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>
---
 migration/block.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/migration/block.c b/migration/block.c
index 310e2b3..656f38f 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -36,6 +36,8 @@

 #define MAX_IS_ALLOCATED_SEARCH 65536

+#define MAX_INFLIGHT_IO 512
+
 //#define DEBUG_BLK_MIGRATION

 #ifdef DEBUG_BLK_MIGRATION
@@ -665,7 +667,10 @@ static int block_save_iterate(QEMUFile *f, void *opaque)
     blk_mig_lock();
     while ((block_mig_state.submitted +
             block_mig_state.read_done) * BLOCK_SIZE <
-           qemu_file_get_rate_limit(f)) {
+           qemu_file_get_rate_limit(f) &&
+           (block_mig_state.submitted +
+            block_mig_state.read_done) <
+           MAX_INFLIGHT_IO) {
         blk_mig_unlock();
         if (block_mig_state.bulk_completed == 0) {
             /* first finish the bulk phase */
-- 
2.5.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]