文章目录

  • 系列文章目录
  • 第十九章 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)

总结

以上分析了系统初始化过程中迁移对象的初始化过程。