其他常见热迁移工具

1、BLCR
BLCR(全称Berkeley Lab Checkpoint/Restart)提供了用户态的libcr库和kernel module来完成相关的checkpoint/restart工作。
两种方式使用BLCR进行checkpoint:

进程通过cr_run启动
进程在编译时链接libcr库
这俩种方法功能一样,都是让程序在运行前优先加载某个动态链接库(libcr.so或者libcr-run.so),这两个动态库的主要功能就是提前向kernel注册一个信号。BLCR通过在kernel中的cr_module模块向要被checkpoint的进程发送这个信号,来通知进程对自己做checkpoint,真正的checkpoint工作由内核完成。C/R过程由如下两个命令完成:
checkpoint过程:cr_checkpoint PID值
restore过程:cr_restart context.PID值
官网链接:
https://crd.lbl.gov/departments/computer-science/class/research/past-projects/BLCR/
备注:
从官网的信息看,貌似BLCR好像已经停止维护和更新,现在网络上好多人还用此工具进行Android应用的快速启动。
2、 DMTCP
DMTCP(全称Distributed MultiThreaded CheckPointing)以library库的形式实现了对一个进程的checkpoint/restore。这就意味着当使用DMTCP对一个程序热迁移,就要求这个程序之前必须是用DMTCP启动的,这样才能保证DMTCP Library动态库被链接到这个程序。
当使用DMTCP做热迁移时,DMTCP库会截获应用程序中的一定数量的库的调用(代理),构建一个有关进程内部信息的影子数据库,然后将请求转发给glibc/kernel,收集的信息将用于生成应用程序的镜像文件。
DMTCP进行checkpoint的局限性:
(1)这种方法只能作用在checkpoint与DMTCP库一起运行成功的应用程序,但DMTCP不为所有的内核API提供代理,即不支持调用所有的内核API(如inotify()不受支持);
(2)可能因为请求代理而产生潜在的性能问题。
DMTCP进行restoration的局限性:
(1)checkpoint期间,getid()可用于检索进程的PID,但在还原期间没有相应的API来设置进程的PID(fork()系统调用不允许调用制定子进程的PID),DMTCP通过拦截getpid()的库调用并向应用程序提供假的PID值给进程。
危险性:如果应用程序试图通过这个假的PID访问/proc文件系统中的文件,则可能会看到错误的文件。
备注:CRIU为解决这个问题,开发人员添加了一个API,可以用来控制fork()调用选择的PID。
DMTCP源码地址:https://github.com/dmtcp/dmtcp

3、OPENVZ
CRIU起初是Virtuozzo的一个项目,随着开源社区的帮助,现在也被整合到OPENVZ(是Virtuozoo的开源版本)、LXC/LXD、Docker、Podman等软件项目中。

对比分析
对比分析可知,在用户态完成checkpoint/restore功能的工具中,criu是功能最全的,而且支持目前云计算领域最火的docker容器checkpoint/restore,而且criu的社区也是很活跃的。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值