请求节点的所有处理器

时间:2014-04-01 14:35:48

标签: pbs torque

我需要在PBS集群上运行Java应用程序,而且我对它应该如何表现有点不清楚。

应用程序启动几个线程,其数量通过查看正在运行的节点上的核心数来确定。然后它每个核心启动2个线程。

对我来说最好的事情是请求对PBS集群中的节点进行完全访问,以便运行此项。也就是说,保留节点上的所有核心。我还没有看到我能做到这一点。我所看到的是ppn参数,它为每个节点请求特定数量的核心,但节点是异构的,因此我不想指定单个ppn号码,这取决于我得到的节点类型。

如果无法做到这一点,我需要了解指定ppn时作业的行为方式。我可以指示Java应用程序只创建X许多线程,但我认为我无法控制这些线程将在哪些内核上运行。每个核心创建2个线程对我们来说是经验法则,并且可能发生所有线程都想要一直运行的情况,在这种情况下,我将使用比我请求多100%的CPU资源。我的理解是否正确,PBS不会对我的流程强制执行任何限制,但实际上可能会对其进行监控,甚至在超出指定的资源使用量时终止我的流程?

TL; DR;

总结一下:

  1. 我是否可以请求对节点的完全访问权限(保留我获得的作业节点上的所有核心)?
  2. 如果我只请求某个节点上的一部分内核,如果超过该限制,PBS是否会终止我的工作?

1 个答案:

答案 0 :(得分:2)

  

我是否可以请求对节点的完全访问权限(保留我为作业获取的节点上的所有核心)?

与Moab一起使用时,您可以使用您在评论中声明的参数:

#PBS -W x=NACCESSPOLICY:SINGLEJOB

这保证了Moab不再向同一节点发送任何作业。这不会使每个节点的所有处理器都显示在$PBS_NODEFILE中,但它允许您使用整个节点而不会踩到其他任何节点。

  

如果我只请求某个节点上的一小部分内核,如果超过该限制,PBS是否会终止我的工作?

不,它不会。默认情况下,TORQUE不会强制您仅使用您请求的核心。需要注意的是,如果您正在配置TORQUE以使用cpusets,那么cpusets会将您的进程限制为仅分配给您的处理器。如果您使用的是3.0.0或更高版本的TORQUE版本,则可以添加

#PBS -E

到你的工作脚本来解决这个问题。这告诉妈妈你有对该节点的独占访问权,并指示妈妈将所有cpu放入你的cpuset中的机器中。