带有criu或docker的实时检查站,用于游戏应用程序

时间:2018-03-06 00:35:21

标签: docker checkpoint

我有关于使用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):无法继承fd 10:错误的文件   描述符

我认为docker也无法处理它,因为它的实时检查点机制是建立在criu之上的。 我想知道是否有任何可能的方法来处理它或它 有没有人在码头工作之前做过这样的事情?

由于

1 个答案:

答案 0 :(得分:0)

使用Docker CLI进行检查点和恢复更容易,问题更少。 您可以尝试:https://forums.docker.com/t/docker-checkpoint-restore-on-another-host/27427/2https://github.com/docker/cli/blob/master/experimental/checkpoint-restore.md

具体来说,必须启用docker中的实验模式。检查点:

UNSAFE ASSEMBLY

还原:

sudo docker checkpoint create --checkpoint-dir=<dir-checkpoint-files> <container-ID> <checkpoint-name>

我尝试使用criu进行检查点和恢复;然而,它引起了很多像你这样的问题。