Table of Contents

Cheatsheet SLURM

Ver logs de SLURM desde login

sudo -u slurm cat /var/log/slurmctld.log
Actualizar partición

Con el siguiente comando se actualiza temporalmente el tiempo máximo que puede tener un job para ingresar a una partición pero hasta que se reincie el slurmctld donde vuelve a tomar el que esté definido en slurm.conf:

scontrol update PartitionName=cpunode MaxTime=2-0

Monitorear consumo de QOS

scontrol show assoc_mgr | grep "QOS=qosprueba(32)" -A 21

El output va a ser algo asi:

QOS=qosprueba(32)
    UsageRaw=56629.000000
    GrpJobs=N(1) GrpJobsAccrue=N(0) GrpSubmitJobs=N(1) GrpWall=N(59.72)
    GrpTRES=cpu=N(64),mem=N(506808),energy=N(0),node=N(1),billing=N(64),fs/disk=N(0),vmem=N(0),pages=N(0),gres/gpu=N(4),gres/gpumem=N(0),gres/gpuutil=N(0)
    GrpTRESMins=cpu=944(943),mem=N(30264884),energy=N(0),node=N(59),billing=N(943),fs/disk=N(0),vmem=N(0),pages=N(0),gres/gpu=2000(1),gres/gpumem=N(0),gres/gpuutil=N(0)
    GrpTRESRunMins=cpu=N(64),mem=N(506808),energy=N(0),node=N(1),billing=N(64),fs/disk=N(0),vmem=N(0),pages=N(0),gres/gpu=N(4),gres/gpumem=N(0),gres/gpuutil=N(0)
    MaxWallPJ=
    MaxTRESPJ=
    MaxTRESPN=
    MaxTRESMinsPJ=
    MinPrioThresh= 
    MinTRESPJ=
    PreemptMode=OFF
    Priority=0
    Account Limits
      cuentaprueba
        MaxJobsPA=N(1) MaxJobsAccruePA=N(0) MaxSubmitJobsPA=N(1)
        MaxTRESPA=cpu=N(64),mem=N(506808),energy=N(0),node=N(1),billing=N(64),fs/disk=N(0),vmem=N(0),pages=N(0),gres/gpu=N(4),gres/gpumem=N(0),gres/gpuutil=N(0)
    User Limits
      utest(10054)
        MaxJobsPU=N(1) MaxJobsAccruePU=N(0) MaxSubmitJobsPU=N(1)
        MaxTRESPU=cpu=N(64),mem=N(506808),energy=N(0),node=N(1),billing=N(64),fs/disk=N(0),vmem=N(0),pages=N(0),gres/gpu=N(4),gres/gpumem=N(0),gres/gpuutil=N(0)

Ver la línea:

GrpTRESMins=cpu=944(943)

Donde 944 es la cantidad de horas disponibles y 943 es las utilizadas al momento.

Cambiar de estado

Drain:

scontrol update NodeName=cn0xx State=DRAIN Reason="maintenance"

Undrain:

scontrol update NodeName=cn0xx State=DOWN Reason="undraining"
scontrol update NodeName=cn0xx State=RESUME

Agregar usuario administrador

sacctmgr create user name=<user> account=users
sacctmgr modify user name=<user> set defaultaccount=users
sacctmgr modify user name=<user> set adminlevel=administrator

Monitorear tiempo de espera y priority

Si los usuarios se quejan de que su job tarda mucho en entrar, podemos en primera instancia utilizar squeue con un poco más de información:

squeue -o "%.7i %.20V %.10a %.15u %.5t %.7C %.7Q %.R"

Esto nos permite ver fecha de envío del job, y la priority del mismo, junto con el job size.

Si queremos ver en más detalle calcular el tiempo de espera de cada job:

sacct -Xa --starttime=0215 --parsable --endtime=now --format=JobID,Submit,Start,Priority,Account,User%10,AllocCPUs,State | awk -F'|' '
NR==1 {
    # Print header with fixed widths
    printf "%-15s %-20s %-20s %-10s %-10s %-10s %-10s %-12s %-10s\n", $1, $2, $3, $4, $5, $6, $7, $8, "WaitDays"
    next
}
$3 ~ /[0-9]/ {
    s1 = $2; s2 = $3;
    gsub(/[-T:]/, " ", s1);
    gsub(/[-T:]/, " ", s2);
    
    # Calculate days
    w_days = (mktime(s2) - mktime(s1)) / 86400;

    # Print data rows with matching fixed widths
    # %-15s = string, left-aligned, 15 chars wide
    # %-10.2f = float, 2 decimals, 10 chars wide
    printf "%-15s %-20s %-20s %-10s %-10s %-10s %-10s %-12s %-10.2f\n", $1, $2, $3, $4, $5, $6, $7, $8, w_days
}'

Veremos que en la última columna está el tiempo que tardó el job en entrar a queue.

Ajustar la fecha de –starttime acordemente.

Para analizar usuarios por fairshare (peor fairshare) usar opción –reverse si se quiere ver al revez.

sshare -aU | awk 'NR<=2; NR>2 {print $0 | "sort -k7,7rn"}'