>> 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_rate_transfer(rs->f, p->packet_len); > >The original code seems forget to update > > ram_counters.multifd_bytes > ram_counters.transferred > >Sounds we need to update these counters here too.
Yes, Thanks for review I'll send a new version with a new patch to fix it. On Mon, Jul 29, 2019 at 2:40 PM Wei Yang <richardw.y...@linux.intel.com> wrote: > On Mon, Jul 29, 2019 at 10:32:53AM +0800, Ivan Ren wrote: > >Limit the speed of multifd migration through common speed limitation > >qemu file. > > > >Signed-off-by: Ivan Ren <ivan...@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..e3fde16776 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_rate_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_rate_transfer(rs->f, p->packet_len); > > The original code seems forget to update > > ram_counters.multifd_bytes > ram_counters.transferred > > Sounds we need to update these counters here too. > > > 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) > > > > -- > Wei Yang > Help you, Help me >