Danila (Dayfing)
Retour aux articles
3 033 mots14 min

Mémoire DDR5 pour développeurs : capacité, fréquence, timings et ECC

Pour la plupart des travaux de développement en 2026, 32 Go de DDR5 constituent le plancher pratique, 64 Go deviennent la norme confortable dès que des conteneurs, un cluster Kubernetes local ou une machine virtuelle font partie de la journée, et 96 à 128 Go ou plus servent à plusieurs VM, à de gros jeux de données ou à des LLM locaux avec déchargement sur le CPU. Achetez cette capacité en deux modules identiques plutôt qu'en quatre, et faites-la tourner à la fréquence officielle du processeur ou avec un profil que vous avez réellement testé. Comparez les kits par leur latence en nanosecondes, pas par le seul chiffre CAS, et ne choisissez une vraie ECC que sur une plateforme qui la prend en charge et remonte les erreurs de bout en bout.

Dimensionner la mémoire selon la charge

La pression mémoire vient de ce qui tourne en même temps : additionnez les pics qui se chevauchent, pas les moyennes.

Éditeurs, navigateurs et serveurs de langage

L'IDE seul pose rarement problème. La mémoire part dans les serveurs de langage et les indexeurs de chaque projet ouvert, ainsi que dans un navigateur rempli de documentation et des applications que vous développez. Pour cette seule charge, 32 Go laissent de la place aux compilations et au cache de fichiers qui accélère les compilations répétées.

Conteneurs et Kubernetes dans Docker

Sous macOS et Windows, les conteneurs tournent dans une VM Linux au plafond fixe. Docker Desktop sur macOS limite par défaut la mémoire à 50 % de celle de l'hôte, et sous Windows le backend WSL 2 hérite du paramètre memory de WSL, lui aussi fixé par défaut à 50 % de la mémoire de Windows (configuration de WSL). Sur un portable de 32 Go, il reste donc environ 16 Go pour l'ensemble des conteneurs, des nœuds kind et des compilations. Les agents de code en parallèle multiplient la charge, car chaque worktree peut lancer son propre serveur de développement, sa base de test et sa compilation, comme le décrit le guide du développement agentique.

Bases de données et machines virtuelles

La documentation de PostgreSQL suggère de commencer à 25 % de la RAM pour shared_buffers sur un serveur dédié, mais un poste de travail n'en est pas un. Dimensionnez les tampons de la base selon le jeu de données réellement interrogé. Les VM sont plus simples : sauf si l'hyperviseur utilise le ballooning ou la mémoire dynamique, un invité en cours d'exécution conserve l'essentiel de la RAM qui lui est attribuée. Le minimum de Microsoft pour Windows 11 est de 4 Go, et un invité qui fait tourner un IDE a besoin de bien plus. Deux ou trois invités simultanés sont une raison fréquente de dépasser 64 Go.

LLM locaux avec déchargement sur le CPU

Les poids occupent environ parameters × bits per weight / 8 octets, donc un modèle de 70B quantifié à environ 4,5 bits par poids demande près de 39 Go avant le cache KV et le surcoût du moteur d'exécution. Les couches qui ne tiennent pas dans le GPU résident en mémoire système et sont relues à chaque jeton généré. La capacité décide si le modèle se charge, la bande passante plafonne la vitesse de génération. Le guide du matériel pour LLM locaux traite des GPU et de la quantification.

Mesurer son propre pic avant d'acheter

Le chiffre qui compte est le pic de votre journée normale la plus lourde. Sous Linux, enregistrez la mémoire disponible et la pression toutes les 30 secondes pendant que vous travaillez :

#!/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

Calculez ensuite le pic comme la mémoire totale moins la plus petite valeur de MemAvailable. Comme MemAvailable compte le cache récupérable comme libre, le résultat correspond à ce dont les applications avaient réellement besoin :

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 pression compte autant que le pic. some avg10 est la moyenne sur 10 secondes de la part du temps pendant laquelle au moins une tâche attendait de la mémoire. Des valeurs durablement non nulles, un swap qui grossit ou des interventions de l'OOM killer dans journalctl -k signifient que la machine manque déjà de mémoire. Un swap sur un disque rapide atténue le problème sans remplacer la RAM, et le guide d'achat des SSD NVMe couvre le côté stockage.

Pour une commande lourde, comme une compilation complète, lancez-la dans son propre cgroup et lisez memory.peak, l'utilisation maximale enregistrée pour le cgroup et ses descendants, cache de pages compris :

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)"

Utilisez docker stats --no-stream pour les conteneurs et les nœuds kind, le graphique de pression mémoire du Moniteur d'activité sous macOS et la mémoire validée dans le Gestionnaire des tâches sous Windows. Ajoutez une marge, puis arrondissez à une capacité que deux modules peuvent fournir.

Canaux, et pourquoi deux modules valent généralement mieux que quatre

Les plateformes de bureau grand public comme AMD Ryzen 9000 sur AM5 et Intel Core Ultra 200S ont deux canaux DDR5. Chaque module DDR5 comporte deux sous-canaux entièrement indépendants de 32 bits de données chacun, si bien qu'un PC bicanal transfère 128 bits de données par transfert. La bande passante théorique maximale en découle :

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

Quatre modules sur les mêmes deux canaux ajoutent de la capacité, pas de la bande passante.

Un module par canal ou deux

Une carte à quatre emplacements entièrement remplie fonctionne avec deux modules par canal, et chaque module supplémentaire charge les mêmes lignes de signal. La fiche d'AMD pour le Ryzen 9 9950X indique DDR5-5600 pour deux modules et DDR5-3600 pour quatre, en simple comme en double rang (caractéristiques de l'AMD Ryzen 9 9950X). La brochure d'Intel précise que les fréquences maximales s'appliquent à un module par canal et que la charge supplémentaire peut les réduire (présentation Intel Core Ultra desktop Series 2).

Choisissez d'abord la capacité totale, puis achetez-la en deux modules : 2 × 32 Go pour 64 Go, 2 × 48 Go pour 96 Go, 2 × 64 Go pour 128 Go. N'utilisez quatre emplacements que si deux modules ne suffisent pas, en acceptant une fréquence plus basse et un entraînement mémoire plus long. Ajouter un second kit plus tard mène souvent à l'instabilité, car les deux kits n'ont jamais été validés ensemble.

Fréquence, latence CAS et latence réelle

Dans DDR5-6000 CL30, le débit est exprimé en mégatransferts par seconde et la latence CAS en cycles d'horloge. La DDR transfère deux fois par cycle, donc la latence du premier mot en nanosecondes vaut :

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 plus élevé sur un kit plus rapide n'est pas forcément moins bon. La latence CAS n'est qu'un timing parmi d'autres : servez-vous de la formule pour comparer des kits, pas pour prédire ce que verra le logiciel.

Pour le développement, l'ordre des priorités est la capacité, puis la stabilité, puis la bande passante, puis la latence, car une machine qui swappe perd bien plus que ce qu'un timing peut rattraper. L'inférence sur CPU fait exception : pour les couches déchargées, le nombre de jetons par seconde ne peut pas dépasser la bande passante divisée par les octets de poids lus par jeton. Avec 30 Go de poids denses en RAM et 89,6 Go/s, le plafond est d'environ 3 jetons par seconde. Les modèles mixture-of-experts ne lisent que les experts actifs, ce qui réduit ce coût mais pas la capacité nécessaire.

XMP et EXPO : la fréquence annoncée est un overclocking

Un kit du commerce stocke des timings JEDEC standard, utilisés par défaut par la carte, ainsi que des profils du fabricant. Intel XMP 3.0 prend en charge jusqu'à cinq profils, trois du fabricant et deux réinscriptibles, et AMD EXPO fournit des profils adaptés à Ryzen sur AM5. Les deux constructeurs parlent d'overclocking. Intel indique qu'utiliser XMP au-delà des spécifications peut annuler la garantie du processeur (Intel XMP), et AMD que faire fonctionner la mémoire hors des spécifications publiées par AMD annule la garantie AMD (AMD EXPO).

Le fabricant du kit a validé le profil sur certaines cartes, et le contrôleur mémoire de votre processeur est un exemplaire distinct. Pour une machine de travail :

  1. Mettez d'abord à jour le firmware de la carte, car le code d'entraînement mémoire évolue d'une version à l'autre.
  2. Activez le profil et laissez le premier démarrage se terminer. L'entraînement de la DDR5 après un changement de mémoire peut durer bien plus longtemps qu'un démarrage normal.
  3. Lancez les tests de stabilité décrits plus bas avant de confier du vrai travail à la machine.
  4. En cas d'erreurs, descendez d'un cran de fréquence ou revenez aux valeurs JEDEC au lieu d'augmenter les tensions au hasard.

Rester à la fréquence officielle du processeur est un choix légitime pour une machine qui doit être juste avant d'être rapide.

CUDIMM et pilote d'horloge

Un CUDIMM est un module non tamponné doté d'un pilote d'horloge (CKD) sur le module. La norme JEDEC DDR5CKD01 définit le composant qui régénère l'horloge pour les modules CUDIMM, CSODIMM et CAMM (pilote d'horloge JEDEC DDR5), ce qui améliore la qualité du signal aux fréquences élevées.

C'est la prise en charge par la plateforme qui décide de l'intérêt. La brochure d'Intel pour Core Ultra 200S indique DDR5-6400 pour un CUDIMM par canal, et l'annonce de mars 2026 des Core Ultra 200S Plus porte ce chiffre à DDR5-7200 et ajoute une prise en charge précoce des CUDIMM à quatre rangs, jusqu'à 128 Go par module, sur certaines cartes à chipset Intel série 800. Ailleurs, vérifiez d'abord la fiche du processeur et la liste de mémoires qualifiées de la carte. Un CUDIMM n'est pas un module registered et n'a pas d'ECC side-band, sauf mention explicite.

L'ECC on-die n'est pas de la mémoire ECC

Chaque puce DDR5 intègre une ECC on-die, que la JEDEC cite parmi les fonctions qui permettent de fabriquer sur des procédés avancés (norme JEDEC DDR5). Elle ne corrige les erreurs qu'à l'intérieur de la matrice DRAM. Elle ne protège ni le module, ni le connecteur, ni le bus, et ses corrections ne sont pas signalées au système d'exploitation. La mention ECC on-die sur un UDIMM ordinaire décrit la DDR5 elle-même, pas un module ECC.

L'ECC side-band ajoute des puces DRAM qui stockent des bits de contrôle pour chaque sous-canal. Le contrôleur mémoire vérifie chaque accès, corrige ce que le code permet de corriger, détecte les erreurs plus graves et signale les deux au système d'exploitation. Ce signalement est le vrai bénéfice : un compteur d'erreurs corrigées qui grimpe sur un module est un avertissement précoce, alors qu'une machine sans ECC plante ou corrompt des données de temps en temps.

UDIMM, RDIMM et détrompeur

Les ECC UDIMM sont non tamponnés et conviennent aux cartes grand public et aux stations d'entrée de gamme dont la plateforme prend en charge l'ECC. Les RDIMM ajoutent un pilote d'horloge à registre et appartiennent aux serveurs et aux stations haut de gamme. Les UDIMM et RDIMM DDR5 ont des détrompeurs différents : ils ne sont pas interchangeables et ne se mélangent pas.

Quelles plateformes prennent en charge une vraie ECC

L'ECC ne fonctionne que si le processeur, le chipset, le firmware et les modules la prennent tous en charge. En septembre 2026 :

  • AMD Ryzen 9000 sur AM5 : AMD indique « Yes (Requires mobo support) » pour l'ECC sur des modèles comme le 9950X. Vérifiez la prise en charge des ECC UDIMM dans le manuel de la carte et le modèle exact du processeur, car les familles de bureau d'AMD diffèrent.
  • AMD EPYC 4005 sur AM5 : processeurs serveur pour le même socket, avec prise en charge de la DDR5 ECC jusqu'à 192 Go.
  • AMD Ryzen Threadripper PRO 9000 WX-Series : jusqu'à huit canaux de DDR5 RDIMM avec ECC activée par défaut.
  • Intel Core Ultra 200S : l'ECC exige la prise en charge par le processeur et par le chipset (article d'Intel sur l'ECC). Intel indique l'ECC comme prise en charge sur W880 et non sur Z890.
  • Processeurs Intel Xeon 600 pour stations de travail sur W890 : DDR5 registered avec ECC.

Après le premier démarrage avec des modules ECC, vérifiez que l'ECC est active au lieu de le supposer.

Portables : LPDDR5X soudée et CAMM2

La plupart des portables fins utilisent de la LPDDR5X soudée sur la carte ou placée sur le boîtier du processeur. Elle est rapide et économe, mais la capacité est figée à l'achat, et certaines plateformes la plafonnent bas : Intel indique 32 Go au maximum pour le Core Ultra 7 258V. Achetez d'emblée la capacité que vous auriez voulu ajouter plus tard.

À l'autre extrémité se trouvent les conceptions larges. L'AMD Ryzen AI Max+ PRO 395 utilise une interface LPDDR5X-8000 de 256 bits avec jusqu'à 128 Go, soit 32 octets × 8000 MT/s = 256 Go/s de bande passante théorique, deux fois et demie celle d'un PC de bureau bicanal en DDR5-6400. C'est ce qui rend ces machines intéressantes pour les modèles locaux, mais rien n'y est évolutif.

CAMM2 est l'alternative remplaçable. La norme JEDEC JESD318, publiée en décembre 2023, définit des Compression Attached Memory Modules en DDR5 et en LPDDR5/5X avec une conception de connecteur commune. La disponibilité dépend du modèle de portable : cherchez CAMM2 ou LPCAMM2 dans la fiche du fabricant. Les portables à emplacements SO-DIMM restent la voie d'évolution la plus simple.

Tester la stabilité avec memtest86+ et lire les erreurs sous Linux

Testez chaque nouveau kit, chaque changement de profil et chaque mise à jour de firmware qui modifie l'entraînement mémoire. Memtest86+ est un testeur autonome, gratuit et open source. La version actuelle, v8.10, date de mai 2026, et un seul binaire démarre en UEFI comme en BIOS legacy (memtest86+). Le binaire n'est pas signé par Microsoft : désactivez Secure Boot pendant le test, puis réactivez-le. Une passe complète teste toute la mémoire, et une exécution plus longue renforce la confiance. Si un système overclocké échoue, refaites le test aux réglages par défaut, puis module par module. Il s'agit d'un projet distinct de PassMark MemTest86.

Faites une passe aux valeurs JEDEC quand la machine est neuve, plusieurs passes après l'activation d'un profil, puis un test de charge dans le système :

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

Avec l'ECC, Linux signale les erreurs corrigées et non corrigées via les compteurs EDAC de sysfs (documentation EDAC du noyau) :

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 répertoire /sys/devices/system/edac/mc/ vide signifie qu'aucun pilote EDAC ne gère ce contrôleur ou que l'ECC est désactivée, quoi qu'indique l'étiquette du module, et dmidecode -t memory ne montre que ce qu'affirme le firmware. Traitez toute erreur non corrigée comme un incident matériel, et un compteur d'erreurs corrigées qui grimpe sur un module comme une raison de le remplacer. Les versions récentes de rasdaemon regroupent ces options sous des sous-commandes : consultez ras-mc-ctl --help.

Configurations recommandées par usage

Ce sont des points de départ, et votre pic mesuré prime sur eux.

Usage Capacité Configuration Remarques
IDE, navigateur, quelques conteneurs 32 Go 2 × 16 Go Évoluer implique de remplacer les deux modules
Conteneurs, Kubernetes dans Docker, agents en parallèle 64 Go 2 × 32 Go Relevez les limites de Docker Desktop ou de WSL
Plusieurs VM, grosses bases, compilation de monorepo 96 à 128 Go 2 × 48 Go ou 2 × 64 Go Restez à un module par canal
LLM locaux avec déchargement sur le CPU 128 Go ou plus 2 × 64 Go ou une plateforme plus large La bande passante plafonne la vitesse des couches déchargées
Corruption silencieuse coûteuse 64 Go ou plus, ECC ECC UDIMM sur AM5 ou W880, RDIMM sur Threadripper PRO ou Xeon Vérifiez les compteurs EDAC
Portable 32 Go, 64 Go pour les VM LPDDR5X, SO-DIMM ou LPCAMM2 Si la mémoire est soudée, prenez la capacité finale dès l'achat

Au-delà de 128 Go, un PC de bureau bicanal exige quatre modules à une fréquence officielle réduite, ce qu'évitent Threadripper ou Xeon.

Liste de contrôle avant de commander

  1. Enregistrez la mémoire et la pression pendant une semaine représentative, puis ajoutez une marge.
  2. Achetez toute la capacité en un seul kit de deux modules identiques.
  3. Vérifiez le tableau mémoire du processeur et la liste qualifiée de la carte pour le type exact : UDIMM, CUDIMM, ECC UDIMM ou RDIMM.
  4. Comparez les kits par latence réelle en nanosecondes et par fréquence.
  5. Mettez le firmware à jour, n'activez XMP ou EXPO que si vous comptez le tester, et laissez l'entraînement se terminer.
  6. Lancez memtest86+ aux valeurs par défaut puis avec le profil, suivi d'un test de charge dans le système.
  7. Pour l'ECC, confirmez d'abord la prise en charge de la plateforme, puis vérifiez les compteurs EDAC sous Linux.
  8. Sur un portable à mémoire soudée, achetez la capacité dont vous aurez besoin en fin de vie.
  9. Revérifiez la pression mémoire après quelques mois, surtout après l'ajout de VM, de clusters ou de modèles locaux.

Plus d’articles