Istruttore: In questa
lezione parleremo della memoria ECC, nota come
codice di correzione degli errori.
Ma prima dobbiamo affrontare
il concetto di non-parità e parità in termini di memoria.
Quando si parla di non-parità, si tratta di
una memoria che è solo una memoria standard.
Non controlla la presenza di errori
e permette di inserire o togliere dati
dalla memoria a piacimento.
La memoria non paritaria è molto economica da produrre
e ha una velocità superiore a quella della memoria paritaria.
La memoria di parità, invece, viene utilizzata
per eseguire il controllo degli errori di base e per
garantire l'affidabilità e l'integrità
del contenuto della memoria.
Per questo motivo,
questa memoria sarà più lenta di quella non
paritaria, ma ha l'affidabilità
necessaria per i server e per
alcune workstation desktop di fascia alta.
Le memorie che dispongono di un controllo di parità
sono in grado di eseguire un calcolo di base
sulla base di ciò che vedono
per verificare se i dati sono buoni o meno.
E se i dati sono buoni, li utilizzerà.
In caso contrario, si verificherà un errore, ma non
sarà possibile risolverlo.
Sarà in grado di dire che c'è un errore,
ma non so come risolverlo.
In pratica, ogni byte ha un
bit di parità associato.
Quindi, invece di avere otto bit, si hanno nove
bit, perché otto bit di dati più un bit per la parità.
Ora il bit di parità verrà impostato al momento giusto.
Poi, quando si legge dalla memoria, viene
calcolato e confrontato per determinare
se qualche bit è cambiato dall'ultima
volta che i dati sono stati scritti nella memoria.
Questo tipo di controllo
si limita però a rilevare gli errori di un singolo bit.
E se ci sono due bit alterati, il
controllo di parità può passare,
perché ricordate, i bit possono essere solo 0 o 1.
Ad esempio, supponiamo di aver memorizzato
il numero 0, che in binario si scrive 00000000.
Ora, se sommo tutti questi bit, ottengo otto
0 che mi danno 0 come bit di parità.
Ora, se vado a leggere quel numero dalla
memoria e vedo che ci sono otto
0, li sommo e ottengo 0, lo 0 corrisponde
al mio bit di parità come 0, quindi
sono dati buoni.
Supponiamo
invece che io stia
scrivendo il numero 1 che si scrive 00000001.
Ora se sommo tutti questi numeri, otterrò 1.
E lo inserirò nel mio bit di parità del nono bit.
Così facendo, ora leggo da lì e
ottengo 00000001.
Ma se lo metto in memoria
e rimane lì per
un paio d'ore e quell'1
è stato cambiato
in uno 0 per sbaglio, se
lo leggo ora e ottengo 00000000,
lo sommo e ottengo
0, e lo confronto con il mio bit di parità che
aveva un 1, questo mi dice che c'è un errore e che qualcosa è andato storto.
Non so quali di questi otto bit siano stati modificati,
ma almeno uno di essi lo è stato.
D'altra parte,
se il numero
da 00000001 è stato modificato in qualcosa
come 01010001, ora ho due bit che sono stati cambiati
da 0 a 1 per errore dalla
memoria.
Quando guardo la mia parità, sarà ancora un 1 perché
quando li sommo, se è un numero dispari, sarà un
1 per il mio bit di parità.
E se li sommo e il risultato è un numero pari,
il risultato sarà uno 0.
Quindi, come si può vedere,
non sarà possibile rilevare
un errore se due bit sono stati cambiati all'interno
di questo, se si utilizza un calcolo di parità.
Ora, la buona notizia è che circa il 90% della maggior parte degli
errori sarà di tipo singolo e quindi il controllo
di parità può essere sufficiente per la maggior
parte delle situazioni.
Ma se si ha a che fare con qualcosa come la
gestione di server per una banca, avere qualsiasi
tipo di errore potrebbe essere una cosa negativa.
Quindi vogliamo qualcosa di meglio della
parità ed è qui che entra in gioco l'ECC.
ECC è l'acronimo di Error Correcting Code (codice di correzione degli errori).
Un codice a correzione di errore è il tipo di memoria
che porta la parità al livello successivo.
Ora non solo è in grado di rilevare la presenza
di un errore, proprio come
la parità, ma può anche correggere l'errore.
L'ECC è un po' più lento della parità, che
è anche più lento della non parità.
Quindi si rinuncia a un po' di
prestazioni per questa capacità
aggiuntiva, ma si ottiene una maggiore
integrità e affidabilità della memoria
quando si usa l'ECC, perché sarà
in grado di rilevare gli errori e di correggerli.
In generale, il codice ECC o di correzione
degli errori viene utilizzato
solo nelle workstation o nei server di fascia alta, a causa
del costo aggiuntivo e dell'elevato
livello di integrità necessario solo in
questo tipo di ambienti.
Ora vi starete chiedendo:
come fa l'ECC a determinare cosa c'è di sbagliato
e come risolverlo?
Per farlo, utilizzerà
qualcosa noto come memoria tamponata
o registrata.
Ora la memoria tamponata o registrata
ha un hardware aggiuntivo che
si interpone tra la memoria e la CPU o il processore.
Questo hardware è chiamato registro
e memorizza i dati in un buffer
prima di inviarli alla CPU.
Questa funzione è utilizzata come misura di affidabilità
in molti sistemi, in particolare
in sistemi come i server che hanno molti
moduli di memoria diversi in cui possono verificarsi
errori.
Questi sistemi richiedono il buffering o la registrazione dei dati
per ridurre il carico elettrico utilizzato
da questi sistemi che hanno
grandi quantità di moduli di memoria, e questo può essere
abbinato alla memoria di parità o di codice
di correzione degli errori per essere in
grado di fornire l'affidabilità aggiuntiva
che si sta cercando e rilevare gli errori.
Ora, per utilizzare i moduli di codice a correzione
di errore, la scheda madre deve supportarli così come la CPU.
Se uno dei due componenti non supporta l'ECC, anche
se si acquistano i moduli ECC, che costano di più, non si
otterranno i vantaggi ECC aggiuntivi.
Quindi, tenetelo a mente.
Inoltre, la maggior parte delle schede madri supporta o meno l'ECC.
In genere non è un'opzione.
Pertanto, se si acquista una scheda madre che supporta
l'ECC, è necessario acquistare moduli ECC,
ovvero moduli di memoria registrati.
Se si trova una scheda madre che supporta moduli
ECC o non ECC, in genere non li supporta
entrambi contemporaneamente.
Quindi tutti i moduli devono essere ECC
o nessuno dei moduli può essere ECC.
Una miscela di questi elementi può causare errori nel sistema
e la scheda madre non sa come gestirli.
L'ultima cosa che vorrei
menzionare è che se state usando le DDR5,
queste ultime hanno un controllo degli errori
interno ai moduli stessi.
Questo non è considerato ECC o un modulo ECC.
La correzione degli errori all'interno
dei moduli DDR5 più recenti può essere utilizzata anche su
schede madri che non supportano l'ECC, mantenendo una certa
capacità di controllo degli errori.
Si tratta di una forma diversa di controllo degli
errori e non è considerata codice a correzione di errore.
Tenetelo presente e non lasciatevi confondere
quando siete sul campo.
Si tratta di una forma diversa di controllo
degli errori e i moduli DDR5 possono ancora essere
venduti come moduli ECC o non ECC, perché oltre al controllo
degli errori interno, possono anche lavorare con
la CPU e la scheda madre se supportano l'ECC e ora
sono anche codici di correzione
degli errori.
So che questo crea un po' di confusione.
Quindi, fate attenzione a questo aspetto quando siete sul campo.