Grid Engine中的并行序言和结尾

我们有一个集群用于为客户运行MPI作业。 以前这个集群使用Torque作为调度器,但是我们正在转换到Grid Engine 6.2u5(对于其他一些特性)。 不幸的是,我们在Grid Engine环境中复制了一些维护脚本时遇到了问题。

在Torque中,我们有一个prologue.parallel脚本,用于在节点上执行自动健康检查。 如果此脚本返回失败情况,则Torque将帮助节点脱机并重新排列作业以使用不同的节点组。

然而,在Grid Engine中,队列“prolog”只在作业的头节点上运行。 我们可以从startmpi.sh初始化脚本手动运行我们的prologue脚本,用于mpi并行环境; 但我不知道如何检测失败的情况,并执行相同的“标记离线和重新sorting”程序。

有什么build议么?

我不能说我已经尝试过了,但是至less在prolog脚本返回的值不是0,99或100时,应该使队列处于错误状态。 你可以在start_proc_args脚本中使用类似的策略。

如果这不起作用,我不知道你问的是否可以通过prolog脚本实现。 也许你可以使用健康检查cron作业(或使用你select的监视系统)来执行检查,并在主机队列失败时禁用它?

如果这对他人有帮助,那么我们最终做的是:

  • 长时间的健康检查,并且不会干扰潜在的重叠作业(即检查存储系统中的硬件问题)被卸载到周期性的cron作业。 (频率取决于)

  • 长时间的健康检查,但是可能会干扰作业(内存性能检查)的工作被卸载到由cron每晚提交给“独占”模式的每个节点提交的SGE作业中。 如果失败,在任何其他工作可能到达之前,该节点被脱机。

  • 在运行一个作业之前检查环境条件(寻找stream浪的进程,完整的内存等)被放在从pe启动脚本startmpi.sh运行的脚本中。 使用pdsh将命令提交给节点,并通过STDOUT返回输出代码。 (不理想,但是…)如果一个或多个节点发生故障,则脚本会将其忽略并运行qmod -r $JOB_ID以重新运行作业。 (请注意,作业必须在其脚本中或默认情况下指定为“可重新运行”)。这会在实际运行jobcript之前强制重build节点列表。

目前我们正在致力于构build容错function,但基本function已经被证实可行。 感谢@ kamil-kisiel和synirc.net上的#gridengine频道的build议。

为什么不创build一个在每个节点上运行的负载传感器,取决于你testing的是什么?

使用这种方法,如果互连networking出现故障,您可以运行不依赖于互连的作业。