找出slurm作业的CPU时间和内存使用情况

时间:2014-06-03 16:35:12

标签: slurm

我认为这是一个非常微不足道的问题,但是,我正在寻找能够显示slurm作业ID所使用的CPU时间和内存的(我猜的猜测)命令。

5 个答案:

答案 0 :(得分:38)

你是对的,因为sacct命令是你正在寻找的。 --format开关是另一个关键元素。如果您运行此命令:

sacct -e

您将获得可用于 - 格式开关的不同字段的打印输出。每个字段的详细信息在手册页的“作业帐户字段”部分中进行了描述。对于CPU时间和内存,CPUTime和MaxRSS可能是您正在寻找的。如果您想要以秒为单位的数字,也可以使用cputimeraw,而不是通常的Slurm时间格式。

sacct --format="CPUTime,MaxRSS"

答案 1 :(得分:14)

sacct确实是用于完成工作的命令。对于正在运行的作业,您可以查看sstat命令。

答案 2 :(得分:6)

@ aaron.kizmiller是对的,sacct是要使用的命令。

可以通过将所有以下字段传递到saact --format="field,field"

来获取

<强> Fields

Account           AdminComment      AllocCPUS         AllocGRES
AllocNodes        AllocTRES         AssocID           AveCPU
AveCPUFreq        AveDiskRead       AveDiskWrite      AvePages
AveRSS            AveVMSize         BlockID           Cluster
Comment           ConsumedEnergy    ConsumedEnergyRaw CPUTime
CPUTimeRAW        DerivedExitCode   Elapsed           ElapsedRaw
Eligible          End               ExitCode          GID
Group             JobID             JobIDRaw          JobName
Layout            MaxDiskRead       MaxDiskReadNode   MaxDiskReadTask
MaxDiskWrite      MaxDiskWriteNode  MaxDiskWriteTask  MaxPages
MaxPagesNode      MaxPagesTask      MaxRSS            MaxRSSNode
MaxRSSTask        MaxVMSize         MaxVMSizeNode     MaxVMSizeTask
McsLabel          MinCPU            MinCPUNode        MinCPUTask
NCPUS             NNodes            NodeList          NTasks
Priority          Partition         QOS               QOSRAW
ReqCPUFreq        ReqCPUFreqMin     ReqCPUFreqMax     ReqCPUFreqGov
ReqCPUS           ReqGRES           ReqMem            ReqNodes
ReqTRES           Reservation       ReservationId     Reserved
ResvCPU           ResvCPURAW        Start             State
Submit            Suspended         SystemCPU         Timelimit
TotalCPU          UID               User              UserCPU
WCKey             WCKeyID           WorkDir

例如,要列出所有作业ID,已用时间和最大VM大小,您可以运行:

sacct --format='JobID,Elapsed,MaxVMSize'

答案 3 :(得分:2)

尽管已经存在出色的解决方案,但我有另一个看法。

该方法可以对很多节点进行实时监控。

我们可以编写脚本monitor.sh来获取统计信息(以内存为例),然后将其记录到文件中。

#! /bin/sh
if [ -f "./free.log_"`hostname` ];then
    echo "file existed , now deleting it !"
    rm ./free.log_`hostname`
fi
echo "start recording!"

while true
do
    echo "******["`date +%Y-%m-%d_%H:%M:%S`"]******" >> free.log_`hostname`
    free -s 1 -c 2 -h|sed -n 1,2p >> free.log_`hostname`
done

然后编写作业脚本sbatch_input.sh,可以通过sbatch调用。

#! /bin/sh
#SBATCH -N 2
#SBATCH -p cnall
srun hostname
srun ./monitor.sh

调用脚本

sbatch ./sbatch_input.sh

我们可以看到一些日志生成。

答案 4 :(得分:0)

其他人回答sacct输出的所有详细信息格式,这对于查看表中聚合的多个作业非常有用。

但是,有时您希望更详细地查看特定作业,因此可以判断您的作业是否有效地使用了分配的资源。为此,seff非常有用。语法就是seff <Jobid>。例如,这是我最近的一项工作(失败了):

$ seff 15780625

Job ID: 15780625
Cluster: mycluster
User/Group: myuser/mygroup
State: OUT_OF_MEMORY (exit code 0)
Nodes: 1
Cores per node: 16
CPU Utilized: 12:06:01
CPU Efficiency: 85.35% of 14:10:40 core-walltime
Job Wall-clock time: 00:53:10
Memory Utilized: 1.41 GB
Memory Efficiency: 70.47% of 2.00 GB

请注意,关键的CPU指标“ CPU使用率”对应于sacct中的 TotalCPU 字段,而“内存使用率”对应于 MaxRSS