如何通过SLURM sacct查看可选可追踪资源的统计数据?
问题背景
通过sacct命令可查询SLURM过往作业信息,--format参数能获取各类资源使用数据。SLURM支持在slurm.conf中通过AccountingStorageTRES配置项收集可选统计量,比如本地集群配置的fs/lustre(Lustre文件系统使用量)和ic/ofed(互连流量数据),但当前无法通过sacct提取这些数据:
- 执行
sacct --format=TRES%200 --jobid <some_jobid>仅返回默认字段,例如cpu=00:07:42,energy=0,fs/disk=7246316,mem=51556K,pages=132,vmem=0 - 执行
sacct -e列出的可配置字段中,无法确认MaxDiskWrite是否包含fs/lustre,也找不到互连流量相关字段 - 执行
sacct --jobid <some_jobid> -o ALL输出大量信息,但仍无fs/lustre和ic/ofed相关内容
解决方法
1. 确认TRES配置生效状态
首先要确保AccountingStorageTRES已正确配置,且SLURM服务(slurmctld和slurmd)已重启。通过以下命令检查当前配置:
scontrol show config | grep AccountingStorageTRES
输出内容需包含fs/lustre和ic/ofed,若未包含则需修改slurm.conf后重启SLURM服务。
2. 使用正确的TRES字段查询格式
sacct的TRES字段默认仅显示部分资源,要查看自定义TRES项,需指定完整字段或使用细分字段:
- 直接查询完整TRES内容(加宽字段宽度避免截断):
sacct --jobid <some_jobid> --format=JobID,User,Partition,TRES%300
若配置生效,输出中应能看到fs/lustre和ic/ofed的对应数据。
- 针对存储/流量类TRES,可使用细分字段:
sacct --jobid <some_jobid> --format=JobID,TRESUsageIn%300,TRESUsageOut%300
TRESUsageIn对应输入流量/使用量,TRESUsageOut对应输出流量/使用量。
3. 检查SLURM版本兼容性
部分自定义TRES字段的支持是在较新SLURM版本中引入的,旧版本可能无法正常显示数据。通过以下命令查看版本:
sinfo --version
建议升级至20.02及以上版本(不同版本对TRES的支持存在差异,需参考对应版本官方文档)。
4. 直接查询SLURM会计数据库(需权限)
若sacct仍无法返回数据,且你拥有SLURM会计数据库(通常为MySQL/MariaDB或PostgreSQL)的访问权限,可直接查询数据库表:
- 作业级TRES数据存储在
job_tres表,任务级数据存储在task_tres表。例如查询特定作业的TRES记录:
SELECT * FROM job_tres WHERE job_id = <some_jobid>;
可通过查看表结构确认是否存在fs/lustre和ic/ofed的对应条目。
5. 验证作业是否产生对应数据
若作业运行过程中未使用Lustre文件系统或产生节点间互连流量,SLURM不会记录这些数据。可运行一个明确使用Lustre存储或包含大量节点通信的测试作业,再用sacct查询验证。
内容的提问来源于stack exchange,提问作者Hubertus van Dam

