可以使用进程的核心转储实现Checkpoint / restart吗?核心文件包含进程的完整内存转储,因此理论上应该可以 将进程恢复到转储核心时的状态。
答案 0 :(得分:8)
是的,这是可能的。 GNU Emacs这样做是为了优化其启动时间。它加载一堆Lisp文件来生成一个图像,然后转储一个可以重新启动的核心。
几年前,我为GNU Make 3.80创建了一个补丁来完成同样的事情(使用从GNU Emacs借来的代码)。
使用此修补程序,您在make中有了一个新选项:make --dump
。该实用程序现在读取您的Makefile
,然后生成核心转储而不是执行规则,可以重新启动以进行实际构建(评估已解析的规则树)。
这是一个保存,因为项目太大了,所以在源树上加载所有make规则需要30秒!通过这种优化,增量构建几乎立即启动,没有半分钟的启动惩罚。
不需要内核支持。所需要的是有关核心文件结构的知识。
除了这种方法之外,多年前还有针对Linux的流程检查点项目(想知道发生了什么)。
答案 1 :(得分:7)
正如我评论的那样,您可以查找application checkpoint并使用Berkley Lab Checkpoint & Restart之类的库。但是,这些库并不完全使用core(5)转储文件,并且对检查点程序可以执行的操作以及检查点映像中的持久性有多种限制和约定。 (打开文件描述符和网络套接字通常不能保留)。
有些Unix(也许是一些修补过的Linux内核)在内核本身有限制的检查点设施(在20世纪80年代Cray Unix有一些)。
答案 2 :(得分:6)
不,如果没有内核的特别支持,这通常是不可能的。内核维护了很多的每进程状态,例如文件描述符表,IPC对象等。
如果你愿意做很多简化的假设,比如没有打开的文件,没有开放的套接字,没有活的IPC对象,没有共享的内存区域等等,那么在理论上它将是可能,但在实践中,即使有这些让步,我也不相信Linux是可能的。
答案 3 :(得分:0)
Debian有许多你可能想看的软件包:
这与BLCR(伯克利实验室检查点/重启)有关,请参阅https://upc-bugs.lbl.gov/blcr/doc/html/FAQ.html#whatisblcr
criu - 检查点并在用户空间https://criu.org/Main_Page
中恢复2.1 docker - 支持最新版本中的检查点,请参阅https://criu.org/Docker
2.1。 containerd - 守护进程来控制runC
这包含一个有趣的检查点工具。
另请参阅支持实时迁移的openvz: https://openvz.org/Checkpointing_and_live_migration