控制 CPU 和内存亲缘关系
IBM® Spectrum LSF 可以调度亲缘关系感知的作业。 这允许作业利用不同级别的处理单元 (NUMA 节点,套接字,核心和线程)。 仅在 Linux 以及 Power 7 和 Power 8 主机上支持亲缘关系调度。 在 LSF Standard Edition 和 LSF Advanced Edition 中支持亲缘关系调度。 LSF Express Edition 不支持亲缘关系调度。
亲缘关系资源需求 字符串指定需要拓扑感知调度的作业的任务的 CPU 或内存绑定需求。 亲缘关系 [] 资源需求部分控制 CPU 和内存资源分配,并根据 LSF 收集的硬件拓扑信息指定主机中 处理器单元 的分布。 语法支持顺序作业的基本亲缘关系需求,以及并行作业的非常复杂的任务亲缘关系需求。
affinity [] 部分由 bsub -R接受,并由 bmod -R 针对未运行的作业接受,并且可以在 lsb.applications 和 lsb.queues中的 RES_REQ 参数中指定。 作业级别亲缘关系资源需求优先于应用程序级别需求,这将覆盖队列级别需求。
您可以使用 bmod 来修改亲缘关系资源需求。 使用 bmod 修改具有亲缘关系需求的正在运行的作业的内存资源使用情况后, bhosts -l -aff 可能会显示主机级内存与 NUMA 节点中的可用内存之间的一些不一致。 用于亲缘关系绑定需求的已修改内存资源仅在对正在运行的作业进行重新排队后才会在亲缘关系级别生效,并且下次 mbschd 对其进行调度时才会生效; 它将立即对主机级别内存分配生效。
启用亲缘关系调度
在 lsb.hosts中使用 AFFINITY 关键字启用 CPU 和内存亲缘关系调度。
Begin PluginModule
SCH_PLUGIN RB_PLUGIN SCH_DISABLE_PHASES
schmod_default () ()
...
schmod_affinity () ()
End PluginModule局限性与已知问题
- 在抢占期间无法释放亲缘关系资源,因此您应该配置mem作为 lsb.params中的可抢占资源。
- 当已使用 bstop停止具有已分配亲缘关系资源的作业时,将不会释放已分配的亲缘关系资源 (线程,核心,套接字, NUMA 节点和 NUMA 内存)。
- 对于已启用
cpuset调度的主机以及 Cray Linux 主机,将禁用亲缘关系调度。 - 亲缘关系调度不支持 NUMA 级别内存衰减。
- 启用预留后,亲缘关系预留分配将显示为 bhosts -aff中已分配资源的一部分。
使用 membind=local首选 绑定策略提交的作业可能会过度落实分配给它们的 NUMA 节点的内存。
bhosts -aff 输出有时可能会将主机的 NUMA 节点上的已分配内存总量显示为超过主机的最大内存,这是因为在 bhosts -aff 中显示的 预留 会过度落实 NUMA 节点。 但是, LSF 绝不允许在主机上分配 正在运行的 作业超过主机的最大内存。
- 当启用保留时,亲缘关系作业会请求足够的资源来使用主机拓扑中的整个节点。 (例如,足够的核心来使用整个套接字) ,如果有任何作业在其核心上运行,那么 LSF 将不会为该作业保留该套接字。 在总是有较小的作业运行消耗核心的情况下,那么需要整个套接字的较大作业将无法预留资源。 变通方法是要求所有作业都具有估算的运行时间,并使用基于时间的保留。