state - 使用 PBS 在 super 计算机上暂停、保存到磁盘、重新启动长时间作业

标签 state resume suspend pbs wall-time

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

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

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

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

所以,我相信我所处的情况是,一个(唯一?)实用的选择是在所谓的沙箱环境中运行我的“脚本/管道”,例如QEMU(模拟器)有望向“休眠”发送信号,只需将整个内存和 CPU 状态保存到磁盘(48GB 不是问题)并挂起即可保存其中所有当前正在运行的程序的状态。

我不是上述任何方面的专家,所以请原谅我的术语或者如果我说的话无效。我只是画草图。

回顾一下:我向各位有经验的人询问一种解决方案,可以在 Linux 下暂停和重新启动复杂的脚本作业,而无需修改代码以“保存状态”。该解决方案还应该具有相对较高的计算效率,即最终不会浪费大量 super 计算机的能力来运行模拟器。

如果您认为我上面谈到的 QEMU 解决方案是可以的,那么请(如果可以的话)给出一些如何开始的示例,即从公共(public) ISO 创建一个模拟器 Linux 镜像,加载该镜像,运行“script',告诉模拟器在 20 小时后“挂起/休眠”,然后通过从挂起状态读取其状态来恢复模拟器。所有这一切,最好是通过命令行或脚本实现。

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

请注意:我没有管理员权限,但可以在我的主目录中安装东西,并且有大量的硬盘空间。另外,这些程序不使用 GUI,都是命令行,而且据我所知不需要明确的网络或套接字。

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

感谢您的帮助, 布利亚科。

最佳答案

我不确定您使用的是哪个版本的 pbs,但 TORQUE 提供与伯克利实验室检查点/重新启动 (BLCR) 的集成。对于 BLCR 最重要的是所有节点都具有相同的操作系统镜像。设置相当详细,并记录在 TORQUE docs. 中。

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

关于state - 使用 PBS 在 super 计算机上暂停、保存到磁盘、重新启动长时间作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22097575/

相关文章:

c# - 防止WPF窗口闪烁

cron - 如何安排 Google Compute Engine 仅在特定时间开启

arrays - 错误: Objects are not valid as a React child (found: object with keys {articles})

javascript - React 不会重新渲染

C++ 监视变量的更改值

tabs - Flutter:使用AutomaticKeepAliveClientMixin动态添加选项卡并保持状态

java - 如何快速解决Libgdx中暂停和恢复功能

.net - 在 WiX 中重启后继续安装

ios - 应用程序强制退出时如何恢复下载?

C# 挂起线程直到服务器响应