我不知道答案,但您应该在 Condor 用户邮件列表中提出这个问题。在 Condor 中支持 DAG 功能的人会对其进行监控并做出响应。有关订阅信息,请参阅此页面。这是相当低的流量。
如果不提前将它们锁定到特定的主机(DAG 或没有 DAG),在 Condor 的同一主机上保持两个作业通常相当困难。我实际上想不出一种真正可行的方法来做到这一点,让 B 在 C 之前开始或 C 在 B 之前开始。如果你愿意强制 B 必须始终在 C 之前开始,你就可以完成工作 B 的部分工作当它开始运行时会修改作业 C 的 ClassAd 的需求部分,使其具有“Machine ==”字符串,其中机器 B 的名称是登陆的。这也要求在 B 运行之前提交作业 C 或根本不提交,B 还必须将其作为其启动工作的一部分释放。
这很复杂...
所以我有一个想法:你可以使用 Condor 的动态 startd/slots 功能并折叠你的 DAG 来实现你想要的。在您的 DAG 中,您当前有两个单独的节点 B 和 C,您可以将其折叠成一个节点 B',当 B 和 C 在一台机器上启动时,它会并行运行 B 和 C。作为工作要求的一部分,您注意到它在一台机器上需要 2 个 CPU。切换您的 startd 以使用动态插槽配置,以便机器通告其所有资源,而不仅仅是静态分配的插槽。现在你总是让 B 和 C 在一台机器上同时运行。当队列中有一些多 CPU 作业和大量单 CPU 作业时,动态插槽会出现一些饥饿问题,但这至少是一个更容易解决的问题。
另一种选择是使用特殊的作业属性标记 B':
MultiCPUJob = True
并将其定位在机器上的插槽 1:
Requirements = Slot == 1 && ...your other requirements...
并有一个静态插槽启动策略,“如果 MultiCPUJob=True 的作业尝试在我的插槽 1 上运行,则抢占恰好位于这台机器上插槽 2 中的任何作业,因为我知道该作业将需要 2 个内核/CPU ”。
这是低效的,但可以使用 6.8.x 之后的任何版本的 Condor 完成。我实际上在我自己的静态分区农场中使用了这种类型的设置,因此如果一项工作需要一台机器单独进行基准测试,它可以在不重新配置机器的情况下发生。
如果您有兴趣了解有关该抢占选项的更多信息,请告诉我,我可以为您指出 condor-user 列表档案中的一些进一步配置阅读。