---
og:title: Monitoreo de Eficiencia
---

# 🔎 Monitoreo de Eficiencia

Una vez que se lanza un trabajo con **Slurm**, este reserva los recursos solicitados independientemente de si se usan en su totalidad. Es importante revisar los trabajos completados para verificar el uso real de los recursos asignados. Si se detecta baja eficiencia, ajustar los parámetros del job permitirá optimizar el uso del clúster, reduciendo el tiempo de espera de otros usuarios.

:::{warning}
Slurm contabiliza los recursos **reservados**, no los realmente utilizados. Esto es importante a la hora de pagar por horas de cómputo.
:::

## Trabajos finalizados
La forma más fácil de verificar la eficiencia de jobs es utilizar la herramienta **seff**.
```bash
$ seff <JOB-ID>
```
Donde el `<JOB-ID>` es el ID del job que fue lanzado (si no se modifica el nombre este debería estar en el archivo de output de slurm).

Otra herramienta útil y más completa es **sacct**.
```bash
$ sacct -j <JOB-ID> -o <FIELD1, FIELD2, ... >
```
Donde *FIELD1, FIELD2* es una lista separada por coma de campos requeridos. Para más información usar la flag `--helpformat`. 
Más información, consultar la man page: `man sacct`

### Ejemplo de uso
```bash
[ fulano@eulogia ] ~ $ seff 123456
Job ID: 123456 
Cluster: knl
User/Group: fulano/fulano
State: COMPLETED (exit code 0)
Nodes: 1
Cores per node: 256
CPU Utilized: 95-04:15:55
CPU Efficiency: 23.85% of 399-01:48:48 core-walltime
Job Wall-clock time: 1-13:24:48
Memory Utilized: 90.50 GB
Memory Efficiency: 99.11% of 91.32 GB (91.32 GB/node)

[ fulano@eulogia ] ~ $ sacct -j 123456 --units=G -o JobID,Cluster,User,Group,State,ExitCode,NNodes,NCPUs,TotalCPU,Elapsed,MaxRSS,ReqMem
JobID           Cluster      User     Group      State ExitCode   NNodes      NCPUS   TotalCPU    Elapsed     MaxRSS     ReqMem 
------------ ---------- --------- --------- ---------- -------- -------- ---------- ---------- ---------- ---------- ---------- 
123456              knl    fulano    fulano  COMPLETED      0:0        1        256 95-04:15:+ 1-13:24:48                91.32G 
123456.batch        knl                      COMPLETED      0:0        1        256 95-04:15:+ 1-13:24:48     90.50G            
```
**Interpretación de las métricas:**

- **NNodes/NCPUS**: Utilizó 1 nodo con 256 cores reservados
- **TotalCPU**: `95-04:15` = 95 días, 4 horas y 15 minutos de tiempo de CPU consumido
- **Elapsed**: `1-13:24:48` = tiempo real transcurrido (1 dia, 13 horas, 24 minutos, 48 segundos)
- **MaxRSS**: `90.50G` = memoria máxima utilizada
- **ReqMem**: `91.32G` = memoria reservada

:::{warning}
Las métricas de eficiencia solo son precisas para trabajos completados.  Consultar trabajos en ejecución puede mostrar valores incorrectos y llevar a conclusiones erróneas sobre el uso de recursos.
:::
:::{note}
Las estadísticas para trabajos cancelados o interrumpidos por limite de tiempo pueden ser imprecisas.
:::


## Trabajos en ejecución
Para monitorear los recursos de trabajos que están corriendo se puede usar la herramienta **sstat**
```bash
$ sstat -j <JOB(.STEP)> -o <FIELD1,FIELD2>
```
**Parámetros:**
- `JOB(.STEP)`: ID del un job o job.step específico
- `FIELD1,FIELD2,...`: Lista de campos a mostrar (separados por comas, sin espacios)
- La flag `--helpformat` muestra todos los campos disponibles
- La flag `--allsteps` lista información de todos los job steps

Más información, consultar la man page: `man sstat`

### Ejemplo

```bash
[ fulano@eulogia ] ~ $ sstat -o JobID,MaxRSS,MaxVMSize,AveCPU,MaxDiskRead,MaxDiskWrite --allsteps -j 987654
JobID            MaxRSS  MaxVMSize     AveCPU  MaxDiskRead MaxDiskWrite 
------------ ---------- ---------- ---------- ------------ ------------ 
987654.batch     42468K     40556K   00:00:23      2748259     22582639 
987655.0        626896K    620228K 3-00:32:44   4525852436   3186520762
```

**Interpretación:**
- `MaxRSS`: Memoria RAM máxima utilizada
- `MaxVMSize`: Memoria virtual máxima
- `AveCPU`: Tiempo promedio de CPU consumido
- `MaxDiskRead/Write`: Operaciones de I/O en bytes

## Visualización en Grafana

También se puede usar la herramienta **jobmetrics**. La cual genera un enlace a un dashboard de [Grafana](https://stats.ccad.unc.edu.ar) con métricas de uso de CPU y memoria del job indicado. Esto funciona tanto para jobs en ejecución como jobs ya finalizados.
```{code-block} console
$ jobmetrics $JOBID
```
Donde `JOBID` es el ID del trabajo que se desea inspeccionar.

Por defecto, se genera un enlace que cubre el rango de tiempo completo del job.
En caso de que el job aún se esté ejecutando, el rango se extenderá hasta el momento actual.
Si se desea monitorear su progreso en tiempo real, puede utilizar la opción `--follow`.

```{tip}
Para ver el JOBID de tus jobs encolados, ejecuta: `squeue --me`
```

### Ejemplo

```{code-block} console
$ squeue --me
JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
12345     multi     test   fulano  R    1:50:00      1 rome01

$ jobmetrics 12345
https://stats.ccad.unc.edu.ar/d/QFHyg4I7k/serafin?from=20250616T033428&to=20250617T135536&var-host=rome01.rome
```
