pbs - 请求节点的所有处理器

标签 pbs torque

我需要在 PBS 集群上运行 Java 应用程序,但我不太清楚它应该如何运行。

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

对我来说最好的事情是请求对 PBS 集群中的一个节点的完全访问权限,以便让这个东西运行。即保留一个节点上的所有核心。我还没有看到如何做到这一点。我所看到的只是 ppn 参数,它请求每个节点的特定内核数,但节点是异构的,所以我不想指定单个 ppn 编号,这取决于我获得的节点类型。

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

长话短说;

总结一下:

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

最佳答案

Can I request full access to a node (reserve all the cores on the node I get for a job)?

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

#PBS -W x=NACCESSPOLICY:SINGLEJOB

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

If I request only some fraction of the cores on a node, will PBS kill my job if I exceed that limit?

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

#PBS -E

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

关于pbs - 请求节点的所有处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22789056/

相关文章:

PBS 中给定 shell 的 Linux echo cpu(核心)名称/编号

bash - 立即发现并非所有环境变量都已在 qsub 命令行上定义

bash - 从后台函数打印输出后如何返回 bash 提示符?

cluster-computing - 依赖于作业阵列的扭矩作业

java - GWT 服务器应用程序无法连接到数据库

linux - 带通配符的命令行 `qdel` 命令

gcc - 迁移到 ubuntu 18.04 后无法建立扭矩

c++ - libtorque - 我如何包含 PBSD_status 函数?

scheduled-tasks - 如何获取一堆 PBS Torque 作业的运行时间?

java - 是否有适用于 Torque/PBS 的 DRMAA Java 库?