Re: [Qemu-devel] [PATCH 7/8] migration: introduce save_normal_page()
On Tue, Mar 13, 2018 at 03:57:38PM +0800, guangrong.x...@gmail.com wrote: > From: Xiao Guangrong > > It directly sends the page to the stream neither checking zero nor > using xbzrle or compression > > Signed-off-by: Xiao Guangrong Reviewed-by: Peter Xu -- Peter Xu
Re: [Qemu-devel] [PATCH 7/8] migration: introduce save_normal_page()
* guangrong.x...@gmail.com (guangrong.x...@gmail.com) wrote: > From: Xiao Guangrong > > It directly sends the page to the stream neither checking zero nor > using xbzrle or compression > > Signed-off-by: Xiao Guangrong Reviewed-by: Dr. David Alan Gilbert > --- > migration/ram.c | 50 ++ > 1 file changed, 30 insertions(+), 20 deletions(-) > > diff --git a/migration/ram.c b/migration/ram.c > index 9627ce18e9..f778627992 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -995,6 +995,34 @@ static bool control_save_page(RAMState *rs, RAMBlock > *block, ram_addr_t offset, > return true; > } > > +/* > + * directly send the page to the stream > + * > + * Returns the number of pages written. > + * > + * @rs: current RAM state > + * @block: block that contains the page we want to send > + * @offset: offset inside the block for the page > + * @buf: the page to be sent > + * @async: send to page asyncly > + */ > +static int save_normal_page(RAMState *rs, RAMBlock *block, ram_addr_t offset, > +uint8_t *buf, bool async) > +{ > +ram_counters.transferred += save_page_header(rs, rs->f, block, > + offset | > RAM_SAVE_FLAG_PAGE); > +if (async) { > +qemu_put_buffer_async(rs->f, buf, TARGET_PAGE_SIZE, > + migrate_release_ram() & > + migration_in_postcopy()); > +} else { > +qemu_put_buffer(rs->f, buf, TARGET_PAGE_SIZE); > +} > +ram_counters.transferred += TARGET_PAGE_SIZE; > +ram_counters.normal++; > +return 1; > +} > + > /** > * ram_save_page: send the given page to the stream > * > @@ -1035,18 +1063,7 @@ static int ram_save_page(RAMState *rs, > PageSearchStatus *pss, bool last_stage) > > /* XBZRLE overflow or normal page */ > if (pages == -1) { > -ram_counters.transferred += > -save_page_header(rs, rs->f, block, offset | RAM_SAVE_FLAG_PAGE); > -if (send_async) { > -qemu_put_buffer_async(rs->f, p, TARGET_PAGE_SIZE, > - migrate_release_ram() & > - migration_in_postcopy()); > -} else { > -qemu_put_buffer(rs->f, p, TARGET_PAGE_SIZE); > -} > -ram_counters.transferred += TARGET_PAGE_SIZE; > -pages = 1; > -ram_counters.normal++; > +pages = save_normal_page(rs, block, offset, p, send_async); > } > > XBZRLE_cache_unlock(); > @@ -1172,14 +1189,7 @@ static int ram_save_compressed_page(RAMState *rs, > PageSearchStatus *pss, > * we post it as normal page as compression will take much > * CPU resource. > */ > -ram_counters.transferred += save_page_header(rs, rs->f, block, > -offset | RAM_SAVE_FLAG_PAGE); > -qemu_put_buffer_async(rs->f, p, TARGET_PAGE_SIZE, > - migrate_release_ram() & > - migration_in_postcopy()); > -ram_counters.transferred += TARGET_PAGE_SIZE; > -ram_counters.normal++; > -pages = 1; > +pages = save_normal_page(rs, block, offset, p, true); > } else { > pages = compress_page_with_multi_thread(rs, block, offset); > } > -- > 2.14.3 > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
[Qemu-devel] [PATCH 7/8] migration: introduce save_normal_page()
From: Xiao Guangrong It directly sends the page to the stream neither checking zero nor using xbzrle or compression Signed-off-by: Xiao Guangrong --- migration/ram.c | 50 ++ 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 9627ce18e9..f778627992 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -995,6 +995,34 @@ static bool control_save_page(RAMState *rs, RAMBlock *block, ram_addr_t offset, return true; } +/* + * directly send the page to the stream + * + * Returns the number of pages written. + * + * @rs: current RAM state + * @block: block that contains the page we want to send + * @offset: offset inside the block for the page + * @buf: the page to be sent + * @async: send to page asyncly + */ +static int save_normal_page(RAMState *rs, RAMBlock *block, ram_addr_t offset, +uint8_t *buf, bool async) +{ +ram_counters.transferred += save_page_header(rs, rs->f, block, + offset | RAM_SAVE_FLAG_PAGE); +if (async) { +qemu_put_buffer_async(rs->f, buf, TARGET_PAGE_SIZE, + migrate_release_ram() & + migration_in_postcopy()); +} else { +qemu_put_buffer(rs->f, buf, TARGET_PAGE_SIZE); +} +ram_counters.transferred += TARGET_PAGE_SIZE; +ram_counters.normal++; +return 1; +} + /** * ram_save_page: send the given page to the stream * @@ -1035,18 +1063,7 @@ static int ram_save_page(RAMState *rs, PageSearchStatus *pss, bool last_stage) /* XBZRLE overflow or normal page */ if (pages == -1) { -ram_counters.transferred += -save_page_header(rs, rs->f, block, offset | RAM_SAVE_FLAG_PAGE); -if (send_async) { -qemu_put_buffer_async(rs->f, p, TARGET_PAGE_SIZE, - migrate_release_ram() & - migration_in_postcopy()); -} else { -qemu_put_buffer(rs->f, p, TARGET_PAGE_SIZE); -} -ram_counters.transferred += TARGET_PAGE_SIZE; -pages = 1; -ram_counters.normal++; +pages = save_normal_page(rs, block, offset, p, send_async); } XBZRLE_cache_unlock(); @@ -1172,14 +1189,7 @@ static int ram_save_compressed_page(RAMState *rs, PageSearchStatus *pss, * we post it as normal page as compression will take much * CPU resource. */ -ram_counters.transferred += save_page_header(rs, rs->f, block, -offset | RAM_SAVE_FLAG_PAGE); -qemu_put_buffer_async(rs->f, p, TARGET_PAGE_SIZE, - migrate_release_ram() & - migration_in_postcopy()); -ram_counters.transferred += TARGET_PAGE_SIZE; -ram_counters.normal++; -pages = 1; +pages = save_normal_page(rs, block, offset, p, true); } else { pages = compress_page_with_multi_thread(rs, block, offset); } -- 2.14.3