2

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

应用程序启动了几个线程,线程的数量取决于运行它的节点上的内核数量。然后每个内核启动 2 个线程。

对我来说最好的办法是请求对 PBS 集群中的一个节点的完全访问权限,以便让这个东西在上面运行。也就是说,保留一个节点上的所有核心。我还没有看到我怎么能做到这一点。我所看到的只是 ppn 参数,它请求每个节点的特定数量的核心,但节点是异构的,所以我不想指定单个 ppn 数字,这取决于我得到的节点类型。

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

TL;博士;

所以总结一下:

  1. 我可以请求对节点的完全访问权限(保留节点上的所有内核用于工作)吗?
  2. 如果我只请求节点上的一小部分核心,如果超过该限制,PBS 会终止我的工作吗?
4

1 回答 1

2

我可以请求对节点的完全访问权限(保留节点上的所有内核用于工作)吗?

结合 Moab,您可以使用您在评论中声明的参数:

#PBS -W x=NACCESSPOLICY:SINGLEJOB

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

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

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

#PBS -E

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

于 2014-04-03T17:26:06.963 回答