暂停,保存到磁盘,使用PBS在超级计算机上重新启动长作业

时间:2014-02-28 14:15:38

标签: state resume suspend pbs wall-time

我需要能够暂停“正在运行的脚本”,让操作系统将其状态保存到磁盘,然后通过读取该状态并继续完全从它离开的位置继续恢复它。该系统是一个12核计算节点,共享内存为48GB,运行linux。我没有管理员权限,我使用ssh远程登录。脚本和其中的可执行文件不使用GUI,它是所有命令行,据我所知,不需要expicitly网络或套接字。

通过“运行脚本”(或“管道”)我的意思是bash脚本或perl脚本或两者的组合产生一些C / C ++可执行文件,可能他们使用openmp并行化。或者使用gnu-parallel在并行可执行文件中生成。因此,我们不是在讨论单个可执行文件,而是一系列可执行文件,它们可以并行或按顺序运行,使用12个内核和一个公共内存进行隐式并行化,并使用多个unix命令(例如awk)粘合。

我需要暂停并重新启动管道,因为调度程序(MOAB)会杀死(系统规则)所有运行时间超过24小时的作业。我们的想法是暂停工作并重新排队。这种技术是完全合法的。

修改可执行文件的源代码,以便它们都保存状态并稍后恢复它是不切实际的,因为它意味着修改几个开源可执行文件以接受“保存状态和暂停”信号,让我们说ImageMagick的'转换'甚至是'grep','sed','awk'以及perl!另外,还有一个可执行文件是闭源的,没有源代码。

所以,我相信我处于这样一种情况:一个(唯一的?)实用选项是在所谓的沙盒环境中运行我的'脚本/管道',例如: QEMU(一个模拟器),希望可以发送信号到'休眠',只需将整个内存和CPU状态保存到磁盘(48GB不是问题)并暂停,就可以保存当前正在运行的程序的状态。

我不是上述任何一位的专家,所以请原谅我的术语,或者我说一些无效的东西。我只是在草绘。

回顾一下:我问你们有没有经验可以解决在linux下暂停和重新启动复杂脚本作业的问题,而不需要修改代码来“保存状态”。这个解决方案也应该具有相对计算效率,即最终不会浪费大量的超级计算机能力来运行仿真器。

如果您认为我上面讨论的QEMU解决方案没问题,那么请尽可能地举一些如何开始的例子,即从公共ISO创建模拟器linux图像,加载图像,运行'脚本',告诉模拟器在20h后'暂停/休眠',然后通过从挂起状态读取它的状态来恢复模拟器。所有这些,最好来自命令行或脚本。

任何其他解决方案,只要它们是实用的(对于给定的设置),欢迎。

请注意:我没有管理员权限,但可以在我的homedir中安装并拥有大量硬盘空间。此外,程序不使用GUI,它是所有命令行,据我所知,不需要明确的网络或套接字。

作为使用仿真器的解决方案的积极副作用,任何此类“管道”都可以分发到实现“沙箱”/仿真器的任何操作系统(例如mac或win),而无需复杂的过程重新编译所有内容并安装gnu-utils,bash,boost等。我发现自己多次堆叠到这种情况。

感谢您的帮助, bliako。

1 个答案:

答案 0 :(得分:2)

我不确定您使用的是哪个版本的pbs,但TORQUE提供与Berkeley Lab Checkpoint / Restart(BLCR)的集成。 BLCR最重要的是所有节点都具有相同的操作系统映像。设置起来相当详细,并记录在TORQUE docs.

本质上,pbs_mom守护进程被配置为使用BLCR,并且每当您停止作业时,守护进程使用BLCR获取操作系统内部数据结构的快照,以了解进程的确切状态,使其能够重新启动完全相同的过程。