Che cos'è la memoria ECC e quando serve davvero
Che cosa intercetta davvero la correzione degli errori, come registered e load-reduced differiscono dai moduli non bufferizzati e perché decide la piattaforma.
Aggiornato
In questa pagina
La memoria con correzione degli errori è uno dei pochi pezzi di una configurazione in cui la risposta giusta diventa ovvia appena si capisce che cosa fa la funzione. Intercetta un guasto preciso e raro, costa denaro e un po' di latenza, e funziona soltanto quando tre cose distinte si allineano. Quasi tutta la confusione che la circonda nasce da una quarta cosa, che ne condivide il nome senza essere la stessa funzione.
Che cosa intercetta davvero l'ECC
Un modulo privo di correzione conserva i bit che gli avete chiesto di conservare e restituisce poi quello che vi trova. Ogni tanto quello che vi trova non è quello che era entrato: una particella vagante ribalta una cella, un chip al limite perde la carica, un segnale arriva deformato sul bus. Niente nel modulo se ne accorge, così il valore sbagliato raggiunge il processore e il programma ci lavora sopra.
Un modulo ECC porta chip di memoria in più rispetto a quelli che contengono i vostri dati, e memorizza una somma di controllo accanto a ogni parola. A ogni lettura il controller di memoria la ricalcola. Un bit ribaltato viene corretto sul posto e registrato; due bit ribaltati vengono rilevati ma non corretti, e la macchina si ferma invece di proseguire su dati che sa essere sbagliati.
Notate che cosa questo compra e che cosa no. La correzione non rende la memoria più veloce, non la fa durare di più e non salva un modulo che sta davvero cedendo: quello che fa è segnalare il guasto prima e più chiaramente, il che spesso vale più della correzione stessa. Ciò che cambia è che una risposta sbagliata e silenziosa diventa un evento registrato, e se valga la spesa dipende interamente da che cosa fa la macchina. Una workstation con una simulazione lunga una settimana, un file server che custodisce dati da rileggere fra cinque anni, un database che non deve mai scrivere una riga corrotta: per questi, un bit sbagliato che nessuno nota è l'esito costoso. Una macchina da gioco si pianta, la riavviate e avete perso qualche minuto.
L'ECC on-die non è memoria ECC
È qui che si inciampa, e il DDR5 ha peggiorato le cose.
Ogni chip DDR5 ha la correzione degli errori integrata nel die. Fa parte dello standard invece di essere l'aggiunta di un costruttore: alle densità con cui il DDR5 viene prodotto, gli errori interni alla matrice sono abbastanza frequenti da rendere la correzione dentro il chip stesso l'unica cosa che tiene in piedi le rese. Quindi un normalissimo kit DDR5 da desktop porta davvero una correzione degli errori, in un senso reale.
Non è la stessa funzione. La correzione on-die copre gli errori interni alla matrice DRAM e nient'altro. Agisce prima che i dati lascino il chip, quindi non copre il percorso dal modulo al controller di memoria — i contatti, le piste sulla scheda, il bus stesso — ed è su quel percorso che si verifica una quota non trascurabile degli errori di memoria. E non segnala nulla: nessun contatore da leggere, nessuna voce di registro, nessun modo perché il sistema operativo sappia che una correzione è avvenuta o che stanno diventando frequenti. L'ECC on-die è una misura di produzione che di sfuggita vi aiuta. La memoria ECC è una funzione di sistema che vi dice la verità sul vostro hardware.
La conseguenza pratica è breve: che un modulo DDR5 abbia la correzione on-die non dice nulla su se la macchina abbia memoria ECC. Sono due domande diverse con due risposte diverse.
Non bufferizzato, registered, load-reduced
La correzione degli errori è un asse. Come un modulo venga pilotato dal punto di vista elettrico è un altro, e i due si confondono perché la memoria da server di solito li mette insieme.
Su un modulo non bufferizzato — una UDIMM in un desktop, una SO-DIMM in un portatile — le linee di indirizzo e di comando vanno dal controller di memoria direttamente a ogni chip DRAM della barretta. È la disposizione più semplice e quella a latenza più bassa. Il costo è elettrico: ogni chip è un carico su quelle linee, quindi più chip e più moduli porta un canale, più il controller fatica e prima il segnale smette di essere pulito. Per questo le piattaforme desktop si fermano a una manciata di slot e a un tetto di capacità per slot.
Un modulo registered — una RDIMM — mette un chip di registro fra il connettore e la DRAM. Il controller pilota un carico per modulo invece di decine, e il registro distribuisce il segnale da lì in poi. Costa un ciclo di clock su indirizzo e comando, e compra la possibilità di appendere a un canale molta più memoria di quanta ne regga un progetto non bufferizzato.
Un modulo load-reduced — una LRDIMM — bufferizza anche le linee dati. Questo toglie il limite elettrico rimasto e permette ai moduli più grandi e con più rank di funzionare del tutto, che è l'unica ragione per accettarne il sovrapprezzo.
| Non bufferizzato | Registered | Load-reduced | |
|---|---|---|---|
| Bufferizza | Niente | Indirizzo e comando | Indirizzo, comando, dati |
| Latenza | La più bassa | Un ciclo in più | Un ciclo in più |
| Dove vive | Desktop e portatili | Schede server e workstation | Schede server, alle capacità maggiori |
Niente in quella tabella riguarda la correzione degli errori. I moduli registered la portano quasi sempre, perché le piattaforme che li accolgono la vogliono; ma i moduli ECC non bufferizzati esistono e sono pezzi ordinari. Il nostro catalogo ne ha diversi, e compaiono sulla pagina della memoria desktop anziché su questa, perché ciò che porta un modulo sulla pagina della memoria da server è il suo formato e nient'altro: RDIMM e LRDIMM, le due grafie che significano che un modulo è bufferizzato.
Decide la piattaforma, non il modulo
Un modulo ECC in una macchina che non gestisce l'ECC fa una di due cose. Funziona con i bit di controllo ignorati, oppure non funziona. In entrambi i casi avete pagato una funzione che non sta facendo nulla.
Tre cose devono essere presenti. Il modulo deve portare i chip in più. Il controller di memoria — che su ogni piattaforma attuale vive dentro il processore — deve saperli verificare. E il firmware e il sistema operativo devono restituirne il risultato, perché una correzione che nessuno vede non è molto meglio di nessuna correzione. Le piattaforme server e workstation hanno tutte e tre. Quelle desktop di consumo per lo più no, e dove una scheda e un processore desktop gestiscono davvero l'ECC non bufferizzato, questo è scritto nella documentazione della scheda anziché sottinteso dal socket. È lì che la questione si chiude, e conviene chiuderla prima di comprare il modulo.
Che cosa registriamo e che cosa no
Registriamo il supporto alla correzione degli errori sul modulo, come un campo che una scheda tecnica dichiara oppure no. Dove un costruttore non lo dichiara lasciamo il campo vuoto invece di dedurlo da un codice prodotto, quindi un campo vuoto significa che non abbiamo trovato l'affermazione — non che al modulo manchi la funzione. Ogni modulo registered e load-reduced del nostro catalogo lo dichiara, e nessuna SO-DIMM da portatile lo fa.
Non è nemmeno qualcosa su cui confrontiamo. La memoria si confronta su tre numeri — capacità, velocità in MT/s e latenza CAS, con più alto migliore per i primi due e più basso per l'ultimo — e la correzione degli errori non sta in nessuno di essi, perché non è un numero che si ordini. Un modulo porta i chip in più oppure non li porta, e la domanda successiva è se la vostra piattaforma sappia usarli. Il modulo è inoltre l'unico punto di questo sito in cui la correzione degli errori venga registrata: nessuna voce di processore o di scheda madre qui le riserva un campo, quindi la domanda parte da una scheda tecnica e finisce nella documentazione della scheda.
Due abitudini di questo catalogo vale la pena conoscerle prima di leggerlo. La memoria da server è elencata come moduli singoli anziché come kit, perché i canali si popolano slot per slot ed è il numero di slot di una scheda a decidere quanti ne comprate. E la sequenza completa dei timing che i kit desktop stampano manca su ogni modulo registered qui: i costruttori pubblicano la latenza CAS e si fermano lì.
A questo proposito: i numeri CAS del DDR5 registered sembrano allarmanti accanto a quelli del DDR4, e ogni modulo DDR5 qui ne porta uno più alto di qualsiasi modulo DDR4. Indicano all'incirca la stessa attesa, perché un ciclo di clock si accorcia man mano che la velocità sale — come velocità e latenza lavorano insieme ne riporta l'aritmetica. E se la domanda sotto a tutto questo è quanta memoria comprare anziché quale, partite dalla capacità, che sposta molto di più, per molte più macchine, di quanto faccia la correzione degli errori.
La memoria da server e la RAM desktop stanno ciascuna su una pagina, con specifiche prese dalla scheda tecnica e prezzi seguiti nel tempo.
Domande frequenti
- Usare DDR5 significa che ho già memoria ECC?
- No. Ogni chip DDR5 porta una correzione on-die per gli errori che nascono dentro la propria matrice di celle, e fa parte dello standard invece di essere il pregio di un modulo particolare. Non copre il collegamento tra modulo e processore e non segnala nulla al sistema operativo, quindi un desktop con DDR5 non è una macchina con memoria ECC.
- Posso mettere una DIMM registered in una scheda madre desktop?
- No — una scheda è cablata per un solo tipo di modulo, e una DIMM registered su una piattaforma desktop non parte nemmeno. Il chip di registro fra connettore e chip di memoria cambia il modo in cui la scheda deve pilotare il modulo, perciò decidono la scheda e il processore, non la barretta acquistata.