公平调度策略 Fairshare
概述
Slurm 使用 priority/multifactor 插件实现多因子作业调度,其中 Fairshare 策略是确保资源公平分配的核心机制。通过合理配置和使用 Fairshare 策略,可以显著提高集群资源利用的公平性和效率,确保所有用户都能获得与其份额相符的集群资源。Fairshare 策略包含两个关键因子:
Fairshare Factor(资源分配公平因子)
- 作用:考虑用户/账户的承诺资源与实际分配资源的差异
- 原理:基于用户/账户的资源分配份额(Share)和实际获得的资源分配量
- 效果:分配资源超过承诺份额的用户会获得较低的优先级
FairshareUsed Factor(资源使用公平因子)
- 作用:考虑用户/账户的承诺资源与实际消耗资源的差异
- 原理:基于用户/账户的资源分配份额(Share)和实际消耗的资源量
- 效果:消耗资源超过承诺份额的用户会获得较低的优先级
- 支持版本:从fsched-99.20250603.tar.gz版本开始支持FairshareUsed Factor
功能说明
Fairshare Factor 工作机制
- 跟踪用户/账户的资源分配情况
- 计算资源分配的公平性指数
- 影响新作业的调度优先级
- 确保长期来看各用户/账户获得的资源与其份额相符
FairshareUsed Factor 工作机制:
- 跟踪用户/账户的实际资源消耗(CPU小时、内存使用等)
- 计算资源使用的公平性指数
- 影响新作业的调度优先级
- 防止资源被低效使用
配置指南
配置 Association
- 在 accounting 系统中设置好集群-账号-用户的关联关系
- 对于 Fsched SE 版本:通过集群管理界面开启"每用户资源限制"功能,并为每个用户设置集群资源配额
核心参数配置
在 slurm.conf 配置文件中添加以下参数:
# 启用多因子优先级插件
PriorityType=priority/multifactor
# 设置公平调度权重(示例值)
PriorityWeightFairshare=30 # 资源分配公平因子权重
PriorityWeightFairshareUsed=3000 # 资源使用公平因子权重
参数说明:
示例中将 PriorityWeightFairshareUsed
设为较高值(3000),这会使实际资源消耗对作业优先级产生更大影响,实际值应根据集群具体情况调整。
权重配置建议
- 根据集群特点调整权重比例,实际生产环境建议建立定期审查机制,每月分析资源分配/使用公平性,并根据使用情况调整份额分配
- 资源紧张环境可提高 FairshareUsed 权重
- 追求分配公平性可提高 Fairshare 权重
监控工具
使用 sshare 监控资源份额
查看详细资源份额信息:
sshare -a --ext
输出字段说明:
RawShares
:原始份额值NormShares
:标准化后的份额RawUsage
:原始资源使用量EffectvUsage
:有效资源使用量FairShare
:Fairshare Factor 值FairShareU
:FairshareUsed Factor 值
使用 sprio 分析作业优先级
查看作业优先级构成:
sprio --ext -l
输出字段说明:
PRIORITY
:总优先级FAIRSHARE
:Fairshare Factor 贡献值FAIRSHAREU
:FairshareUsed Factor 贡献值- 其他标准优先级因子
使用示例
基础环境检查
-
确认 association 配置:
sacctmgr list assoc cluster=<集群名称>
-
检查当前调度配置:
scontrol show config | grep Priority
公平性测试
测试场景1:验证 Fairshare Factor
-
用户 alice 提交多个作业占用大量资源:
alice@ubuntu22-4c-1:~$ for i in `seq 100`;srun -c1 --exclusive sleep 3600 &;done
-
观察优先级变化:
在任务完成前后分别使用
sshare --ext
和sprio --ext
查看资源份额和优先级的变化。
测试场景2:验证 FairshareUsed Factor
-
用户 alice 提交资源消耗少的任务:
alice@ubuntu22-4c-1:~$ srun -n4 sleep 100&
[1] 2512319
alice@ubuntu22-4c-1:~$ srun -n4 sleep 100&
[2] 2512372 -
用户 charlie 提交资源消耗多的任务:
charlie@ubuntu22-4c-2:~$ srun stress-ng --cpu 1 --cpu-load 100 -t 100s &
[1] 164380
charlie@ubuntu22-4c-2:~$ srun stress-ng --cpu 1 --cpu-load 100 -t 100s &
[2] 164387
-
观察优先级变化:
在任务完成前后分别使用
sshare --ext
和sprio --ext
查看资源份额和优先级的变化。
注意事项
-
版本兼容性: 如果从该版本降级到旧版本 fsched,会导致 slurmctld 服务因状态文件版本不兼容而无法启动。错误信息示例:
Can not recover assoc_usage state, incompatible version
,解决方法:手动删除集群 state 目录下的 assoc_usage 文件,然后重启 slurmctld 服务。 -
算法限制:FairshareUsed 仅支持 Fair Treefairshare 算法,不支持 classicfairshare 算法
-
权重影响:过高的 FairshareUsed 权重可能导致资源使用少的用户获得过高优先级,建议通过测试确定最佳权重比例
-
数据准确性:确保 accounting 数据收集正常,定期检查资源使用统计的准确性