qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration
@ 2019-07-29  8:01 Ivan Ren
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 1/3] migration: add qemu_file_update_transfer interface Ivan Ren
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Ivan Ren @ 2019-07-29  8:01 UTC (permalink / raw)
  To: quintela, dgilbert; +Cc: qemu-devel

Currently multifd migration has not been limited and it will consume
the whole bandwidth of Nic. These two patches add speed limitation to
it.

This is the v2 patches, differences with v1:
1. change qemu_file_update_rate_transfer interface name
   to qemu_file_update_transfer
2. add a new patch to update ram_counters for multifd sync packet

Ivan Ren (3):
  migration: add qemu_file_update_transfer interface
  migration: add speed limit for multifd migration
  migration: update ram_counters for multifd sync packet

 migration/qemu-file.c |  5 +++++
 migration/qemu-file.h |  1 +
 migration/ram.c       | 24 ++++++++++++++----------
 3 files changed, 20 insertions(+), 10 deletions(-)

-- 
2.17.2 (Apple Git-113)



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v2 1/3] migration: add qemu_file_update_transfer interface
  2019-07-29  8:01 [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration Ivan Ren
@ 2019-07-29  8:01 ` Ivan Ren
  2019-07-30  0:41   ` Wei Yang
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 2/3] migration: add speed limit for multifd migration Ivan Ren
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Ivan Ren @ 2019-07-29  8:01 UTC (permalink / raw)
  To: quintela, dgilbert; +Cc: qemu-devel

Add qemu_file_update_transfer for just update bytes_xfer for speed
limitation. This will be used for further migration feature such as
multifd migration.

Signed-off-by: Ivan Ren <ivanren@tencent.com>
---
 migration/qemu-file.c | 5 +++++
 migration/qemu-file.h | 1 +
 2 files changed, 6 insertions(+)

diff --git a/migration/qemu-file.c b/migration/qemu-file.c
index 0431585502..18f480529a 100644
--- a/migration/qemu-file.c
+++ b/migration/qemu-file.c
@@ -615,6 +615,11 @@ void qemu_file_reset_rate_limit(QEMUFile *f)
     f->bytes_xfer = 0;
 }
 
+void qemu_file_update_transfer(QEMUFile *f, int64_t len)
+{
+    f->bytes_xfer += len;
+}
+
 void qemu_put_be16(QEMUFile *f, unsigned int v)
 {
     qemu_put_byte(f, v >> 8);
diff --git a/migration/qemu-file.h b/migration/qemu-file.h
index 13baf896bd..5de9fa2e96 100644
--- a/migration/qemu-file.h
+++ b/migration/qemu-file.h
@@ -147,6 +147,7 @@ int qemu_peek_byte(QEMUFile *f, int offset);
 void qemu_file_skip(QEMUFile *f, int size);
 void qemu_update_position(QEMUFile *f, size_t size);
 void qemu_file_reset_rate_limit(QEMUFile *f);
+void qemu_file_update_transfer(QEMUFile *f, int64_t len);
 void qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate);
 int64_t qemu_file_get_rate_limit(QEMUFile *f);
 void qemu_file_set_error(QEMUFile *f, int ret);
-- 
2.17.2 (Apple Git-113)



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v2 2/3] migration: add speed limit for multifd migration
  2019-07-29  8:01 [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration Ivan Ren
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 1/3] migration: add qemu_file_update_transfer interface Ivan Ren
@ 2019-07-29  8:01 ` Ivan Ren
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 3/3] migration: update ram_counters for multifd sync packet Ivan Ren
  2019-07-30  0:43 ` [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration Wei Yang
  3 siblings, 0 replies; 8+ messages in thread
From: Ivan Ren @ 2019-07-29  8:01 UTC (permalink / raw)
  To: quintela, dgilbert; +Cc: qemu-devel

Limit the speed of multifd migration through common speed limitation
qemu file.

Signed-off-by: Ivan Ren <ivanren@tencent.com>
---
 migration/ram.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/migration/ram.c b/migration/ram.c
index 889148dd84..88ddd2bbe2 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -922,7 +922,7 @@ struct {
  * false.
  */
 
-static int multifd_send_pages(void)
+static int multifd_send_pages(RAMState *rs)
 {
     int i;
     static int next_channel;
@@ -954,6 +954,7 @@ static int multifd_send_pages(void)
     multifd_send_state->pages = p->pages;
     p->pages = pages;
     transferred = ((uint64_t) pages->used) * TARGET_PAGE_SIZE + p->packet_len;
+    qemu_file_update_transfer(rs->f, transferred);
     ram_counters.multifd_bytes += transferred;
     ram_counters.transferred += transferred;;
     qemu_mutex_unlock(&p->mutex);
@@ -962,7 +963,7 @@ static int multifd_send_pages(void)
     return 1;
 }
 
-static int multifd_queue_page(RAMBlock *block, ram_addr_t offset)
+static int multifd_queue_page(RAMState *rs, RAMBlock *block, ram_addr_t offset)
 {
     MultiFDPages_t *pages = multifd_send_state->pages;
 
@@ -981,12 +982,12 @@ static int multifd_queue_page(RAMBlock *block, ram_addr_t offset)
         }
     }
 
-    if (multifd_send_pages() < 0) {
+    if (multifd_send_pages(rs) < 0) {
         return -1;
     }
 
     if (pages->block != block) {
-        return  multifd_queue_page(block, offset);
+        return  multifd_queue_page(rs, block, offset);
     }
 
     return 1;
@@ -1054,7 +1055,7 @@ void multifd_save_cleanup(void)
     multifd_send_state = NULL;
 }
 
-static void multifd_send_sync_main(void)
+static void multifd_send_sync_main(RAMState *rs)
 {
     int i;
 
@@ -1062,7 +1063,7 @@ static void multifd_send_sync_main(void)
         return;
     }
     if (multifd_send_state->pages->used) {
-        if (multifd_send_pages() < 0) {
+        if (multifd_send_pages(rs) < 0) {
             error_report("%s: multifd_send_pages fail", __func__);
             return;
         }
@@ -1083,6 +1084,7 @@ static void multifd_send_sync_main(void)
         p->packet_num = multifd_send_state->packet_num++;
         p->flags |= MULTIFD_FLAG_SYNC;
         p->pending_job++;
+        qemu_file_update_transfer(rs->f, p->packet_len);
         qemu_mutex_unlock(&p->mutex);
         qemu_sem_post(&p->sem);
     }
@@ -2079,7 +2081,7 @@ static int ram_save_page(RAMState *rs, PageSearchStatus *pss, bool last_stage)
 static int ram_save_multifd_page(RAMState *rs, RAMBlock *block,
                                  ram_addr_t offset)
 {
-    if (multifd_queue_page(block, offset) < 0) {
+    if (multifd_queue_page(rs, block, offset) < 0) {
         return -1;
     }
     ram_counters.normal++;
@@ -3482,7 +3484,7 @@ static int ram_save_setup(QEMUFile *f, void *opaque)
     ram_control_before_iterate(f, RAM_CONTROL_SETUP);
     ram_control_after_iterate(f, RAM_CONTROL_SETUP);
 
-    multifd_send_sync_main();
+    multifd_send_sync_main(*rsp);
     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
     qemu_fflush(f);
 
@@ -3570,7 +3572,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque)
     ram_control_after_iterate(f, RAM_CONTROL_ROUND);
 
 out:
-    multifd_send_sync_main();
+    multifd_send_sync_main(rs);
     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
     qemu_fflush(f);
     ram_counters.transferred += 8;
@@ -3629,7 +3631,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
 
     rcu_read_unlock();
 
-    multifd_send_sync_main();
+    multifd_send_sync_main(rs);
     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
     qemu_fflush(f);
 
-- 
2.17.2 (Apple Git-113)



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v2 3/3] migration: update ram_counters for multifd sync packet
  2019-07-29  8:01 [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration Ivan Ren
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 1/3] migration: add qemu_file_update_transfer interface Ivan Ren
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 2/3] migration: add speed limit for multifd migration Ivan Ren
@ 2019-07-29  8:01 ` Ivan Ren
  2019-07-30  0:41   ` Wei Yang
  2019-07-30  0:43 ` [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration Wei Yang
  3 siblings, 1 reply; 8+ messages in thread
From: Ivan Ren @ 2019-07-29  8:01 UTC (permalink / raw)
  To: quintela, dgilbert; +Cc: qemu-devel

Multifd sync will send MULTIFD_FLAG_SYNC flag info to destination, add
these bytes to ram_counters record.

Signed-off-by: Ivan Ren <ivanren@tencent.com>
---
 migration/ram.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/migration/ram.c b/migration/ram.c
index 88ddd2bbe2..20b6eebb7c 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1085,6 +1085,8 @@ static void multifd_send_sync_main(RAMState *rs)
         p->flags |= MULTIFD_FLAG_SYNC;
         p->pending_job++;
         qemu_file_update_transfer(rs->f, p->packet_len);
+        ram_counters.multifd_bytes += p->packet_len;
+        ram_counters.transferred += p->packet_len;
         qemu_mutex_unlock(&p->mutex);
         qemu_sem_post(&p->sem);
     }
-- 
2.17.2 (Apple Git-113)



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v2 1/3] migration: add qemu_file_update_transfer interface
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 1/3] migration: add qemu_file_update_transfer interface Ivan Ren
@ 2019-07-30  0:41   ` Wei Yang
  0 siblings, 0 replies; 8+ messages in thread
From: Wei Yang @ 2019-07-30  0:41 UTC (permalink / raw)
  To: Ivan Ren; +Cc: qemu-devel, dgilbert, quintela

On Mon, Jul 29, 2019 at 04:01:19PM +0800, Ivan Ren wrote:
>Add qemu_file_update_transfer for just update bytes_xfer for speed
>limitation. This will be used for further migration feature such as
>multifd migration.
>
>Signed-off-by: Ivan Ren <ivanren@tencent.com>

Well I have reviewed this patch, suppose you need add my Reviewed-by.

>---
> migration/qemu-file.c | 5 +++++
> migration/qemu-file.h | 1 +
> 2 files changed, 6 insertions(+)
>
>diff --git a/migration/qemu-file.c b/migration/qemu-file.c
>index 0431585502..18f480529a 100644
>--- a/migration/qemu-file.c
>+++ b/migration/qemu-file.c
>@@ -615,6 +615,11 @@ void qemu_file_reset_rate_limit(QEMUFile *f)
>     f->bytes_xfer = 0;
> }
> 
>+void qemu_file_update_transfer(QEMUFile *f, int64_t len)
>+{
>+    f->bytes_xfer += len;
>+}
>+
> void qemu_put_be16(QEMUFile *f, unsigned int v)
> {
>     qemu_put_byte(f, v >> 8);
>diff --git a/migration/qemu-file.h b/migration/qemu-file.h
>index 13baf896bd..5de9fa2e96 100644
>--- a/migration/qemu-file.h
>+++ b/migration/qemu-file.h
>@@ -147,6 +147,7 @@ int qemu_peek_byte(QEMUFile *f, int offset);
> void qemu_file_skip(QEMUFile *f, int size);
> void qemu_update_position(QEMUFile *f, size_t size);
> void qemu_file_reset_rate_limit(QEMUFile *f);
>+void qemu_file_update_transfer(QEMUFile *f, int64_t len);
> void qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate);
> int64_t qemu_file_get_rate_limit(QEMUFile *f);
> void qemu_file_set_error(QEMUFile *f, int ret);
>-- 
>2.17.2 (Apple Git-113)
>

-- 
Wei Yang
Help you, Help me


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v2 3/3] migration: update ram_counters for multifd sync packet
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 3/3] migration: update ram_counters for multifd sync packet Ivan Ren
@ 2019-07-30  0:41   ` Wei Yang
  2019-07-30  2:24     ` Ivan Ren
  0 siblings, 1 reply; 8+ messages in thread
From: Wei Yang @ 2019-07-30  0:41 UTC (permalink / raw)
  To: Ivan Ren; +Cc: qemu-devel, dgilbert, quintela

On Mon, Jul 29, 2019 at 04:01:21PM +0800, Ivan Ren wrote:
>Multifd sync will send MULTIFD_FLAG_SYNC flag info to destination, add
>these bytes to ram_counters record.
>
>Signed-off-by: Ivan Ren <ivanren@tencent.com>

Also this is suggested by me, it would be better to add Suggested-by.

>---
> migration/ram.c | 2 ++
> 1 file changed, 2 insertions(+)
>
>diff --git a/migration/ram.c b/migration/ram.c
>index 88ddd2bbe2..20b6eebb7c 100644
>--- a/migration/ram.c
>+++ b/migration/ram.c
>@@ -1085,6 +1085,8 @@ static void multifd_send_sync_main(RAMState *rs)
>         p->flags |= MULTIFD_FLAG_SYNC;
>         p->pending_job++;
>         qemu_file_update_transfer(rs->f, p->packet_len);
>+        ram_counters.multifd_bytes += p->packet_len;
>+        ram_counters.transferred += p->packet_len;
>         qemu_mutex_unlock(&p->mutex);
>         qemu_sem_post(&p->sem);
>     }
>-- 
>2.17.2 (Apple Git-113)
>

-- 
Wei Yang
Help you, Help me


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration
  2019-07-29  8:01 [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration Ivan Ren
                   ` (2 preceding siblings ...)
  2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 3/3] migration: update ram_counters for multifd sync packet Ivan Ren
@ 2019-07-30  0:43 ` Wei Yang
  3 siblings, 0 replies; 8+ messages in thread
From: Wei Yang @ 2019-07-30  0:43 UTC (permalink / raw)
  To: Ivan Ren; +Cc: qemu-devel, dgilbert, quintela

On Mon, Jul 29, 2019 at 04:01:18PM +0800, Ivan Ren wrote:
>Currently multifd migration has not been limited and it will consume
>the whole bandwidth of Nic. These two patches add speed limitation to
>it.
>
>This is the v2 patches, differences with v1:
>1. change qemu_file_update_rate_transfer interface name
>   to qemu_file_update_transfer
>2. add a new patch to update ram_counters for multifd sync packet

Usually we cc those who gave us comment.

>
>Ivan Ren (3):
>  migration: add qemu_file_update_transfer interface
>  migration: add speed limit for multifd migration
>  migration: update ram_counters for multifd sync packet
>
> migration/qemu-file.c |  5 +++++
> migration/qemu-file.h |  1 +
> migration/ram.c       | 24 ++++++++++++++----------
> 3 files changed, 20 insertions(+), 10 deletions(-)
>
>-- 
>2.17.2 (Apple Git-113)
>

-- 
Wei Yang
Help you, Help me


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v2 3/3] migration: update ram_counters for multifd sync packet
  2019-07-30  0:41   ` Wei Yang
@ 2019-07-30  2:24     ` Ivan Ren
  0 siblings, 0 replies; 8+ messages in thread
From: Ivan Ren @ 2019-07-30  2:24 UTC (permalink / raw)
  To: Wei Yang; +Cc: qemu-devel, dgilbert, quintela

Thanks
I'll send a new version with these suggest info and review info.

On Tue, Jul 30, 2019 at 8:42 AM Wei Yang <richardw.yang@linux.intel.com>
wrote:

> On Mon, Jul 29, 2019 at 04:01:21PM +0800, Ivan Ren wrote:
> >Multifd sync will send MULTIFD_FLAG_SYNC flag info to destination, add
> >these bytes to ram_counters record.
> >
> >Signed-off-by: Ivan Ren <ivanren@tencent.com>
>
> Also this is suggested by me, it would be better to add Suggested-by.
>
> >---
> > migration/ram.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> >diff --git a/migration/ram.c b/migration/ram.c
> >index 88ddd2bbe2..20b6eebb7c 100644
> >--- a/migration/ram.c
> >+++ b/migration/ram.c
> >@@ -1085,6 +1085,8 @@ static void multifd_send_sync_main(RAMState *rs)
> >         p->flags |= MULTIFD_FLAG_SYNC;
> >         p->pending_job++;
> >         qemu_file_update_transfer(rs->f, p->packet_len);
> >+        ram_counters.multifd_bytes += p->packet_len;
> >+        ram_counters.transferred += p->packet_len;
> >         qemu_mutex_unlock(&p->mutex);
> >         qemu_sem_post(&p->sem);
> >     }
> >--
> >2.17.2 (Apple Git-113)
> >
>
> --
> Wei Yang
> Help you, Help me
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-07-30  2:25 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-29  8:01 [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration Ivan Ren
2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 1/3] migration: add qemu_file_update_transfer interface Ivan Ren
2019-07-30  0:41   ` Wei Yang
2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 2/3] migration: add speed limit for multifd migration Ivan Ren
2019-07-29  8:01 ` [Qemu-devel] [PATCH v2 3/3] migration: update ram_counters for multifd sync packet Ivan Ren
2019-07-30  0:41   ` Wei Yang
2019-07-30  2:24     ` Ivan Ren
2019-07-30  0:43 ` [Qemu-devel] [PATCH v2 0/3] migration: add speed limit for multifd migration Wei Yang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).