【发布时间】:2018-03-06 00:35:21
【问题描述】:
我在使用 criu 和 docker 进行实时检查点和恢复时遇到问题。
目前我使用的是 ubuntu 16.04,我想实现一个功能 让用户检查他们当前的游戏应用程序状态。 例如,用户可以在玩游戏时随时检查点。 但是,当我尝试在 sfml 编写的游戏中使用 criu dump 时,它失败了。
更具体地说,我使用了一个在 ubuntu 16.04 下用 sfml 和 criu 2.x 编写的游戏。当我开始游戏时,我尝试使用 criu 提供的转储功能如下:
criu dump -D img -t 2833 --shell-job --tcp-established --ext-unix-sk --external unix[33323] --external unix[33326] --external unix[33316] --external unix[33317]
似乎 criu 内存和文件转储不支持实时检查某些特定设备,例如视频卡,路径为:/dev/dri/card0。
因此,我修改了 criu 源代码以使其跳过设备的某些部分
当遇到一些不支持的设备时:
criu/parse_proc.c, line 721
但是,当我尝试使用以下命令进行恢复时发生错误:
criu restore -D img -t 2833 --shell-job --tcp-established --ext-unix-sk --inherit-fd fd[10]:socket:[33326] --inherit-fd fd[3]:socket:[33316] --inherit-fd fd[7]:socket:[33317] --inherit-fd fd[8]:pipe:[33323] --inherit-fd fd[9]:pipe:[33323]
错误信息说:
错误 (criu/files.c:1477): 无法 fstat 继承 fd 10: 错误文件 描述符
我认为 docker 也无法处理它,因为它的实时检查点机制是建立在 criu 之上的。 我想知道是否有任何可能的方法来处理它或确实 以前有人在 docker 做过这样的事情吗?
谢谢
【问题讨论】:
-
This is a pretty broad question. 你能把它精简成一个更具体、更细化的问题吗?详细说明失败的原因、修改的内容等会有所帮助。
-
最好编辑你的问题:)
-
谢谢@Blauhirn 我会检查的:)
标签: docker checkpoint