内存热迁移
内存迁移流程
发送流程
migration_thread()
qemu_savevm_state_header
qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
qemu_put_be32(f, QEMU_VM_FILE_VERSION);
qemu_put_be32(f, QEMU_VM_CONFIGURATION);
vmstate_save_state(f, &vmstate_configuration, &savevm_state, 0);
qemu_savevm_send_open_return_path(s->to_dst_file);
qemu_savevm_send_ping(s->to_dst_file, 1);
qemu_savevm_command_send(f, MIG_CMD_PING, , (uint8_t *)&buf)
; iterate savevm_state and call save_setup
qemu_savevm_state_setup(s->to_dst_file);
save_section_header(f, se, QEMU_VM_SECTION_START)
se->ops->save_setup(f, se->opaque)
save_section_footer(f, se)
precopy_notify(PRECOPY_NOTIFY_SETUP, &local_err)
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_ACTIVE);
migration_iteration_run
; iterate savevm_state and call save_live_pending
qemu_savevm_state_pending(pend_pre/compat/post)
se->ops->save_live_pending()
; iterate savevm_state and call save_live_iterate
qemu_savevm_state_iterate()
save_section_header(f, se, QEMU_VM_SECTION_PART)
se->ops->save_live_iterate(f, se->opaque)
save_section_footer(f, se)
migration_completion()
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL);
vm_stop_force_state(RUN_STATE_FINISH_MIGRATE)
qemu_savevm_state_complete_precopy(s->to_dst_file, false, inactivate);
; iterate savevm_state and call save_live_complete_precopy
cpu_synchronize_all_states();
save_section_header(f, se, QEMU_VM_SECTION_END);
se->ops->save_live_complete_precopy(f, se->opaque)
save_section_footer(f, se);
; iterate savevm_state and call vmstate_save
save_section_header(f, se, QEMU_VM_SECTION_FULL);
vmstate_save(f, se, vmdesc)
save_section_footer(f, se);
migration_detect_error
migration_update_counters
migration_iteration_finish接收流程
发送接收对应关系
脏页同步
代码流程
相关数据结构
进化
零页
压缩
多线程
Free Page
multifd
xbzrle
Last updated