【问题标题】:Live checkpoint with criu or docker for game applications用于游戏应用程序的 criu 或 docker 实时检查点
【发布时间】: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 做过这样的事情吗?

谢谢

【问题讨论】:

标签: docker checkpoint


【解决方案1】:

使用 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 中的实验模式。检查点:

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

恢复:

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

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

【讨论】:

  • 谢谢@ngvanmao。您是否尝试过任何重要的运行进程,例如打开 youtube 的 firefox 或使用 sfml 或 sdl2 开发的任何正在运行的游戏?另一个问题,恢复需要多长时间?感谢您的帮助。
  • 我检查了一个容器,该容器带有一个正在运行的 TCP 服务器,提供人脸检测服务。大约需要 0.6857s,但取决于容器的大小。我的容器相当大 2.6 GB,转储文件的总大小为 354 MB。恢复时间约为 0.7 秒(同样取决于容器的大小)。我还将容器迁移到具有不同 IP 地址的不同主机。迁移后服务器处于活动状态。我没有尝试使用 youtube 打开或运行游戏的火狐之类的东西。
  • 好像彻底坏了rn
猜你喜欢
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多