"criu dump重要步骤五~九总结"

  "对进程单节点信息备份总结"

Posted by Xu on July 3, 2017

CRIU,DUMP备份重要步骤五~九总结(dump_one_task)

dump_one_task是对一个进程节点的所有线程信息进行备份的函数实现:

  • (1)首先通过本地进程与进程树节点进程内存文件共享映射来实现对该进程节点的”感染”,然后使得该进程节点监听指定sock(ctl->ictx.sock即dmpi(item)->netns->net.seqsk;),最后重新启动该感染进程实现后台服务daemon模式,同时对寄生进程的终止信号SIGCHLD,可以进行本地处理。

  • (2) 首先修复寄生进程的vdso模块,然后收集异步io环信息,最后使得寄生进程将所有文件描述符信息发送到本地进程并进行分类备份保存

  • (3) 内存备份,内存传输是通过管道传输到本地进程,首先获取pagemap映射关系,将内存记录到ppb->iov和ppb->hole(脏页面)结构体中,然后通过管道发送,发送后分别写入镜像并保存,最后清除所有的脏页面标示位。

  • (4)备份信号的动作信息,三个标准计时器的信息及Posix计时器的值和超限次数信息等,最后备份所有线程的内核信息(可执行域信息,线程信号栈,父进程死亡信号值,信誉证书,健壮用户互斥锁链表,调度策略,调度参数,调度优先级(nice值),及args中的安全传输层协议和信号动作信息,杂项设备信息,资源限制,备份该进程节点的cgroup信息 ,备份该进程节点所有线程Cgroup信息)

  • (5)最后暂停寄生进程的后台服务模式,再次收集所有线程内核信息写入镜像(两次收集线程内核信息?),然后解除内存共享映射,备份虚拟内存及auxv及exe目录下的信息,最后备份线程文件系统信息(cwd目录及root目录)