基于 Linux cgroup cpuset 子系统的亲缘关系绑定

LSF 可以在支持 Linux cgroup cpuset 子系统的系统上实施 CPU 绑定。 当通过 Linux cgroups 启用 CPU 亲缘关系绑定时,如果作业具有亲缘关系资源需求,那么 LSF 将创建 cpuset 以包含作业进程,以便作业进程无法从分配的 CPU 转义。 每个亲缘关系作业 cpuset 仅包含 LSF 分发的 CPU 和内存节点。 仅为亲缘关系作业创建 Linux cgroup cpuset。

通过此功能, LSF 从主机收集处理器拓扑,包括 NUMA 节点,套接字,核心和超线程。 用户可以提交作业,指定作业的进程应如何与这些计算元素绑定。 LSF 使用系统调用 sched_setaffinity() 来绑定 CPU。 通过直接调用 sched_setaffinity() 以绑定到其他 CPU ,用户应用程序可以从绑定的 CPU 中转义。

例如,提交具有核心亲缘关系需求和 local首选 内存绑定的作业:

bsub -R "affinity[core:membind=localprefer]"./myapp

LSF 将创建一个包含一个核心的 cpuset ,并附加应用程序的进程标识./myapp到这个 cpuset。 cpuset 充当作业进程的严格容器,以便应用程序./myapp无法绑定到其他 CPU。

在此示例中,内存绑定策略为 local首选。 当 membind=localpreferred时,或者未指定它时, LSF 会将所有内存节点添加到 cpuset ,以确保作业可以访问主机上的所有内存节点,并确保作业进程将首先访问首选内存节点。 如果内存绑定策略为 localonly,那么 LSF 仅将 LSF 调度程序分发的内存节点添加到 cpuset ,而 myapp 仅使用这些内存节点,而不是所有内存节点。

要启用 cpuset 实施功能,请在 lsf.conf中配置 LSB_RESOURCE_ENFORCE="cpu"