Files
msaldain 42720a70bc Initial commit: Cockpit GPU monitor plugin for NVIDIA
Native, self-contained Cockpit page (plain HTML/JS, no build step) that
polls nvidia-smi via cockpit.spawn to show live GPU utilization, memory,
temperature, power, fan speed, ~5min history sparklines, and the list of
processes using the GPU. No background systemd service; data collection
only happens while the page is open.
2026-07-15 10:40:20 -03:00

89 lines
3.2 KiB
Markdown

# cockpit-nvidia-gpu
Plugin nativo de [Cockpit](https://cockpit-project.org/) que agrega una página
"GPU" al menú lateral, mostrando el estado en vivo de GPUs NVIDIA (uso,
memoria, temperatura, consumo, fan) y los procesos que las están usando.
## Por qué existe
Cockpit no trae un panel de GPU. Los plugins de terceros existentes para esto
(por ejemplo `cockpit-gpu` de binbinsh/gridheap-dev) son proyectos chicos, sin
auditar, con instaladores que compilan contra el código fuente completo de
Cockpit e instalan un servicio systemd persistente sin pedir confirmación
clara. Este plugin es la alternativa: HTML + JavaScript plano, sin build
step, sin dependencias externas, sin nada corriendo en segundo plano — sólo
se ejecuta `nvidia-smi` bajo demanda mientras la página está abierta.
## Requisitos
- Cockpit (probado con versión ≥ 260).
- Driver NVIDIA instalado, con `nvidia-smi` disponible en el `PATH` del
sistema.
## Instalación
Recomendado: symlink desde un checkout del repo, así un `git pull` actualiza
el plugin al instante sin recopiar nada.
```bash
git clone https://gitea.mateosaldain.uy/<usuario>/cockpit-nvidia-gpu.git /opt/cockpit-nvidia-gpu
sudo mkdir -p /usr/share/cockpit
sudo ln -s /opt/cockpit-nvidia-gpu/gpu-monitor /usr/share/cockpit/gpu-monitor
```
Recargá la pestaña de Cockpit en el navegador y debería aparecer la entrada
**GPU** en el menú, junto a **Overview**. Si no aparece (paquete cacheado),
como último recurso: `sudo systemctl restart cockpit.socket`.
### Instalación alternativa para desarrollo (sin root)
```bash
mkdir -p ~/.local/share/cockpit
ln -s /opt/cockpit-nvidia-gpu/gpu-monitor ~/.local/share/cockpit/gpu-monitor
```
## Desinstalación
```bash
sudo rm /usr/share/cockpit/gpu-monitor # borra sólo el symlink
rm -rf /opt/cockpit-nvidia-gpu # opcional: borra también el checkout
```
## Estructura
```
gpu-monitor/
├── manifest.json # declara la entrada de menú "GPU" en Cockpit
├── index.html # esqueleto de la página
├── gpu.js # toda la lógica: polling, parseo de nvidia-smi, render
└── style.css # estilos autocontenidos
```
No hay `package.json` ni paso de build: los archivos se copian o symlinkean
tal cual.
## Screenshot
_(pendiente)_
## Extensibilidad
- **Multi-GPU**: ya soportado. `nvidia-smi --query-gpu=...` devuelve una
línea CSV por GPU física, y `gpu.js` itera todas las líneas, creando una
tarjeta por índice de GPU. En un servidor con una sola GPU (como Arkax
Server) simplemente se renderiza una tarjeta.
- **AMD / Intel**: toda la obtención de datos pasa por `fetchNvidiaMetrics()`
en `gpu.js`, que devuelve una forma de datos neutral
(`{index, util, memUsed, memTotal, tempC, powerW, fanPct}`). Para agregar
soporte AMD (`rocm-smi`) o Intel (`intel_gpu_top`), alcanza con escribir
una función equivalente que devuelva la misma forma y elegir cuál usar
(por detección del binario disponible o config), sin tocar el resto de la
página.
- **Procesos multi-GPU**: la lista de procesos hoy es global (no discrimina
por GPU). Para separarla por GPU, agregar `gpu_uuid` a
`--query-compute-apps` y cruzarlo con el `uuid` de cada GPU.
## Licencia
MIT — ver [LICENSE](LICENSE).