负载阈值
fsched支持按分区配置内存(单位为MiB), CPU使用率(单位为%)和平均CPU运行队列长度(小数,无单位)的负载阈值,配置在partitions.conf中节点所在分区的PartitionName开头的行中,配置项包括:
- 调度内存阈值
LoadSchedMem - 停止内存阈值
LoadStopMem - 调度CPU使用率阈值
LoadSchedUt - 停止CPU使用率阈值
LoadStopUt - 调度15秒平均CPU运行队列长度阈值
LoadSchedR15s - 停止15秒平均CPU运行队列长度阈值
LoadStopR15s - 调度1分钟平均CPU运行队列长度阈值
LoadSchedR1m - 停止1分钟平均CPU运行队列长度阈值
LoadStopR1m - 调度15分钟平均CPU运行队列长度阈值
LoadSchedR15m - 停止15分钟平均CPU运行队列长度阈值
LoadStopR15m
提示
对fsched调度器的配置而言,以上所有配置项格式是数字, 不可设置单位
| 配置项 | 说明 |
|---|---|
| LoadSchedMem/LoadStopMem | 整数,默认单位是MiB |
| LoadSchedUt/LoadStopUt | 整数,默认单位是% |
| LoadSchedR15s/LoadStopR15s | 小数或整数,无单位 |
| LoadSchedR1m/LoadStopR1m | 小数或整数,无单位 |
| LoadSchedR15m/LoadStopR15m | 小数或整数,无单位 |
提示
- 每30秒检查一次当前负载是否符合阈值,各个负载的获取方式如下:
| 指标 | 数据来源 | /proc/stat具体字段 | 对应top输出 | 说明 |
|---|---|---|---|---|
| mem | /proc/meminfo | MemAvailable行或MemFree + Buffers + Cached | top内存行avail Mem字段(单位MB) | 可用内存大小,每5秒更新 |
| ut | /proc/stat | 主要使用idle字段,所有cpu时间 字段用于计算总时间 | 100% - id% 的EMA平滑值 | CPU利用率,15秒窗口EMA平滑,每5秒更新 |
| r15s | /proc/stat | procs_running行 procs_blocked行 | 无对应输出(可在Tasks行看到running数) | 15秒EMA平滑的运行队列长度 |
| r1m | /proc/stat | procs_running行 procs_blocked行 | 无对应输出(可在Tasks行看到running数) | 1分钟EMA平滑的运行队列长度 |
| r15m | /proc/stat | procs_running行 procs_blocked行 | 无对应输出(可在Tasks行看到running数) | 15分钟EMA平滑的运行队列长度 |
- 负载变化触发loadsched/loadstop动作的预期时间(估计的预期时间,与实际值可能有出入):
| 指标 | 预期时间 |
|---|---|
| mem | 35秒 |
| ut | 45秒 |
| r15s | 45秒 |
| r1m | 1分30秒 |
| r15m | 15分30秒 |
- 如果节点所在分区配置了调度阈值
LoadSched[XXX]- 在以下任一条件满足的情况下,节点会被drain,不再接受新任务:
- 节点剩余内存低于
LoadSchedMem - 节点CPU使用率高于
LoadSchedUt - 节点15秒平均CPU运行队列长度大于
LoadSchedR15s - 节点1分钟平均CPU运行队列长度大于
LoadSchedR1m - 节点15分钟平均CPU运行队列长度大于
LoadSchedR15m
- 节点剩余内存低于
- 在以下所有条件满足的情况下,节点会被undrain, 节点被undrain,可以继续接受新任务:
- 节点剩余内存高于
LoadSchedMem - 节点CPU使用率低于
LoadSchedUt - 节点15秒平均CPU运行队列长度小于
LoadSchedR15s - 节点1分钟平均CPU运行队 列长度小于
LoadSchedR1m - 节点15分钟平均CPU运行队列长度小于
LoadSchedR15m
- 节点剩余内存高于
- 在以下任一条件满足的情况下,节点会被drain,不再接受新任务:
- 如果节点所在分区配置了停止阈值
LoadStop[XXX]和调度阈值LoadSched[XXX]- 在以下任一条件满足的情况下,节点上的任务会按优先级(相同优先级时按开始时间)依次被STOP(stop的任务内存不会释放),先停止优先级低的任务(相同优先级时选开始晚的任务),直到剩余最后一个任务:
- 节点剩余内存低于
LoadStopMem - 节点CPU使用率高于
LoadStopUt - 节点15秒平均CPU运行队列长度大于
LoadStopR15s - 节点1分钟平均CPU运行队列长度大于
LoadStopR1m - 节点15分钟平均CPU运行队列长度大于
LoadStopR15m
- 节点剩余内存低于
- 在以下所有条件满足的情况下,节点被undrain的同时,被STOP的任务依次被CONTINUE,先continue优先级高的任务(相同优先级时选开始早的任务)
- 节点剩余内存高于
LoadSchedMem - 节点CPU使用率低于
LoadSchedUt - 节点15秒平均CPU运行队列长度小于
LoadSchedR15s - 节点1分钟平均CPU运行队列长度小于
LoadSchedR1m - 节点15分钟平均CPU运行队列长度小于
LoadSchedR15m
- 节点剩余内存高于
- 在以下任一条件满足的情况下,节点上的任务会按优先级(相同优先级时按开始时间)依次被STOP(stop的任务内存不会释放),先停止优先级低的任务(相同优先级时选开始晚的任务),直到剩余最后一个任务:
注意:
- 可以单独设置某一种资源的
LoadSched[XXX]或LoadSched[XXX] - 如果要设置某一种资源的
LoadStop[XXX],必须设置对应的LoadSched[XXX],并且根据资源类型满足以下对应条件,否则是错误配置,重配置会失败,slurmctld或slurmd重启会失败:LoadStopMem的值小于LoadSchedMemLoadStopUt的值大于LoadSchedUtLoadStopR15s的值大于LoadSchedR15sLoadStopR1m的值大于LoadSchedR1mLoadStopR15m的值大于LoadSchedR15m
- 节点在多个分区时,最后一个分区的配置起作用
- 由于阈值检查是定期轮询的,并不能保证节点资源一定不超出负载阈值的限制
示例
root@compute1:~# cat /etc/slurm/partitions.conf
#
# PARTITION partition-U7KH5
PartitionName=partition-U7KH5 Nodes=compute1 Default=YES LoadSchedMem=1300 LoadStopMem=1200 LoadSchedUt=80 LoadStopUt=90
# DUMMY
# NODES
NodeName=compute1 CPUs=16 RealMemory=13926 Weight=1 State=CLOUD