跳到主要内容

公平调度策略 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 贡献值
  • 其他标准优先级因子

使用示例

基础环境检查

  1. 确认 association 配置:

    sacctmgr list assoc cluster=<集群名称>
  2. 检查当前调度配置:

    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 --extsprio --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 --extsprio --ext 查看资源份额和优先级的变化。

注意事项

  • 版本兼容性: 如果从该版本降级到旧版本 fsched,会导致 slurmctld 服务因状态文件版本不兼容而无法启动。错误信息示例:Can not recover assoc_usage state, incompatible version解决方法:手动删除集群 state 目录下的 assoc_usage 文件,然后重启 slurmctld 服务。

  • 算法限制:FairshareUsed 仅支持 Fair Treefairshare 算法,不支持 classicfairshare 算法

  • 权重影响:过高的 FairshareUsed 权重可能导致资源使用少的用户获得过高优先级,建议通过测试确定最佳权重比例

  • 数据准确性:确保 accounting 数据收集正常,定期检查资源使用统计的准确性