DMTCP 简介

DMTCP即Distributed MultiThreaded CheckPointing,是一套Checkpoint/Restart的工具。简单的做个类比,就是gdb的断点功能。在调试程序的时候可以用gdb来设置断点,让程序运行到该处暂停运行,此时我们就可以查看此断点处各个变量、寄存器的状态。查看完毕后,再让程序继续跑下去。与gdb不同的是,gdb是直接在程序运行中,在内存上控制程序。而DMTCP可以保存一个进程的状态到一个文件中,再通过读取文件的信息,使该进程在断点处重新运行下去。

安装

Ubuntu用户直接在软件源里面就可以安装:

$ sudo apt-get install dmtcp

使用

典型的过程

典型的使用过程比较复杂,不过可以从中看出DMTCP的运行机制。 首先在一个终端下运行dmtcp_coordinator:

$ dmtcp_coordinator 
dmtcp_coordinator starting...
    Port: 7779
    Checkpoint Interval: disabled (checkpoint manually instead)
    Exit on last client: 0
Type '?' for help.

其次,使用dmtcp_checkpoint在另一个终端下运行测试程序:

$ dmtcp_checkpoint ./test

最后,在dmtcp_coordinator所在的终端下输入c,并回车。这个时候程序test就被checkpoint了。Ctrl-C掐掉dmtcp_checkpoint ./test后,可以在该目录下看到一个后缀名为dmtcp的文件。进程的断点信息都保存在这个文件里面。 要Restart这个程序,只要dmtcp_restart filename.dmtcp就可以了。

使用dmtcp_command简化流程

# 终端一号
$ dmtcp_checkpoint ./test      # 运行测试程序,并自动在后台载入dmtcp_coordinator
# 终端二号
$ dmtcp_command --checkpoint   # 断点,可简写成-c
# 终端一号
$ ./dmtcp_restart_script.sh    # 重启
# 终端二号
$ ./dmtcp_command --kill       # 杀死coordinator进程