跳到主要内容

QOS拒绝策略标志

fsched 支持 QoS(Quality of Service) 拒绝策略标志,用于控制当作业超过资源限制时的行为。通过这些标志,管理员可以更细粒度地控制作业调度策略。

提示

该功能适用于 fsched 版本 10.101 及以上。

标志说明

DenyOnMaxPerJob

当设置 DenyOnMaxPerJob 标志时,如果作业请求的资源超过 QoS 配置的单作业最大资源限制(MaxTRESPerJob),作业将被立即拒绝而不是进入排队状态。

适用场景:

  • 需要严格限制单个作业的资源使用
  • 避免用户提交超大作业长期占用队列

DenyOnMaxPerUser

当设置 DenyOnMaxPerUser 标志时,如果作业会导致用户的资源使用超过 QoS 配置的单用户最大资源限制(MaxTRESPerUser),作业将被立即拒绝而不是进入排队状态。

适用场景:

  • 需要严格限制单个用户的资源使用
  • 防止单个用户占用过多集群资源

DenyOnGrp

当设置 DenyOnGrp 标志时,如果作业会导致组的资源使用超过 QoS 配置的组最大资源限制(GrpTRES),作业将被立即拒绝而不是进入排队状态。

适用场景:

  • 需要严格限制组的总资源使用
  • 避免某个组的作业过度占用集群资源

使用方法

查看 QoS 标志

sacctmgr show qos format=name,flags

设置拒绝策略标志

使用 sacctmgr 命令设置 QoS 标志:

# 设置单个标志
sacctmgr modify qos <qos_name> set flags=DenyOnMaxPerJob

# 设置多个标志
sacctmgr modify qos <qos_name> set flags=DenyOnMaxPerJob,DenyOnMaxPerUser

# 添加标志到现有标志
sacctmgr modify qos <qos_name> set flags+=DenyOnGrp

移除拒绝策略标志

# 移除特定标志
sacctmgr modify qos <qos_name> set flags-=DenyOnMaxPerJob

配置示例

示例1: 限制单作业资源并立即拒绝超限作业

  1. 创建 QoS 并设置单作业最大 CPU 数为 16
sacctmgr add qos limited_job
sacctmgr modify qos limited_job set MaxTRESPerJob=cpu=16
  1. 设置 DenyOnMaxPerJob 标志
sacctmgr modify qos limited_job set flags=DenyOnMaxPerJob
  1. 为用户关联 QoS
sacctmgr modify user alice account=myaccount set qos=limited_job
  1. 测试:当用户 alice 提交请求超过 16 个 CPU 的作业时,作业将被立即拒绝
alice@head:~$ sbatch -n 20 job.sh
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy

示例2: 限制用户总资源并立即拒绝超限作业

  1. 创建 QoS 并设置单用户最大 CPU 数为 32
sacctmgr add qos limited_user
sacctmgr modify qos limited_user set MaxTRESPerUser=cpu=32
  1. 设置 DenyOnMaxPerUser 标志
sacctmgr modify qos limited_user set flags=DenyOnMaxPerUser
  1. 为用户关联 QoS
sacctmgr modify user bob account=myaccount set qos=limited_user
  1. 测试:当用户 bob 已有作业运行使用 24 个 CPU 时,再提交请求 16 个 CPU 的作业将被立即拒绝
bob@head:~$ squeue -u bob
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
101 partition job1 bob R 0:30 3 compute[1-3]

bob@head:~$ sbatch -n 16 job2.sh
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy

示例3: 组合使用多个标志

  1. 创建 QoS 并设置多个限制
sacctmgr add qos strict_qos
sacctmgr modify qos strict_qos set MaxTRESPerJob=cpu=16
sacctmgr modify qos strict_qos set MaxTRESPerUser=cpu=32
sacctmgr modify qos strict_qos set GrpTRES=cpu=64
  1. 同时设置三个拒绝策略标志
sacctmgr modify qos strict_qos set flags=DenyOnMaxPerJob,DenyOnMaxPerUser,DenyOnGrp

这样配置后:

  • 单个作业请求超过 16 个 CPU 将被拒绝
  • 用户总使用超过 32 个 CPU 时新作业将被拒绝
  • 组总使用超过 64 个 CPU 时新作业将被拒绝

行为对比

不设置拒绝策略标志(默认行为)

作业超过资源限制时会进入 PENDING 状态,等待资源释放后才能运行。

bob@head:~$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
102 partition job2 bob PD 0:00 1 (MaxCpuPerUser)
101 partition job1 bob R 0:30 3 compute[1-3]

设置拒绝策略标志后

作业超过资源限制时会被 立即拒绝,提交失败。

bob@head:~$ sbatch job2.sh
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy

注意事项

注意
  1. 拒绝策略标志会使作业提交失败而不是等待,请根据实际需求选择是否启用
  2. 这些标志仅影响超过限制的新提交作业,不影响已在运行的作业
  3. 建议在启用拒绝策略前,先通过不设置标志的方式测试资源限制是否合理
  4. 拒绝策略标志与 DenyOnLimit 标志不同:DenyOnLimit 针对所有限制类型,而这三个标志可以分别针对不同类型的限制

相关文档