可以检查点/重新启动使用过程中的核心转储实施? 核心文件包含进程的完全内存转储,从而在理论上应该是可能的过程还原到它是当核心被倾倒在相同的状态。
Answer 1:
不,这不是一般的可能,而不从内核特殊支持。 内核维护每个进程状态的LOT,如文件描述符表,IPC对象等
如果你愿意做大量的简化假设,如没有打开的文件,没有开放的插座,没有生活IPC对象,没有共享内存区域,多的,那么在理论上是可能的,但在实践中,我不相信它可能与Linux的,即使那些让步。
Answer 2:
是的,这是可能的。 GNU Emacs的这样做是为了优化其启动时间。 它加载了一堆的Lisp文件来生成一个图像,然后转储可以重新启动核心。
几年前,我创建了GNU补丁让3.80做同样的事情(使用GNU Emacs的借用代码)。
有了这个补丁,你必须做出新的选择: make --dump
。 该实用程序现在可以读取你Makefile
,然后,而不是执行规则,它产生一个核心转储,可以重新开始做实际的构建(解析规则树的评价)。
这是一个节省,因为该项目是如此之大,加载所有的整个源代码树的make规则团队用了30秒! 有了这个优化,增量编译推出几乎立即,没有半分钟启动的处罚。
没有内核支持需要这个。 现在需要的是对核心文件的结构知识。
除了这种方法,有用于Linux的过程中检查点的项目很多年前(不知道发生了什么事来表示)。
Answer 3:
正如我评论,你可以寻找应用程序的检查点 ,并使用像一些库伯克利实验室检查点和重新启动 。 但是,这些库不严格使用一个核心(5)转储文件,并有一些限制和约定的检查点程序可以做什么,到底是什么检查点图像持久性。 (打开的文件描述符和网络插座通常不能持久)。
一些Unix(也许还有一些修补Linux内核)有有限的检查点设施的内核本身(在20世纪80年代的Cray的Unix有一些)。
Answer 4:
Debian有一个数字,你可能想看看包:
- BLCR-UTIL - 用户空间的工具来检查点并重新启动Linux进程
这与BLCR(伯克利实验室检查点/重新启动),见https://upc-bugs.lbl.gov/blcr/doc/html/FAQ.html#whatisblcr
criu -检查站,并在用户空间恢复https://criu.org/Main_Page
2.1泊坞窗-支持检查点在最近的版本中,看到https://criu.org/Docker
2.1。 containerd - 守护进程来控制runC
这包含一个检查点设施,很有趣。
又见OpenVZ的支持实时迁移: https://openvz.org/Checkpointing_and_live_migration