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.
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user