Danila (Dayfing)
Volver a publicaciones
3083 palabras15 min

Memoria DDR5 para desarrolladores: capacidad, velocidad, timings y ECC

Para la mayor parte del trabajo de desarrollo en 2026, 32 GB de DDR5 son el mínimo práctico, 64 GB son el punto cómodo en cuanto el día incluye contenedores, un clúster local de Kubernetes o una máquina virtual, y 96 a 128 GB o más quedan para varias VM, conjuntos de datos grandes o LLM locales con descarga de capas a la CPU. Compra esa capacidad en dos módulos iguales y no en cuatro, y hazla funcionar a la velocidad oficial de la CPU o con un perfil que hayas probado de verdad. Compara los kits por su latencia en nanosegundos, no solo por el número CAS, y elige ECC real únicamente en una plataforma que la admita y notifique los errores de extremo a extremo.

Dimensiona la memoria según la carga

La presión sobre la memoria la crean los procesos que se ejecutan a la vez, así que suma los picos que se solapan, no los promedios.

Editores, navegadores y servidores de lenguaje

El IDE rara vez es el problema por sí solo. La memoria se va en los servidores de lenguaje y los indexadores de cada proyecto abierto, y en un navegador lleno de documentación y de las aplicaciones que estás desarrollando. Para esta carga, 32 GB dejan sitio para las compilaciones y para la caché de archivos que acelera las compilaciones repetidas.

Contenedores y Kubernetes en Docker

En macOS y Windows, los contenedores se ejecutan dentro de una VM Linux con un techo fijo. Docker Desktop en macOS limita por defecto la memoria al 50 % de la del anfitrión, y en Windows el backend de WSL 2 hereda el ajuste memory de WSL, que también vale por defecto el 50 % de la memoria de Windows (configuración de WSL). En un portátil de 32 GB eso deja unos 16 GB para todos los contenedores, nodos de kind y compilaciones. Los agentes de código en paralelo multiplican la carga, porque cada worktree puede arrancar su propio servidor de desarrollo, su base de datos de pruebas y su compilación, como describe la guía de desarrollo con agentes.

Bases de datos y máquinas virtuales

La documentación de PostgreSQL sugiere empezar con el 25 % de la RAM para shared_buffers en un servidor dedicado, pero una estación de trabajo no lo es. Ajusta los búferes de la base de datos al conjunto de datos que consultas de verdad. Las VM son más sencillas: salvo que el hipervisor use ballooning o memoria dinámica, un invitado en marcha retiene la mayor parte de la RAM que tiene asignada. El mínimo de Microsoft para Windows 11 es de 4 GB, y un invitado con un IDE dentro necesita bastante más. Dos o tres invitados a la vez son un motivo habitual para quedarse corto con 64 GB.

LLM locales con descarga a la CPU

Los pesos ocupan aproximadamente parameters × bits per weight / 8 bytes, así que un modelo de 70B cuantizado a unos 4,5 bits por peso necesita cerca de 39 GB antes de la caché KV y de la sobrecarga del motor de ejecución. Las capas que no caben en la GPU viven en la memoria del sistema y se leen para cada token generado. La capacidad decide si el modelo llega a cargarse y el ancho de banda limita la velocidad de generación. La guía de hardware para LLM locales trata las GPU y la cuantización.

Mide tu propio pico antes de comprar

La cifra que importa es el pico de tu día normal más pesado. En Linux, registra la memoria disponible y la presión cada 30 segundos mientras trabajas:

#!/usr/bin/env bash
# Log memory headroom and pressure every 30 seconds (stop with Ctrl+C)
while true; do
  {
    printf '%s ' "$(date -Is)"
    awk '/^(MemTotal|MemAvailable|SwapTotal|SwapFree):/ {printf "%s %d ", $1, $2/1024}' /proc/meminfo
    awk '/^some/ {print "psi_some_" $2}' /proc/pressure/memory
  } >> "$HOME/mem-headroom.log"
  sleep 30
done

Después calcula el pico como la memoria total menos el valor más bajo de MemAvailable. Como MemAvailable cuenta la caché recuperable como libre, el resultado es lo que las aplicaciones necesitaron realmente:

awk '{t=$3; a=$5; if (min == "" || a < min) min = a}
     END {printf "peak used: %d MiB of %d MiB\n", t - min, t}' "$HOME/mem-headroom.log"

La presión importa tanto como el pico. some avg10 es la media de 10 segundos de la fracción de tiempo en la que al menos una tarea esperó por memoria. Valores sostenidos distintos de cero, un swap que crece o actuaciones del OOM killer en journalctl -k indican que a la máquina ya le falta memoria. El swap en una unidad rápida suaviza el golpe, pero no sustituye a la RAM, y la guía de compra de SSD NVMe cubre la parte del almacenamiento.

Para un comando pesado, como una compilación completa, ejecútalo en su propio cgroup y lee memory.peak, el uso máximo registrado para el cgroup y sus descendientes, caché de páginas incluida:

cat > peak-mem.sh <<'EOF'
#!/usr/bin/env bash
# Run a command and report the peak memory of its cgroup
"$@"
status=$?
cg="/sys/fs/cgroup$(cut -d: -f3 /proc/self/cgroup)"
echo "memory.peak: $(( $(cat "$cg/memory.peak") / 1048576 )) MiB" >&2
exit "$status"
EOF
chmod +x peak-mem.sh
systemd-run --user --scope --quiet ./peak-mem.sh make -j"$(nproc)"

Usa docker stats --no-stream para contenedores y nodos de kind, el gráfico de presión de memoria del Monitor de Actividad en macOS y la memoria confirmada en el Administrador de tareas en Windows. Añade margen y redondea hacia arriba hasta una capacidad que puedan dar dos módulos.

Canales y por qué dos módulos suelen ser mejor que cuatro

Las plataformas de escritorio convencionales, como AMD Ryzen 9000 en AM5 e Intel Core Ultra 200S, tienen dos canales DDR5. Cada módulo DDR5 tiene dos subcanales totalmente independientes de 32 bits de datos cada uno, de modo que un equipo de doble canal mueve 128 bits de datos por transferencia. El ancho de banda teórico máximo se deduce directamente:

bandwidth (GB/s) = channels × 8 bytes × data rate (MT/s) / 1000

2 × 8 × 5600 / 1000 = 89.6 GB/s    dual-channel DDR5-5600
2 × 8 × 6400 / 1000 = 102.4 GB/s   dual-channel DDR5-6400

Cuatro módulos en los mismos dos canales añaden capacidad, no ancho de banda.

Un módulo por canal frente a dos

Una placa de cuatro ranuras completamente ocupada funciona con dos módulos por canal, y cada módulo adicional carga las mismas líneas de señal. La especificación de AMD para el Ryzen 9 9950X indica DDR5-5600 con dos módulos y DDR5-3600 con cuatro, tanto de un rango como de dos (especificaciones del AMD Ryzen 9 9950X). El resumen de Intel indica que las velocidades máximas se refieren a un módulo por canal y que la carga adicional puede reducirlas (resumen de Intel Core Ultra desktop Series 2).

Elige primero la capacidad total y cómprala después en dos módulos: 2 × 32 GB para 64 GB, 2 × 48 GB para 96 GB y 2 × 64 GB para 128 GB. Usa las cuatro ranuras solo cuando dos módulos no alcancen, y asume una velocidad menor y un entrenamiento de memoria más largo. Añadir un segundo kit más adelante es un camino clásico hacia la inestabilidad, porque nadie validó esos kits juntos.

Velocidad, latencia CAS y latencia real

En DDR5-6000 CL30, la tasa de datos se expresa en megatransferencias por segundo y la latencia CAS se cuenta en ciclos de reloj. La DDR transfiere dos veces por ciclo, así que la latencia de la primera palabra en nanosegundos es:

true latency (ns) = CL × 2000 / data rate (MT/s)

DDR5-4800 CL40: 40 × 2000 / 4800 = 16.7 ns
DDR5-5600 CL46: 46 × 2000 / 5600 = 16.4 ns
DDR5-6000 CL30: 30 × 2000 / 6000 = 10.0 ns
DDR5-6400 CL32: 32 × 2000 / 6400 = 10.0 ns

Un CL más alto en un kit más rápido no lo hace peor automáticamente. CAS es solo una de las latencias, así que usa la fórmula para comparar kits, no para predecir lo que verá el software.

Para desarrollo, el orden de prioridades es capacidad, luego estabilidad, luego ancho de banda y por último latencia, porque una máquina que recurre al swap pierde más de lo que cualquier ajuste de latencias puede recuperar. La inferencia en CPU es la excepción: para las capas descargadas, los tokens por segundo no pueden superar el ancho de banda dividido entre los bytes de pesos leídos por token. Con 30 GB de pesos densos en RAM y 89,6 GB/s, el techo ronda los 3 tokens por segundo. Los modelos mixture-of-experts solo leen los expertos activos, lo que reduce ese coste, pero no la capacidad necesaria.

XMP y EXPO: la velocidad anunciada es overclocking

Un kit comercial guarda temporizaciones JEDEC estándar, que la placa usa por defecto, y perfiles del fabricante. Intel XMP 3.0 admite hasta cinco perfiles, tres del fabricante y dos reescribibles, y AMD EXPO ofrece perfiles ajustados para Ryzen en AM5. Ambos fabricantes lo llaman overclocking. Intel advierte que usar XMP por encima de las especificaciones puede anular la garantía del procesador (Intel XMP), y AMD indica que hacer funcionar la memoria fuera de las especificaciones publicadas por AMD anula la garantía de AMD (AMD EXPO).

El fabricante del kit validó el perfil en determinadas placas, y el controlador de memoria de tu CPU es una unidad distinta. Para una máquina de trabajo:

  1. Actualiza primero el firmware de la placa, porque el código de entrenamiento de memoria cambia entre versiones.
  2. Activa el perfil y deja que termine el primer arranque. El entrenamiento de la DDR5 tras un cambio de memoria puede tardar mucho más que un arranque normal.
  3. Ejecuta las pruebas de estabilidad que se describen más abajo antes de confiarle trabajo real a la máquina.
  4. Si aparecen errores, baja un escalón de velocidad o vuelve a los valores JEDEC en lugar de subir tensiones a ciegas.

Funcionar a la velocidad oficial de la CPU es una opción legítima para una máquina que debe ser correcta antes que rápida.

CUDIMM y el controlador de reloj

Un CUDIMM es un módulo sin búfer con un controlador de reloj (CKD) en el propio módulo. El estándar JEDEC DDR5CKD01 define el componente que regenera el reloj para módulos CUDIMM, CSODIMM y CAMM (controlador de reloj JEDEC DDR5), lo que mejora la calidad de la señal a velocidades altas.

Que sirva de algo depende de la plataforma. El resumen de Intel para Core Ultra 200S indica DDR5-6400 con un CUDIMM por canal, y el anuncio de marzo de 2026 de Core Ultra 200S Plus lo eleva a DDR5-7200 y añade soporte inicial para CUDIMM de cuatro rangos de hasta 128 GB por módulo en algunas placas con chipset Intel serie 800. En otras plataformas, revisa antes la especificación de la CPU y la lista de memoria cualificada de la placa. Un CUDIMM no es un módulo registrado ni tiene ECC side-band, salvo que la ficha lo diga expresamente.

La ECC on-die no convierte la memoria en ECC

Cada chip DDR5 incluye ECC on-die, que JEDEC cita entre las funciones que permiten fabricar con procesos avanzados (estándar JEDEC DDR5). Solo corrige errores dentro de la matriz DRAM. No protege el módulo, el conector ni el bus, y sus correcciones no se comunican al sistema operativo. La mención ECC on-die en un UDIMM normal describe la propia DDR5, no un módulo ECC.

La ECC side-band añade chips DRAM que almacenan bits de control para cada subcanal. El controlador de memoria comprueba cada acceso, corrige lo que el código permite, detecta errores más graves y comunica ambos al sistema operativo. Ese aviso es el verdadero beneficio: un contador de errores corregidos que crece en un módulo es una alerta temprana, mientras que una máquina sin ECC simplemente se cuelga o corrompe datos de vez en cuando.

UDIMM, RDIMM y muesca

Los ECC UDIMM no tienen búfer y encajan en placas de consumo y estaciones de entrada cuya plataforma admita ECC. Los RDIMM añaden un controlador de reloj con registro y corresponden a servidores y estaciones de gama alta. En DDR5, UDIMM y RDIMM tienen la muesca en posiciones distintas, así que no son intercambiables ni se pueden mezclar.

Qué plataformas admiten ECC real

La ECC solo funciona cuando la CPU, el chipset, el firmware y los módulos la admiten. A septiembre de 2026:

  • AMD Ryzen 9000 en AM5: AMD indica «Yes (Requires mobo support)» para la ECC en modelos como el 9950X. Comprueba el soporte de ECC UDIMM en el manual de la placa y el modelo exacto de CPU, porque las familias de escritorio de AMD difieren.
  • AMD EPYC 4005 en AM5: CPU de servidor para el mismo zócalo, con soporte de DDR5 ECC de hasta 192 GB.
  • AMD Ryzen Threadripper PRO 9000 WX-Series: hasta ocho canales de DDR5 RDIMM con ECC activada por defecto.
  • Intel Core Ultra 200S: la ECC requiere soporte tanto del procesador como del chipset (artículo de Intel sobre ECC). Intel indica soporte de ECC en W880 y no en Z890.
  • Procesadores Intel Xeon 600 para estaciones de trabajo en W890: DDR5 registrada con ECC.

Tras el primer arranque con módulos ECC, comprueba que la ECC está activa en lugar de darlo por hecho.

Portátiles: LPDDR5X soldada y CAMM2

La mayoría de los portátiles delgados usan LPDDR5X soldada a la placa o colocada en el encapsulado del procesador. Es rápida y eficiente, pero la capacidad queda fijada al comprar, y algunas plataformas la limitan mucho: Intel indica 32 GB como máximo para el Core Ultra 7 258V. Compra desde el principio la capacidad a la que habrías ampliado más adelante.

En el otro extremo están los diseños anchos. El AMD Ryzen AI Max+ PRO 395 usa una interfaz LPDDR5X-8000 de 256 bits con hasta 128 GB, lo que da 32 bytes × 8000 MT/s = 256 GB/s de ancho de banda teórico, dos veces y media el de un escritorio de doble canal con DDR5-6400. Por eso estas máquinas resultan interesantes para modelos locales, aunque no se puede ampliar nada.

CAMM2 es la alternativa reemplazable. El estándar JEDEC JESD318, publicado en diciembre de 2023, define Compression Attached Memory Modules en variantes DDR5 y LPDDR5/5X con un diseño de conector común. La disponibilidad depende del modelo de portátil, así que busca CAMM2 o LPCAMM2 en la especificación del fabricante. Los portátiles con ranuras SO-DIMM siguen siendo la vía de ampliación más sencilla.

Prueba la estabilidad con memtest86+ y lee los errores en Linux

Prueba cada kit nuevo, cada cambio de perfil y cada actualización de firmware que modifique el entrenamiento de memoria. Memtest86+ es un comprobador de memoria autónomo, gratuito y de código abierto. La versión actual, v8.10, es de mayo de 2026, y un único binario arranca tanto en UEFI como en BIOS legacy (memtest86+). El binario no está firmado por Microsoft, así que desactiva Secure Boot durante la prueba y vuelve a activarlo después. Una pasada completa comprueba toda la memoria, y una ejecución más larga aumenta la confianza. Si un sistema con overclocking falla, repite la prueba con los valores por defecto y después módulo a módulo. Es un proyecto distinto de PassMark MemTest86.

Haz una pasada con los valores JEDEC cuando la máquina sea nueva, varias pasadas tras activar un perfil y después una prueba de carga dentro del sistema operativo:

sudo apt install stressapptest
# Test 75% of RAM for one hour with CPU-intensive copy threads
stressapptest -s 3600 -M "$(awk '/MemTotal/ {printf "%d", $2*0.75/1024}' /proc/meminfo)" -W

Con ECC, Linux informa de los errores corregidos y no corregidos mediante los contadores EDAC de sysfs (documentación EDAC del kernel):

ls /sys/devices/system/edac/mc/
sudo dmesg | grep -i -E 'edac|ecc'
grep -H . /sys/devices/system/edac/mc/mc*/ce_count /sys/devices/system/edac/mc/mc*/ue_count

sudo apt install rasdaemon
sudo ras-mc-ctl --status
sudo ras-mc-ctl --error-count

Un directorio /sys/devices/system/edac/mc/ vacío significa que no hay controlador EDAC para ese controlador de memoria o que la ECC está desactivada, diga lo que diga la etiqueta del módulo, y dmidecode -t memory solo muestra lo que afirma el firmware. Trata cualquier error no corregido como un incidente de hardware y un contador de errores corregidos que crece en un módulo como motivo para sustituirlo. Las versiones recientes de rasdaemon agrupan estas opciones en subcomandos, así que consulta ras-mc-ctl --help.

Configuraciones recomendadas por caso de uso

Son puntos de partida, y tu pico medido manda sobre ellos.

Caso de uso Capacidad Configuración Notas
IDE, navegador, algunos contenedores 32 GB 2 × 16 GB Ampliar implica sustituir ambos módulos
Contenedores, Kubernetes en Docker, agentes en paralelo 64 GB 2 × 32 GB Sube los límites de Docker Desktop o WSL
Varias VM, bases de datos grandes, compilación de monorepos 96 a 128 GB 2 × 48 GB o 2 × 64 GB Quédate en un módulo por canal
LLM locales con descarga a la CPU 128 GB o más 2 × 64 GB o una plataforma más ancha El ancho de banda limita la velocidad de las capas descargadas
Corrupción silenciosa costosa 64 GB o más, ECC ECC UDIMM en AM5 o W880, RDIMM en Threadripper PRO o Xeon Comprueba los contadores EDAC
Portátil 32 GB, 64 GB para VM LPDDR5X, SO-DIMM o LPCAMM2 Si va soldada, compra la capacidad final desde el principio

Por encima de 128 GB, un escritorio de doble canal necesita cuatro módulos a una velocidad oficial menor, algo que Threadripper o Xeon evitan.

Lista de comprobación antes de hacer el pedido

  1. Registra memoria y presión durante una semana representativa y añade margen.
  2. Compra toda la capacidad en un único kit de dos módulos idénticos.
  3. Revisa la tabla de memoria de la CPU y la lista cualificada de la placa para el tipo exacto: UDIMM, CUDIMM, ECC UDIMM o RDIMM.
  4. Compara los kits por latencia real en nanosegundos y por velocidad.
  5. Actualiza el firmware, activa XMP o EXPO solo si vas a probarlo y deja que termine el entrenamiento.
  6. Ejecuta memtest86+ con los valores por defecto y con el perfil, y después una prueba de carga en el sistema.
  7. Para ECC, confirma primero el soporte de la plataforma y luego comprueba los contadores EDAC en Linux.
  8. En un portátil con memoria soldada, compra la capacidad que necesitarás al final de su vida útil.
  9. Vuelve a revisar la presión de memoria al cabo de unos meses, sobre todo después de añadir VM, clústeres o modelos locales.

Más publicaciones