Xen动态迁移源码分析

Xen动态迁移的命令为:

xl migrate 2 192.168.3.102

  命令中的2表示待迁移的虚拟机的DomainID, 后面的为迁移目的地的IP地址。需要注意,Dom0作为一个特殊的虚拟机是不能被迁移的。

  我看的源码版本为xen-4.8.0,虚拟机动态迁移的函数位于tools/libxl/目录下的xl_cmdimpl.c文件中。入后函数是main_migrate函数。
  在main_migrate函数中,首先是一系列的初始化。获取domid,和host的值。然后给rune赋值,以以上的迁移命令为例。则rune初始赋值为:

exec ssh 192.168.3.102 xl -t migrate-receive

  然后main_migrate调用migrate_domain函数。参数主要有domid,rune,debug(0),config_filename。后面两个参数的值,我们不需要太多关心。debug应该是是否调试,一般为0。没有特别的参数config_filename的值一般为NULL。
  在migrate_domain中,首先调用save_domain_core_begin函数读取待迁移虚拟机的config,然后转换格式存储到变量config_data_r中,传输到了函数外。
  接着,调用create_migration_child函数。首先,创建了send和recv两组管道。然后创建一个子进程,。该子进程通过ssh连接到接收端负责接受VM,父进程返回。并且,子进程从send管道中读取数据,并且向recv管道中写入数据。而父进程向send管道中写入数据,并从recv管道中读取数据。子进程连接到接收端以后,继续执行xl -t migrate-receive,对应的函数是main_migrate_reveive。前面是一些参数的处理,可以不管。关键就是最后调用的migrate_receive函数。
  在migrate_receive函数中,首先调用了

CHK_ERRNOVAL(libxl_write_exactly(
                     ctx, send_fd,
                   migrate_receiver_banner,
                     sizeof(migrate_receiver_banner)-1,
                     "migration ack stream", "banner") );

  这个函数忘发送端传送了一串字符串,即migrate_receiver_banner,该字符串定义在文件开头。而发送端,在成功创建了子进程以后,父进程发挥继续执行migrate_do_preamble函数。发送端调用migrate_read_fixedmessage函数接收“虚拟机接受端”发出的信息,并且验证是否正确。如果正确,则调用save_domain_core_writeconfig函数。该函数将config_data_r的配置文件信息传送到接收端。然后接收端开始初始化dom_info, 在create_domain中接收config信息
  未完待续.
-----------------------------

经过几天的实验与阅读,发现这部分代码并没有实现动态迁移的特性,现在的做法类似与save和restore。将虚拟机直接挂起,然后在目的端重新创建虚拟机,并且重新打开正在运行的程序。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值