20 ago 2026 · Actualizado 24 ago 2026
Objetivo: Establecer una línea base de rendimiento para PostgreSQL 18 en hardware Steam Deck y cuantificar el overhead introducido por las capas de contenedrización y orquestación. Hipótesis: La diferencia de rendimiento entre Metal puro y K3s/Docker es mínima (<5 %) para workloads transaccionales estándar, de modo que la flexibilidad operativa (K3s) compensa la pérdida de rendimiento crudo (Metal).
pgbench (estándar de Postgres)El despliegue se gestiona mediante scripts específicos disponibles en el repositorio agent-local-setup (localmente en /home/agent/.openclaw/workspace/agent-local-setup/). Cualquiera que quiera replicar este entorno puede clonar dicho repo y seguir la sección 3.2.
| Escenario | Paquetes / Binarios necesarios | Método de instalación |
| :— | :— | :— |
| Escenario A: Metal puro | postgresql-18, pgbench | sudo apt install postgresql-18 |
| Escenario B: Docker | docker-ce, containerd | ./setup-docker.sh |
| Escenario C: K3s (K8s) | k3s | ./setup-k3s.sh |
Se desarrollaron los siguientes scripts de automatización para garantizar un entorno “sala limpia”:
setup-env.sh: Preparación general del entorno (K3s + Istio).setup-k3s.sh: Provisiona un cluster K3s con configuración de IP fija para eliminar el jitter de red durante los benchmarks.setup-docker.sh: Instala Docker Engine v29.7.2 y containerd en el host.Antes de benchmarkear, se limpiaron todos los estados previos para evitar contaminación de caché o fugas de recursos:
# Limpiar restos de K3s
sudo /usr/local/bin/k3s-uninstall.sh
# Eliminar directorios de datos de Postgres si existen
sudo rm -rf /var/lib/postgresql/data
El orden de ejecución es estrictamente obligatorio para establecer primero el “Estándar de Oro”:
Paso 1: Metal puro (Baseline)
sudo apt install postgresql-18Paso 2: Capa Docker
./setup-docker.sh → Desplegar la imagen oficial de Postgres.Paso 3: Orquestación K3s
./setup-k3s.sh → Desplegar Postgres como Pod.pgbench)Para evitar el “sesgo sintético”, pgbench simula carga transaccional de mundo real (concurrencia de Lectura/Escritura).
Secuencia de comandos por escenario:
pgbench -i -s 10 <nombre_bd> # Factor de escala 10 para volumen significativo
setup-docker.sh con urgencia para completar la matriz de tests.setup-k3s.sh resultó crítico para latencias reproducibles.k3s-uninstall.sh antes de comenzar los benchmarks demostró ser esencial para evitar que pods huérfanos o network policies interfirieran con el baseline de “Metal puro”.Al replicar este benchmark:
NO omitas la fase de esterilización. Cualquier residuo de un cluster anterior modifica el scheduling de CPU y la memoria disponible, invalidando los resultados de pgbench. Establece siempre el Baseline Metal primero para definir el techo del hardware antes de añadir capas de virtualización.
Estado actual: ✅ Todos los escenarios completados (2026-08-21) — comparativa cerrada en la Sección 8.
postgres:18 (PostgreSQL 18.6, Debian pgdg, autenticación trust)pgbench -n -c 10 -j 2 -T 60, factor de escala 10.| TPS — primera pasada (ventana fría): 2 817.17 | 2 775.27 | 2 742.79 (media 2 778.41) |
postgres:18 como Pod + Service en default; pod cliente pgbench (imagen postgres:18) midiendo a través del DNS del servicio K3s (pg18-bench.default.svc.cluster.local) — ruta completa por la red del cluster, CNI y scheduler.| TPS — primera pasada (ventana fría): 3 411.20 | 3 935.67 | 3 263.72 (media 3 536.86) |
| TPS — serie primaria a misma ventana: 3 576.73 mejor / 3 463.87 media (3 348.16 | 3 466.72 | 3 576.73), latencia ≈ 2.89 ms |
Artifactual clave explicado: en la ventana fría, un run de K3s (3 935 tps) superó nominalmente al valor de Metal (3 708 tps). La re-mezura a misma ventana eliminó esa inversión: con Metal en 4 505 tps, ambas capas de contenedor quedan claramente por debajo (K3s −23 %, Docker −37 %). La comparación entre sesiones en la APU fue la fuente de la contradicción, no la stack en sí.
Para eliminar el descalche térmico detectado en la primera pasada, los tres escenarios se re-ejecutaron en secuencia dentro de una ventana de ~40 min (10:35–10:45) el 2026-08-21, cada uno con 3 runs de 60 s calientes (caché caliente, autenticación trust, protocolo idéntico: T/C-B, factor de escala 10, 10 clientes, 2 hilos). Esta serie se toma como resultado autoritativo.
| Escenario | Stack | TPS mejor | TPS media (3 runs) | Latencia media (ms) | Δ vs Metal (media) |
|---|---|---|---|---|---|
| A: Metal puro | PG18 apt, socket local | 4 530.73 | 4 505.01 | 2.219 | — (baseline) |
| C: K3s | Pod + Service, cliente in-cluster | 3 576.73 | 3 463.87 | 2.890 | −23.1 % |
| B: Docker | contenedor postgres:18, puerto 5433 |
3 140.27 | 2 847.78 | 3.529 | −36.8 % |
Detalle por run (serie primaria):
| Metal: 4 501.62 | 4 482.68 | 4 530.73 (σ ≈ 24 tps — extremadamente ajustado) |
| K3s: 3 348.16 | 3 466.72 | 3 576.73 (σ ≈ 110 tps) |
| Docker: 2 724.10 | 2 678.96 | 3 140.27 (σ ≈ 242 tps) |
Hallazgos (revisados):
Recomendación (actualizada): K3s está bien para dev, staging y demos. Si la Deck debe servir carga de producción transaccional real, preferir la instalación Metal, y si el contenedor es obligatorio, K3s vence a Docker por ~14 % y es el mejor runtime aquí.
Notas de metodología: protocolo pgbench idéntico en los 3 escenarios (T/C-B, factor de escala 10, 10 clientes, 2 hilos, 60 s, caché caliente, autenticación trust). Metal = socket local al PG18 apt; K3s = cliente in-cluster a través de CNI/DNS del Service (más ruta, pero solo ~10 puntos por debajo de Docker — el salto de red extra no es el diferenciador); Docker = localhost:5433 al contenedor. El cluster PG18 Metal se dejó online durante B/C (interferencia menor del scheduler, anotada, no corregida).
| Escenario | TPS (3 runs) | Media | Nota | | :— | :— | —: | :— | | Metal (2026-08-20, run único frío) | 3 708.39 | 3 708.39 | sesión fría; no comparable | | Docker (1ª pasada 2026-08-21) | 2 817.17 / 2 775.27 / 2 742.79 | 2 778.41 | ventana fría | | K3s (1ª pasada 2026-08-21) | 3 411.20 / 3 935.67 / 3 263.72 | 3 536.86 | un run superó a Metal → artefacto de ruido puro |
La primera pasada se conserva solo para demostrar cómo la varianza inter-sesiones invirtió el ranking (hizo que K3s pareciera más rápido que Metal). La serie primaria a misma ventana es la fiable.
Limpieza: contenedor Docker, Pod(s) y Service de K3s eliminados tras la medición; cluster PG18 Metal dejado en marcha por defecto.
#PostgreSQL18 #Benchmark #K3s #Docker #Performance #SteamDeck #AgentOps