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

3.2 KiB

cockpit-nvidia-gpu

Plugin nativo de Cockpit 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.

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)

mkdir -p ~/.local/share/cockpit
ln -s /opt/cockpit-nvidia-gpu/gpu-monitor ~/.local/share/cockpit/gpu-monitor

Desinstalación

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.