mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
migration/ram: avoid to do log clear in the last round
There won't be any ram sync after the stage of save_complete, therefore it's unnecessary to do manually protect for dirty pages being sent. Skip to do this in last round can reduce noticeable downtime. Signed-off-by: Yanfei Xu <yanfei.xu@bytedance.com> Tested-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/20250514115827.3216082-1-yanfei.xu@bytedance.com [peterx: add comments] Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
+15
-7
@@ -831,14 +831,22 @@ static inline bool migration_bitmap_clear_dirty(RAMState *rs,
|
||||
bool ret;
|
||||
|
||||
/*
|
||||
* Clear dirty bitmap if needed. This _must_ be called before we
|
||||
* send any of the page in the chunk because we need to make sure
|
||||
* we can capture further page content changes when we sync dirty
|
||||
* log the next time. So as long as we are going to send any of
|
||||
* the page in the chunk we clear the remote dirty bitmap for all.
|
||||
* Clearing it earlier won't be a problem, but too late will.
|
||||
* During the last stage (after source VM stopped), resetting the write
|
||||
* protections isn't needed as we know there will be either (1) no
|
||||
* further writes if migration will complete, or (2) migration fails
|
||||
* at last then tracking isn't needed either.
|
||||
*/
|
||||
migration_clear_memory_region_dirty_bitmap(rb, page);
|
||||
if (!rs->last_stage) {
|
||||
/*
|
||||
* Clear dirty bitmap if needed. This _must_ be called before we
|
||||
* send any of the page in the chunk because we need to make sure
|
||||
* we can capture further page content changes when we sync dirty
|
||||
* log the next time. So as long as we are going to send any of
|
||||
* the page in the chunk we clear the remote dirty bitmap for all.
|
||||
* Clearing it earlier won't be a problem, but too late will.
|
||||
*/
|
||||
migration_clear_memory_region_dirty_bitmap(rb, page);
|
||||
}
|
||||
|
||||
ret = test_and_clear_bit(page, rb->bmap);
|
||||
if (ret) {
|
||||
|
||||
Reference in New Issue
Block a user