42720a70bc
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.
89 lines
3.2 KiB
Markdown
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).
|