Slurm中的Fair Tree公平共享算法详解
slurm Slurm: A Highly Scalable Workload Manager 项目地址: https://gitcode.com/gh_mirrors/sl/slurm
概述
Fair Tree是Slurm资源管理系统中一种创新的公平共享算法,由杨百翰大学的Ryan Cox和Levi Morrison开发。该算法通过树形结构管理用户和账户的优先级,确保高优先级账户下的所有用户都能获得比低优先级账户用户更高的资源分配权重。
算法核心思想
Fair Tree算法的核心在于构建一个有序的树形结构,其中:
- 每个账户和用户都有明确的"Level Fairshare"值
- 高优先级账户下的所有用户自动获得比低优先级账户用户更高的优先级
- 通过深度优先遍历确定最终的用户优先级排名
终端用户视角
对于普通用户,了解以下几点即可掌握Fair Tree的基本工作原理:
-
使用
sshare -l
命令可查看两个关键指标:FairShare
:最终公平共享因子(1.0为最高)Level FS
:当前级别的公平共享值(未使用时显示为无限大)
-
优先级判断规则:
- 比较两个用户时,找到他们最近的共同祖先账户
- 在共同祖先的子账户级别比较Level FS值
- Level FS值高的账户下的所有用户优先级更高
算法实现细节
计算流程
- 为每个关联计算Level Fairshare值
- 构建有序树(值高的在左)
- 深度优先遍历树结构
- 为用户分配最终排名和公平共享因子
Level Fairshare计算公式
LF = S / U
其中:
- S (Shares Norm):标准化后的份额
- 计算公式:自身份额/(自身份额+兄弟节点份额)
- U (Effective Usage):标准化后的使用量
- 计算公式:自身使用量/(自身使用量+兄弟节点使用量)
特殊情况处理
-
平局处理:
- 相同Level FS的用户获得相同排名
- 用户与账户平局时,用户获得与该账户下最高排名用户相同的排名
- 账户间平局时,子账户列表会被合并
-
新作业处理:
- 新提交的作业会立即获得优先级
- 不会出现因精度问题导致完全相同的公平共享因子
系统配置
在slurm.conf中需要配置以下参数:
PriorityType
:必须设置为"priority/multifactor"PriorityCalcPeriod
:定义算法重新计算的频率(分钟)
使用注意事项
-
权重设置:由于Fair Tree会为所有用户排名(无论是否活跃),建议将
PriorityWeightFairshare
设置为较低值(如用户关联数的1-2倍) -
依赖关系:必须启用Slurm会计数据库来提供使用量数据和份额分配信息
-
实时生效:执行
scontrol reconfigure
不会立即触发Fair Tree计算,需要等待下一个PriorityCalcPeriod
周期 -
精度问题:算法设计上几乎不会出现完全相同的公平共享因子
技术优势
Fair Tree算法相比传统公平共享算法具有以下优势:
- 优先级一致性:确保高优先级账户下的所有用户保持相对优势
- 防止误配置:账户协调员无法意外降低自己用户相对于其他账户用户的优先级
- 精确排序:通过排名机制避免了计算精度导致的错误
- 即时响应:新作业能立即获得适当的优先级
总结
Fair Tree为Slurm提供了一种结构清晰、逻辑严谨的公平共享算法实现,特别适合需要严格维护账户间优先级关系的大规模计算环境。通过树形结构和分级计算,它既保证了公平性,又确保了高优先级工作的资源获取能力。
slurm Slurm: A Highly Scalable Workload Manager 项目地址: https://gitcode.com/gh_mirrors/sl/slurm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考