Slurm使用四个基本步骤来管理一个job/step的CPU资源:
步骤1:节点选择
Slurm选择向作业或作业步骤分配CPU资源的节点集。节点选择受到许多控制CPU分配的配置和命令行选项的影响(下面的步骤2)。如果配置了SelectType=select/linear,则所选节点上的所有资源都将分配给job/step。如果SelectType配置为select/con_res或select/con_tres,则可以从所选节点中分配单独的socket、core和thread作为消耗资源。消耗资源类型由SelectTypeParameters定义。
步骤2:从选定的节点分配CPU
Slurm从步骤1中选择的一组节点中为一个job/step分配CPU资源。CPU分配受与节点选择相关的配置和命令行选项的影响。如果配置了SelectType=select/linear,则所选节点上的所有资源都将分配给job/step。如果SelectType被配置为select/cons_res或select/ccons_tres,则可以从所选节点分配单独的socket、core和thread作为可消耗资源。消费资源类型由SelectTypeParameters定义。
当使用select/cons_res或select/cons_tres的SelectType时,跨节点的默认分配方法是block分配(在使用另一个节点之前,分配一个节点中所有可用的CPU)。节点内的默认分配方法是循环分配(在节点内的socket之间以循环方式分配可用的CPU)。用户可以使用下面描述的适当命令行选项覆盖默认行为。分配方法的选择可能会影响将哪些特定CPU分配给job/step。
步骤3:将任务分配给选定的节点
Slurm将任务分配给在步骤1中为job/step选择的节点。每个任务只分发给一个节点,但可以将多个任务分发到每个节点。除非为作业指定CPU对任务的过度使用(overcommitment),否则分配到节点上的任务数量受节点上分配的CPU数量和每个任务的CPU数量的限制。如果配置了消耗资源,或允许资源共享,那么来自多个job/step的任务可以同时在同一节点上运行。
步骤4:将任务分配和绑定到节点内的CPU(可选)
在可选的步骤4中,Slurm将每个任务分发并绑定到步骤3中任务分发到的节点上分配的CPU。分布在同一节点上的不同任务可以绑定到相同的CPU子集或不同的子集。这一步被称为任务亲和或任务/CPU绑定。