文章目录
- 系列文章目录
- 第十九章 QEMU系统仿真的机器创建分析实例
- 前言
- 一、QEMU是什么?
- 二、QEMU系统仿真的机器创建分析实例
- 1.系统仿真的命令行参数
- 2.迁移对象初始化
- migration_object_init()
- migration_object_check()
- blk_mig_init()
- ram_mig_init()
- dirty_bitmap_mig_init()
- 3.调试输出
- 总结
前言
本文以 QEMU 8.2.2 为例,分析其作为系统仿真工具的工作过程,并为读者展示各种 QEMU 系统仿真的启动配置实例。
本文读者需要具备一定的 QEMU 系统仿真使用经验,并对 C 语言编程有一定了解。
一、QEMU是什么?
QEMU 是一个通用且开源的机器模拟器和虚拟机。
其官方主页是:https://www.qemu.org/
二、QEMU系统仿真的机器创建分析实例
1.系统仿真的命令行参数
QEMU 作为系统仿真工具,其入口代码在 system/main.c 文件中,初始化函数 qemu_init() 的实现在 system/vl.c 文件中。
前文完成创建目标机器的过程分析,本文将继续后续运行过程的分析,读者需要对 QEMU 系统启动过程的程序代码有所了解,相关内容可以参考《QEMU系统分析之启动篇》系列文章。
..\qemu\8.2.2-qkd\qemu-system-x86_64.exe -cpu "Penryn" -M "q35,accel=whpx,smm=off" -m "6G" -display "sdl" -audio "sdl,model=hda" -vga "std" -L "data"
2.迁移对象初始化
这部分代码在 system/vl.c 文件中,实现如下:
int qemu_init(int argc, char **argv)
{
...
/*
* Note: creates a QOM object, must run only after global and
* compat properties have been set up.
*/
migration_object_init();
...
}
前文分析了创建后期后端驱动的过程,本文继续完成迁移对象的初始化过程。
migration_object_init()
函数 migration_object_init() 代码如下:
void migration_object_init(void)
{
/* This can only be called once. */
assert(!current_migration);
current_migration = MIGRATION_OBJ(object_new(TYPE_MIGRATION));
/*
* Init the migrate incoming object as well no matter whether
* we'll use it or not.
*/
assert(!current_incoming);
current_incoming = g_new0(MigrationIncomingState, 1);
current_incoming->state = MIGRATION_STATUS_NONE;
current_incoming->postcopy_remote_fds =
g_array_new(FALSE, TRUE, sizeof(struct PostCopyFD));
qemu_mutex_init(¤t_incoming->rp_mutex);
qemu_mutex_init(¤t_incoming->postcopy_prio_thread_mutex);
qemu_event_init(¤t_incoming->main_thread_load_event, false);
qemu_sem_init(¤t_incoming->postcopy_pause_sem_dst, 0);
qemu_sem_init(¤t_incoming->postcopy_pause_sem_fault, 0);
qemu_sem_init(¤t_incoming->postcopy_pause_sem_fast_load, 0);
qemu_sem_init(¤t_incoming->postcopy_qemufile_dst_done, 0);
qemu_mutex_init(¤t_incoming->page_request_mutex);
qemu_cond_init(¤t_incoming->page_request_cond);
current_incoming->page_requested = g_tree_new(page_request_addr_cmp);
migration_object_check(current_migration, &error_fatal);
blk_mig_init();
ram_mig_init();
dirty_bitmap_mig_init();
}
首先,调用函数 migrate_params_check(),代码如下:
migration_object_check()
代码如下:
/*
* Check whether the parameters are valid. Error will be put into errp
* (if provided). Return true if valid, otherwise false.
*/
bool migrate_params_check(MigrationParameters *params, Error **errp)
{
if (params->has_compress_level &&
(params->compress_level > 9)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "compress_level",
"a value between 0 and 9");
return false;
}
if (params->has_compress_threads && (params->compress_threads < 1)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"compress_threads",
"a value between 1 and 255");
return false;
}
if (params->has_decompress_threads && (params->decompress_threads < 1)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"decompress_threads",
"a value between 1 and 255");
return false;
}
if (params->has_throttle_trigger_threshold &&
(params->throttle_trigger_threshold < 1 ||
params->throttle_trigger_threshold > 100)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"throttle_trigger_threshold",
"an integer in the range of 1 to 100");
return false;
}
if (params->has_cpu_throttle_initial &&
(params->cpu_throttle_initial < 1 ||
params->cpu_throttle_initial > 99)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"cpu_throttle_initial",
"an integer in the range of 1 to 99");
return false;
}
if (params->has_cpu_throttle_increment &&
(params->cpu_throttle_increment < 1 ||
params->cpu_throttle_increment > 99)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"cpu_throttle_increment",
"an integer in the range of 1 to 99");
return false;
}
if (params->has_max_bandwidth && (params->max_bandwidth > SIZE_MAX)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"max_bandwidth",
"an integer in the range of 0 to "stringify(SIZE_MAX)
" bytes/second");
return false;
}
if (params->has_avail_switchover_bandwidth &&
(params->avail_switchover_bandwidth > SIZE_MAX)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"avail_switchover_bandwidth",
"an integer in the range of 0 to "stringify(SIZE_MAX)
" bytes/second");
return false;
}
if (params->has_downtime_limit &&
(params->downtime_limit > MAX_MIGRATE_DOWNTIME)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"downtime_limit",
"an integer in the range of 0 to "
stringify(MAX_MIGRATE_DOWNTIME)" ms");
return false;
}
/* x_checkpoint_delay is now always positive */
if (params->has_multifd_channels && (params->multifd_channels < 1)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"multifd_channels",
"a value between 1 and 255");
return false;
}
if (params->has_multifd_zlib_level &&
(params->multifd_zlib_level > 9)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zlib_level",
"a value between 0 and 9");
return false;
}
if (params->has_multifd_zstd_level &&
(params->multifd_zstd_level > 20)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "multifd_zstd_level",
"a value between 0 and 20");
return false;
}
if (params->has_xbzrle_cache_size &&
(params->xbzrle_cache_size < qemu_target_page_size() ||
!is_power_of_2(params->xbzrle_cache_size))) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"xbzrle_cache_size",
"a power of two no less than the target page size");
return false;
}
if (params->has_max_cpu_throttle &&
(params->max_cpu_throttle < params->cpu_throttle_initial ||
params->max_cpu_throttle > 99)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"max_cpu_throttle",
"an integer in the range of cpu_throttle_initial to 99");
return false;
}
if (params->has_announce_initial &&
params->announce_initial > 100000) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"announce_initial",
"a value between 0 and 100000");
return false;
}
if (params->has_announce_max &&
params->announce_max > 100000) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"announce_max",
"a value between 0 and 100000");
return false;
}
if (params->has_announce_rounds &&
params->announce_rounds > 1000) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"announce_rounds",
"a value between 0 and 1000");
return false;
}
if (params->has_announce_step &&
(params->announce_step < 1 ||
params->announce_step > 10000)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"announce_step",
"a value between 0 and 10000");
return false;
}
if (params->has_block_bitmap_mapping &&
!check_dirty_bitmap_mig_alias_map(params->block_bitmap_mapping, errp)) {
error_prepend(errp, "Invalid mapping given for block-bitmap-mapping: ");
return false;
}
#ifdef CONFIG_LINUX
if (migrate_zero_copy_send() &&
((params->has_multifd_compression && params->multifd_compression) ||
(params->tls_creds && *params->tls_creds))) {
error_setg(errp,
"Zero copy only available for non-compressed non-TLS multifd migration");
return false;
}
#endif
if (params->has_x_vcpu_dirty_limit_period &&
(params->x_vcpu_dirty_limit_period < 1 ||
params->x_vcpu_dirty_limit_period > 1000)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"x-vcpu-dirty-limit-period",
"a value between 1 and 1000");
return false;
}
if (params->has_vcpu_dirty_limit &&
(params->vcpu_dirty_limit < 1)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"vcpu_dirty_limit",
"is invalid, it must greater then 1 MB/s");
return false;
}
return true;
}
然后,调用函数 blk_mig_init() 完成块设备的迁移初始化,代码如下:
blk_mig_init()
代码如下:
void blk_mig_init(void)
{
QSIMPLEQ_INIT(&block_mig_state.bmds_list);
QSIMPLEQ_INIT(&block_mig_state.blk_list);
qemu_mutex_init(&block_mig_state.lock);
register_savevm_live("block", 0, 1, &savevm_block_handlers,
&block_mig_state);
}
跟踪进入函数 register_savevm_live() ,代码如下:
/* TODO: Individual devices generally have very little idea about the rest
of the system, so instance_id should be removed/replaced.
Meanwhile pass -1 as instance_id if you do not already have a clearly
distinguishing id for all instances of your device class. */
int register_savevm_live(const char *idstr,
uint32_t instance_id,
int version_id,
const SaveVMHandlers *ops,
void *opaque)
{
SaveStateEntry *se;
se = g_new0(SaveStateEntry, 1);
se->version_id = version_id;
se->section_id = savevm_state.global_section_id++;
se->ops = ops;
se->opaque = opaque;
se->vmsd = NULL;
/* if this is a live_savem then set is_ram */
if (ops->save_setup != NULL) {
se->is_ram = 1;
}
pstrcat(se->idstr, sizeof(se->idstr), idstr);
if (instance_id == VMSTATE_INSTANCE_ID_ANY) {
se->instance_id = calculate_new_instance_id(se->idstr);
} else {
se->instance_id = instance_id;
}
assert(!se->compat || se->instance_id == 0);
savevm_state_handler_insert(se);
return 0;
}
ram_mig_init()
接着对内存迁移初始化,代码如下:
void ram_mig_init(void)
{
qemu_mutex_init(&XBZRLE.lock);
register_savevm_live("ram", 0, 4, &savevm_ram_handlers, &ram_state);
ram_block_notifier_add(&ram_mig_ram_notifier);
}
dirty_bitmap_mig_init()
最后,对脏位图迁移初始化,代码如下:
void dirty_bitmap_mig_init(void)
{
QSIMPLEQ_INIT(&dbm_state.save.dbms_list);
qemu_mutex_init(&dbm_state.load.lock);
register_savevm_live("dirty-bitmap", 0, 1,
&savevm_dirty_bitmap_handlers,
&dbm_state);
}
3.调试输出
首先,添加跟踪调试信息,修改后的代码如下:
int qemu_init(int argc, char **argv)
{
...
/*
* Note: creates a QOM object, must run only after global and
* compat properties have been set up.
*/
huedbg_flag = 1;
HUEDBG("\n");
migration_object_init();
HUEDBG("\n");
huedbg_flag = 0;
...
}
void migration_object_init(void)
{
HUEDBG("enter\n");
...
HUEDBG("\n");
migration_object_check(current_migration, &error_fatal);
if (current_migration) {
huedbg_dump_MigrationState(current_migration, 9);
}
HUEDBG("\n");
blk_mig_init();
HUEDBG("\n");
ram_mig_init();
HUEDBG("\n");
dirty_bitmap_mig_init();
HUEDBG("exit\n");
}
void blk_mig_init(void)
{
QSIMPLEQ_INIT(&block_mig_state.bmds_list);
QSIMPLEQ_INIT(&block_mig_state.blk_list);
qemu_mutex_init(&block_mig_state.lock);
register_savevm_live("block", 0, 1, &savevm_block_handlers,
&block_mig_state);
if (block_mig_state) {
huedbg_dump_BlkMigState(block_mig_state, 9);
}
}
void ram_mig_init(void)
{
qemu_mutex_init(&XBZRLE.lock);
register_savevm_live("ram", 0, 4, &savevm_ram_handlers, &ram_state);
ram_block_notifier_add(&ram_mig_ram_notifier);
if (ram_state) {
huedbg_dump_RAMState(ram_state, 9);
}
}
void dirty_bitmap_mig_init(void)
{
QSIMPLEQ_INIT(&dbm_state.save.dbms_list);
qemu_mutex_init(&dbm_state.load.lock);
register_savevm_live("dirty-bitmap", 0, 1,
&savevm_dirty_bitmap_handlers,
&dbm_state);
huedbg_dump_DBMState(&dbm_state, 9);
}
运行后,输出信息如下:
[15556]../system/vl.c/qemu_init(3860):
[15556]../migration/migration.c/migration_object_init(178):enter
[15556]../qom/object.c/type_table_lookup(103):lookup type(migration) in hash table
[15556]../qom/object.c/object_new_with_type(789):try type_initialize(migration)
[15556]../qom/object.c/object_new_with_type(799):obj(migration) alloc
[15556]../qom/object.c/object_new_with_type(808):try object_initialize_with_type(migration)
[15556]../qom/object.c/object_initialize_with_type(568):obj with type(migration) enter
[15556]../qom/object.c/object_initialize_with_type(576):mapping obj(migration).class with type(migration).class
[15556]../qom/object.c/object_initialize_with_type(579):try object_class_property_init_all(migration)
[15556]../qom/object.c/object_class_property_init_all(552):obj(migration) enter
[15556]../qom/object.c/object_class_property_iter_init(1440):objclass{migration} enter
[15556]../qom/object.c/object_class_get_parent(1130):enter
[15556]../qom/object.c/type_get_parent(194):parent_type(device)
[15556]../qom/object.c/object_class_get_parent(1138):objclass(migration) has parent(device)
[15556]../qom/object.c/object_class_get_parent(1141):objclass(migration) return
[15556]../qom/object.c/object_class_property_iter_init(1443):objclass{migration} return
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[max-cpu-throttle] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(max-cpu-throttle) init()
[15556]../qom/object.c/type_table_lookup(103):lookup type(device) in hash table
[15556]../qom/object.c/type_get_parent(194):parent_type(object)
[15556]../qom/object.c/type_get_parent(196):no parent_type
[15556]../qom/object.c/type_get_parent(194):parent_type(device)
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(max-cpu-throttle) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-zero-blocks] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-zero-blocks) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-zero-blocks) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-colo] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-colo) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-colo) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-switchover-ack] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-switchover-ack) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-switchover-ack) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[xbzrle-cache-size] type=[size] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(xbzrle-cache-size) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(xbzrle-cache-size) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[store-global-state] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(store-global-state) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(store-global-state) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[announce-max] type=[size] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(announce-max) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(announce-max) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-background-snapshot] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-background-snapshot) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-background-snapshot) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[max-postcopy-bandwidth] type=[size] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(max-postcopy-bandwidth) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(max-postcopy-bandwidth) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-downtime-limit] type=[uint64] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-downtime-limit) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-downtime-limit) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-cpu-throttle-tailslow] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-cpu-throttle-tailslow) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-cpu-throttle-tailslow) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-decompress-threads] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-decompress-threads) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-decompress-threads) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-rdma-pin-all] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-rdma-pin-all) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-rdma-pin-all) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[mode] type=[MigMode] desc=[mig_mode values, normal,cpr-reboot] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(mode) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(mode) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[announce-initial] type=[size] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(announce-initial) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(announce-initial) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-clear-bitmap-shift] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-clear-bitmap-shift) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-clear-bitmap-shift) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-throttle-trigger-threshold] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-throttle-trigger-threshold) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-throttle-trigger-threshold) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-cpu-throttle-increment] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-cpu-throttle-increment) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-cpu-throttle-increment) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-checkpoint-delay] type=[uint32] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-checkpoint-delay) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-checkpoint-delay) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[decompress-error-check] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(decompress-error-check) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(decompress-error-check) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-preempt-pre-7-2] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-preempt-pre-7-2) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-preempt-pre-7-2) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[tls-authz] type=[str] desc=[(null)] init=[0000000000000000]
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[multifd-zstd-level] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(multifd-zstd-level) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(multifd-zstd-level) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-xbzrle] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-xbzrle) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-xbzrle) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-events] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-events) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-events) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-vcpu-dirty-limit-period] type=[uint64] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-vcpu-dirty-limit-period) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-vcpu-dirty-limit-period) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[multifd-flush-after-each-section] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(multifd-flush-after-each-section) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(multifd-flush-after-each-section) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[multifd-zlib-level] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(multifd-zlib-level) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(multifd-zlib-level) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-cpu-throttle-initial] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-cpu-throttle-initial) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-cpu-throttle-initial) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[vcpu-dirty-limit] type=[uint64] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(vcpu-dirty-limit) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(vcpu-dirty-limit) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[tls-creds] type=[str] desc=[(null)] init=[0000000000000000]
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[multifd-compression] type=[MultiFDCompression] desc=[multifd_compression values, none/zlib/zstd] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(multifd-compression) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(multifd-compression) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-compress-wait-thread] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-compress-wait-thread) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-compress-wait-thread) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[announce-rounds] type=[size] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(announce-rounds) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(announce-rounds) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-compress-level] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-compress-level) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-compress-level) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-multifd] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-multifd) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-multifd) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[send-configuration] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(send-configuration) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(send-configuration) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[multifd-channels] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(multifd-channels) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(multifd-channels) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[send-section-footer] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(send-section-footer) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(send-section-footer) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-max-bandwidth] type=[size] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-max-bandwidth) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-max-bandwidth) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[tls-hostname] type=[str] desc=[(null)] init=[0000000000000000]
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-dirty-limit] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-dirty-limit) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-dirty-limit) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[announce-step] type=[size] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(announce-step) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(announce-step) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-compress-threads] type=[uint8] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-compress-threads) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-compress-threads) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[avail-switchover-bandwidth] type=[size] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(avail-switchover-bandwidth) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(avail-switchover-bandwidth) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-auto-converge] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-auto-converge) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-auto-converge) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-postcopy-preempt] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-postcopy-preempt) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-postcopy-preempt) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-postcopy-ram] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-postcopy-ram) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-postcopy-ram) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-release-ram] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-release-ram) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-release-ram) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-compress] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-compress) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-compress) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-return-path] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-return-path) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-return-path) init()
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[x-block] type=[bool] desc=[(null)] init=[00007ff767f1d580]
[15556]../qom/object.c/object_class_property_init_all(558):before obj(migration).prop(x-block) init()
[15556]../qom/object.c/object_class_property_init_all(560):after obj(migration).prop(x-block) init()
[15556]../qom/object.c/object_class_get_parent(1130):enter
[15556]../qom/object.c/type_get_parent(194):parent_type(object)
[15556]../qom/object.c/object_class_get_parent(1138):objclass(device) has parent(object)
[15556]../qom/object.c/object_class_get_parent(1141):objclass(device) return
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[hotpluggable] type=[bool] desc=[(null)] init=[0000000000000000]
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[hotplugged] type=[bool] desc=[(null)] init=[0000000000000000]
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[realized] type=[bool] desc=[(null)] init=[0000000000000000]
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[parent_bus] type=[link<bus>] desc=[(null)] init=[0000000000000000]
[15556]../qom/object.c/object_class_get_parent(1130):enter
[15556]../qom/object.c/type_get_parent(196):no parent_type
[15556]../qom/object.c/object_class_get_parent(1134):objclass(object) has no parent return
[15556]../qom/object.c/object_class_property_init_all(555):prop name=[type] type=[string] desc=[(null)] init=[0000000000000000]
[15556]../qom/object.c/object_class_property_init_all(563):obj(migration) return
[15556]../qom/object.c/object_initialize_with_type(583):try object_init_with_type(migration)
[15556]../qom/object.c/object_init_with_type(416):obj->class->type->name=[migration] ti->name=[migration] enter
[15556]../qom/object.c/type_get_parent(194):parent_type(device)
[15556]../qom/object.c/object_init_with_type(416):obj->class->type->name=[migration] ti->name=[device] enter
[15556]../qom/object.c/type_get_parent(194):parent_type(object)
[15556]../qom/object.c/object_init_with_type(416):obj->class->type->name=[migration] ti->name=[object] enter
[15556]../qom/object.c/object_init_with_type(427):obj->class->type->name=[migration] ti->name=[object] return
[15556]../qom/object.c/object_init_with_type(423):name=[device] ti->instance_init() before
[15556]../qom/object.c/type_table_lookup(103):lookup type(device) in hash table
[15556]../qom/object.c/type_get_parent(194):parent_type(object)
[15556]../qom/object.c/type_get_parent(196):no parent_type
[15556]../qom/object.c/type_get_parent(194):parent_type(device)
[15556]../qom/object.c/object_init_with_type(425):name=[device] ti->instance_init() after
[15556]../qom/object.c/object_init_with_type(427):obj->class->type->name=[migration] ti->name=[device] return
[15556]../qom/object.c/object_init_with_type(423):name=[migration] ti->instance_init() before
[15556]../qom/object.c/type_table_lookup(103):lookup type(migration) in hash table
[15556]../qom/object.c/type_get_parent(194):parent_type(device)
[15556]../qom/object.c/type_get_parent(194):parent_type(object)
[15556]../qom/object.c/type_get_parent(196):no parent_type
[15556]../qom/object.c/object_init_with_type(425):name=[migration] ti->instance_init() after
[15556]../qom/object.c/object_init_with_type(427):obj->class->type->name=[migration] ti->name=[migration] return
[15556]../qom/object.c/object_initialize_with_type(585):try object_post_init_with_type(migration)
[15556]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[migration] ti->name=[migration] enter
[15556]../qom/object.c/type_get_parent(194):parent_type(device)
[15556]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[migration] ti->name=[device] enter
[15556]../qom/object.c/object_post_init_with_type(436):name=[device] ti->instance_post_init() before
[15556]../qom/object.c/object_post_init_with_type(438):name=[device] ti->instance_post_init() after
[15556]../qom/object.c/type_get_parent(194):parent_type(object)
[15556]../qom/object.c/object_post_init_with_type(433):obj->class->type->name=[migration] ti->name=[object] enter
[15556]../qom/object.c/object_post_init_with_type(444):return
[15556]../qom/object.c/object_post_init_with_type(444):return
[15556]../qom/object.c/object_post_init_with_type(444):return
[15556]../qom/object.c/object_initialize_with_type(587):obj(migration) return
[15556]../qom/object.c/object_new_with_type(812):obj(migration) return
[15556]../migration/migration.c/migration_object_init(204):
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(242):<<<deep>>>=[9] s=[000001de99f946b0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(246):thread.data=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(247):thread.tid=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(248):vm_start_bh=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(249):cleanup_bh=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(250):to_dst_file=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(251):postcopy_qemufile_src=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(252):postcopy_qemufile_src_sem.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(253):bioc=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(254):qemu_file_lock.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(255):rate_limit_sem.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(256):iteration_initial_pages=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(257):pages_per_second=[-1.000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(258):iteration_initial_bytes=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(259):iteration_start_time=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(261):threshold_size=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(263):parameters=[p(000001de99f947e0)]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(138):<<<deep>>>=[8] params=[000001de99f947e0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(140):has_announce_initial=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(141):announce_initial=[50]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(142):has_announce_max=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(143):announce_max=[550]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(144):has_announce_rounds=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(145):announce_rounds=[5]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(146):has_announce_step=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(147):announce_step=[100]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(148):has_compress_level=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(149):compress_level=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(150):has_compress_threads=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(151):compress_threads=[8]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(152):has_decompress_threads=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(153):decompress_threads=[2]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(154):has_throttle_trigger_threshold=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(155):throttle_trigger_threshold=[50]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(156):has_cpu_throttle_initial=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(157):cpu_throttle_initial=[20]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(158):has_cpu_throttle_increment=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(159):cpu_throttle_increment=[10]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(160):has_cpu_throttle_tailslow=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(161):cpu_throttle_tailslow=[0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(162):tls_creds=[]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(163):tls_hostname=[]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(164):tls_authz=[(null)]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(165):has_max_bandwidth=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(166):max_bandwidth=[134217728]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(167):has_max_bandwidth=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(168):max_bandwidth=[134217728]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(169):has_avail_switchover_bandwidth=[0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(170):avail_switchover_bandwidth=[0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(171):has_downtime_limit=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(172):downtime_limit=[300]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(173):has_x_checkpoint_delay=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(174):x_checkpoint_delay=[20000]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(175):has_block_incremental=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(176):block_incremental=[0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(177):has_multifd_channels=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(178):multifd_channels=[2]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(179):has_xbzrle_cache_size=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(180):xbzrle_cache_size=[67108864]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(181):has_max_postcopy_bandwidth=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(182):max_postcopy_bandwidth=[0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(183):has_max_cpu_throttle=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(184):max_cpu_throttle=[99]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(185):has_multifd_compression=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(186):multifd_compression=[0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MultiFDCompression(28):<<<deep>>>=[7] c=[0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MultiFDCompression(36):[0]=[none]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(190):has_multifd_zlib_level=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(191):multifd_zlib_level=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(192):has_multifd_zstd_level=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(193):multifd_zstd_level=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(194):has_block_bitmap_mapping=[0]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(195):block_bitmap_mapping=[0000000000000000]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(199):has_x_vcpu_dirty_limit_period=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(200):x_vcpu_dirty_limit_period=[1000]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(201):has_vcpu_dirty_limit=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(202):vcpu_dirty_limit=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(203):has_mode=[1]
[15556]../util/huedbg-types-migration.c/huedbg_dump_MigrationParameters(204):mode=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(268):state=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(270):rp_state.from_dst_file=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(271):rp_state.rp_thread.tid=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(272):rp_state.rp_thread_created=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(273):rp_state.rp_sem.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(274):rp_state.rp_pong_acks.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(276):mbps=[-1.000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(277):start_time=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(278):total_time=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(279):downtime_start=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(280):downtime=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(281):expected_downtime=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[0]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[1]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[2]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[3]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[4]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[5]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[6]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[7]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[8]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[9]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[10]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[11]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[12]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[13]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[14]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[15]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[16]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[17]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[18]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[19]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[20]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[21]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(283):capabilities[22]=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(285):setup_time=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(287):vm_old_state=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(289):start_postcopy=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(290):postcopy_after_devices=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(292):migration_thread_running=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(294):block_inactive=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(296):wait_unplug_sem.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(298):pause_sem.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(300):colo_exit_sem.initialized=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(302):colo_checkpoint_event.value=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(303):colo_checkpoint_event.initialized=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(304):colo_checkpoint_time=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(305):colo_delay_timer=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(307):error=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(308):error_mutex.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(309):must_remove_block_options=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(311):store_global_state=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(313):send_configuration=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(314):send_section_footer=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(316):postcopy_pause_sem.initialized=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(318):decompress_error_check=[1]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(320):preempt_pre_7_2=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(322):multifd_flush_after_each_section=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(324):clear_bitmap_shift=[18]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(326):hostname=[(null)]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(328):vmdesc=[0000000000000000]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(330):switchover_acked=[0]
[15556]../util/huedbg-migration.c/huedbg_dump_MigrationState(331):rdma_migration=[0]
[15556]../migration/migration.c/migration_object_init(210):
[15556]../migration/migration.c/migration_object_init(212):
[15556]../migration/migration.c/migration_object_init(214):
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMState(93):<<<deep>>>=[9] dbms=[00007ff768e09080]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMState(95):save=[p(00007ff768e09080)]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMSaveState(26):<<<deep>>>=[8] save=[00007ff768e09080]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMSaveState(28):dbms_list=[p(00007ff768e09080)]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMSaveState(29):bulk_completed=[0]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMSaveState(30):no_bitmaps=[0]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMSaveState(32):prev_bs=[p(0000000000000000)]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMSaveState(33):prev_bitmap=[p(0000000000000000)]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMState(99):load=[p(00007ff768e090a8)]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(66):<<<deep>>>=[8] load=[00007ff768e090a8]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(68):flags=[0]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(69):node_alias=[]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(70):bitmap_alias=[]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(71):bitmap_name=[]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(72):bs=[0000000000000000]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(73):bitmap=[0000000000000000]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(75):before_vm_start_handled=[0]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(76):bmap_inner=[0000000000000000]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(78):cancelled=[0]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(80):bitmaps=[0000000000000000]
[15556]D:/msys64/home/yuhui/gitee/mingw-qemu/util/huedbg_inline-migration_block-dirty-bitmap.c/huedbg_dump_DBMLoadState(81):lock.initialized=[1]
[15556]../migration/migration.c/migration_object_init(216):exit
[15556]../system/vl.c/qemu_init(3862)
总结
以上分析了系统初始化过程中迁移对象的初始化过程。