Condivisione della tecnologia

Gestione database - Numero 218 Memoria del server (20240711)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Gestione database - Numero 218 Memoria del server (20240711)

Autore: L'acquario dei pesci dalla testa grassa (Yin Haiwen)
Oracle ACE Pro: Database (Oracle e MySQL)
Partner ACE PostgreSQL
10 anni di esperienza nel settore dei database, attualmente impegnato principalmente nei servizi di database
Dispone di OCM 11g/12c/19c, MySQL 8.0 OCP, Exadata, CDP e altre certificazioni
Mo Tianlun MVP, Moli Star of the Year, esperto certificato ITPUB, membro del gruppo di 100 esperti, docente OCM, consulente tecnico della comunità open source PolarDB, consulente tecnico esterno HaloDB, membro del gruppo di osservazione OceanBase, Youth Association MOP Technology Community (Youth Database Associazione di mutuo soccorso per l'apprendimento) Consulente tecnico
Ha titoli come "Direttore", "Sicurezza" e "Il più grande nemico del database domestico" nella cerchia e non è un famoso terrorista sociale (terrorista sociale)
Conto pubblico: Acquario per pesci dalla testa grassa; CSDN: Acquario per pesci dalla testa grassa (Yin Haiwen): Acquario per pesci dalla testa grassa ITPUB: yhw1809.
A meno che non venga ristampato con il permesso e non venga indicata la fonte, si tratta di plagio "illegale".

In precedenza ho spiegato l'hardware coinvolto nei server come CPU, SSD e rete. Oltre alla scheda madre che trasporta i componenti sopra menzionati, esiste anche un componente molto importante, ovvero la memoria. Rispetto al livello desktop generale (home PC) Memoria, la memoria del server ha una propria funzione di correzione degli errori, che chiamiamo anche memoria ECC (Error Checking and Correcting).
In questo numero verrà spiegato brevemente come funziona la memoria ECC.

1 memoria

La memoria è un componente importante del computer. Viene utilizzata per memorizzare temporaneamente i dati di calcolo nella CPU e scambiare dati con memorie esterne come i dischi rigidi. È il ponte tra la memoria esterna e la CPU. Tutti i programmi del computer vengono eseguiti in memoria. Finché il computer inizia a funzionare, il sistema operativo trasferirà i dati che devono essere calcolati dalla memoria alla CPU per il calcolo. Una volta completato il calcolo, la CPU trasmetterà i risultati.
L'emergere della memoria serve principalmente a compensare le enormi differenze di larghezza di banda e latenza tra la memoria esterna e la cache integrata della CPU (ovvero L1, L2, L3). In sostanza, è più grande della cache integrata della CPU ma generalmente molto più piccolo della memoria esterna. Il dispositivo di trasferimento dati intermedio può accelerare in anticipo la preparazione dei dati dalla memoria esterna più lenta, riducendo o addirittura eliminando il tempo di attesa della CPU per ottenere i dati.
La memoria che utilizziamo principalmente sui server ora è la memoria DDR Non entrerò in una spiegazione approfondita di cosa sia la DDR qui. Le generazioni di memoria tradizionali sono DDR4 e DDR5. Oltre alla memoria generale, esiste anche la memoria non volatile PMEM basata sull'interfaccia di memoria (o interfaccia PCIe) (prendendo come esempio Intel Optane), che fornisce una quantità di dati più grande tra la memoria e lo storage esterno ed è vicina a la velocità dell'area della cache.

2 memorie ECC

In generale, i server trasportano importanti sistemi aziendali. Durante il funzionamento delle apparecchiature elettroniche si verificano molte interferenze elettromagnetiche. Queste interferenze elettromagnetiche possono causare il ribaltamento dei bit (ovvero lo scambio di 0 e 1) durante l'interazione dei dati tra la memoria e il computer. CPU In questo modo si verificheranno errori nell'esecuzione dei dati. Se si tratta di un software o programma generico per PC, potrebbe anche segnalare un errore o un arresto anomalo. Tuttavia, se questo problema si verifica in un sistema importante, causerà conseguenze più gravi (. dopo tutto, la banca non vuole che il tuo patrimonio aumenti senza motivo. Qualche 0, tu non vuoi che il tuo patrimonio diminuisca).
Poi è nata la memoria ECC, che ha scoperto in modo proattivo gli errori nei dati e li ha corretti.

3 principi

Ecco due soluzioni relativamente primitive:

3.1 Trasmissione in più copie

Cioè, un dato viene trasmesso in 3 copie. Se c'è un problema in un punto qualsiasi di una determinata copia, è possibile correggerlo:
immagine.png
Ma sono sorti anche dei problemi, anche se la probabilità che si verifichi è molto bassa, se due dati hanno bit flip nella stessa posizione, allora ci saranno problemi con la verifica dei dati e la correzione degli errori:
immagine.png
Il problema più grande con l'utilizzo di questo metodo è lo spreco di larghezza di banda IO.

3.2 Codice correzione errore

In questo modo, un codice di correzione dell'errore viene aggiunto all'inizio dei dati, ovvero un codice di correzione dell'errore viene aggiunto prima di ogni dato. Quando il numero di 1 nei dati è un numero pari, il codice di correzione dell'errore lo è 0 e quando il numero è dispari, il codice di correzione dell'errore è 1.
immagine.png
Se il codice di correzione errore non corrisponde al numero di 1, i dati vengono ritrasmessi.
immagine.png
Anche questo crea un problema. Ogni verifica può solo determinare se tutti i dati sono normali. In teoria, la correzione degli errori non viene eseguita e la ritrasmissione aumenterà il ritardo.
Allo stesso tempo, se si verificano due errori nei dati contemporaneamente, lo scopo della verifica non può ancora essere raggiunto.

3.3 Codice di Hamming

Il codice Hamming è il principale metodo di verifica e correzione degli errori attualmente utilizzato nella memoria ECC.
Andiamo passo dopo passo e organizziamo i dati a 16 bit nel modo seguente. Supponiamo che il bit 2 sia responsabile del controllo di parità sulla parte destra, quindi questi dati hanno due 1 e il bit 2 è 0. Se c'è un errore nei dati e il controllo di parità determina che non ci sono problemi nella metà destra, allora il problema è nella metà sinistra, altrimenti il ​​problema è nella metà destra.
immagine.png
Come mostrato nella figura seguente, il bit 1 esegue il controllo di parità sulle colonne 2 e 4, quindi il bit 1 memorizza 1. Se c'è un problema con il controllo di parità nelle colonne 2 e 4, il problema è nelle colonne 2 e 4. Altrimenti, c'è un problema nelle colonne 1 e 3.
immagine.png
La combinazione dei due metodi precedenti può facilmente confermare quale colonna di dati presenta un problema:
immagine.png
Successivamente, utilizzare un metodo simile, utilizzando il bit 4 per controllare le righe 2 e 4 e il bit 8 per controllare la metà inferiore. Attraverso la separazione delle righe e il controllo della parità delle partizioni, è possibile trovare la posizione specifica dell'errore ed eseguire la correzione dell'errore (capovolgi). Questo è tutto.
immagine.png
Tuttavia, la premessa della sentenza di cui sopra è che c'è un problema con i dati predefiniti. Dopo aver utilizzato il metodo di cui sopra per giudicare, il bit di dati n. 0 non è incluso nella protezione. Se è sbagliato o meno, non influisce il risultato del controllo di parità di cui sopra. Pertanto, utilizziamo il bit 0 per verificare l'intero blocco di dati utilizzando il metodo in 3.2.
immagine.png
In questo caso, se si verificano due errori, i risultati del controllo di parità del disco completo e del controllo di parità della partizione saranno in conflitto. È impossibile determinare la posizione dell'errore, ma è possibile determinare che l'intero blocco di dati è anomalo. Basta ritrasmettere i dati.
immagine.png
Ma quando ci sono tre errori nei dati, diventa impossibile giudicare.
immagine.png
In altro modo, troveremo che le posizioni dei codici di controllo sono tutte 2 all'ennesima potenza:
immagine.png
Il codice di controllo deve solo essere posizionato nell'ennesima posizione di potenza pari a 2. Più grande è il blocco, minore è il contenuto occupato dal codice di correzione dell'errore, ma maggiore è la probabilità di più bit flip. La dimensione generale del blocco di trasmissione ECC è 72 bit, 64 bit sono i dati e 8 bit è il codice di correzione degli errori. Pertanto, generalmente una memoria con una capacità di 8G richiede solo otto particelle di memoria di 1G, mentre una memoria ECC con una capacità di 8G richiede nove particelle di memoria di 1G. L'1G extra viene utilizzato per memorizzare la capacità aggiuntiva del codice di correzione degli errori.
Tuttavia, la correzione degli errori del computer non calcolerà sicuramente la posizione dell'errore nel solito modo "stupido". Ciò può essere ottenuto utilizzando il fascino del binario. Rappresentiamo la posizione in binario:
immagine.png
Togliamo tutte le posizioni che sono 1 ed eseguiamo un'operazione OR binario verticale per ottenere direttamente la posizione problematica:
immagine.png

Allegato: esiste anche un LDPC (Low Density Parity-Check Code), che è un codice di controllo di parità a bassa densità. Il principio di implementazione specifico non verrà spiegato qui. Questo metodo può determinare il problema del capovolgimento multi-bit e lo è spesso utilizzato per la verifica SSD. A causa dell'elevata velocità e del costo di implementazione della memoria, i codici Hamming vengono ancora utilizzati per implementare ECC.

Riassumere

Questo numero introduce brevemente il modo in cui la memoria ECC implementa la correzione degli errori.
La vecchia regola è sapere cosa c'è scritto.