【发布时间】:2014-04-01 14:35:48
【问题描述】:
我需要在 PBS 集群上运行 Java 应用程序,但我有点不清楚它的行为方式。
应用程序启动了几个线程,其数量取决于运行它的节点上的内核数量。然后每个内核启动 2 个线程。
对我来说最好的办法是请求对 PBS 集群中的一个节点的完全访问权限,以便让这个东西在上面运行。也就是说,保留一个节点上的所有核心。我还没有看到我怎么能做到这一点。我看到的只是 ppn 参数,它请求每个节点的特定数量的核心,但节点是异构的,所以我不想指定单个 ppn 数字,这取决于我得到的节点类型。
如果这不可能,我需要了解指定 ppn 时作业的行为方式。我可以指示 Java 应用程序只创建 X 多个线程,但我认为我无法控制这些线程将在哪些内核上运行。每个内核创建 2 个线程对我们来说是一个经验法则,并且可能会发生所有线程都想一直运行的情况,在这种情况下,我使用的 CPU 资源将比我请求的多 100%。我的理解是否正确,即 PBS 不会对我的进程实施任何限制,但实际上可能会监控它,如果它超过指定的资源使用量,甚至会终止我的进程?
TL;DR;
总结一下:
- 我是否可以请求对节点的完全访问权限(保留节点上的所有内核用于作业)?
- 如果我只请求节点上的一小部分核心,如果超过该限制,PBS 会终止我的工作吗?
【问题讨论】:
-
你用的是什么调度器?
-
其实问题已经变了,所以我不再需要这个了。我们可能确实有办法将 Java 应用程序限制为特定数量的内核,最终我们将使用 ppn 来控制它。但要回答您的问题,我们使用的是摩押。我发现了一些声称保留整个节点的东西:“#PBS -W x=NACCESSPOLICY:SINGLEJOB”,但我还没有测试过它是否有效。乍一看,我并没有那么相信。
-
如果你设置它,它将保证 Moab 不会再向该节点发送任何作业。