选择插件设计指南
概述
选择插件负责选择要分配给作业的计算资源,以及分配和释放这些资源。选择插件了解系统拓扑,基于拓扑插件建立的数据结构。如果配置得当,它还可以过度订阅资源以支持组调度(并行作业的时间切片)。其他架构将依赖于 select/linear 或 select/cons_tres 插件。select/linear 插件将整个节点分配给作业,是最简单的实现。select/cons_tres 插件(cons_tres 是 可跟踪资源 的缩写)可以在节点内分配单个插槽、核心、线程或 CPU。它还包括管理其他通用资源(如 GPU)的能力。select/cons_tres 插件的速度略慢于 select/linear,但包含更复杂的逻辑。
操作模式
select/linear 和 select/cons_tres 插件具有相似的操作模式。显而易见的区别在于 select/linear 中的数据结构是以节点为中心的,而 select/cons_tres 中的数据结构则包含更细粒度的信息(插槽、核心、线程或 CPU,具体取决于 SelectTypeParameters 配置参数)。下面的描述是通用的,适用于上述两个插件实现。请注意,这些插件都能够管理内存分配。如果您需要跟踪其他资源(如 GPU),则应使用 select/cons_tres 插件。
每个节点的数据结构包括内存(配置和分配)、GRES(配置和分配,以列表数据结构表示),以及一个标志,指示节点是否已使用独占选项分配(防止其他作业在同一节点上分配资源)。另一个关键数据结构用于强制每个分区的 OverSubscribe 配置参数,并跟踪每个分区中已分配给每个计算资源(例如 CPU)的作业数量。这个数据结构在插件之间是不同的,具体取决于资源分配的分辨率(例如节点或 CPU)。
选择插件中的大部分逻辑致力于识别要分配给新作业的资源。该函数的输入包括:指向新作业的指针、标识可用节点的位图、节点计数(最小、最大和期望)、该分区中作业可以共享资源的数量,以及可以被抢占以启动新作业的作业列表。第一阶段是确定所有可用节点中,哪些节点最能满足资源需求。这由一个最佳适应算法组成,该算法根据网络拓扑(如果配置了拓扑/树插件)或根据连续节点(默认情况下)对节点进行分组。一旦确定了最佳节点,就会为新作业累积资源,直到满足其资源需求。
如果作业无法使用当前可用资源启动,插件将尝试识别可以被抢占的作业,以启动新作业。将创建当前系统状态的副本,包括有关所有资源和活动作业的详细信息。然后将从此模拟系统状态中移除可抢占的作业,直到可以启动新作业。当新作业所需的资源充足时,实际上需要被抢占以启动其的作业将被抢占(这可能是模拟抢占的作业的一个子集)。
还存在其他功能以支持挂起作业、恢复作业、终止作业、缩减作业分配、打包/解包作业状态信息、打包/解包节点状态信息等。这些功能的操作相对简单,此处不作详细说明。
最后修改于 2024 年 1 月 29 日