Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Autor: La pecera de los peces de cabeza gorda (Yin Haiwen)
Oracle ACE Pro: Base de datos (Oracle y MySQL)
Socio de PostgreSQL ACE
10 años de experiencia en la industria de bases de datos, actualmente dedicada principalmente a servicios de bases de datos.
Tiene OCM 11g/12c/19c, MySQL 8.0 OCP, Exadata, CDP y otras certificaciones
Mo Tianlun MVP, Moli Estrella del año, experto certificado por ITPUB, miembro del grupo de expertos de 100, conferenciante de OCM, consultor técnico de la comunidad de código abierto PolarDB, consultor técnico externo de HaloDB, miembro del grupo de observación de OceanBase, comunidad de tecnología MOP de la Asociación Juvenil (base de datos juvenil) Asociación de Ayuda Mutua de Aprendizaje) Asesor Técnico
Tiene títulos como "Director", "Seguridad" y "El mayor enemigo de la base de datos nacional" en el círculo, y no es un terrorista social famoso (terrorista social).
Cuenta pública: Pecera de pez de cabeza gorda; CSDN: Pecera de pez de cabeza gorda (Yin Haiwen: Pecera de pez de cabeza gorda);
A menos que se reimprima con permiso y se indique la fuente, todo es plagio "ilegal".
Anteriormente expliqué el hardware involucrado en los servidores, como CPU, SSD y red. Además de la placa base que lleva los componentes mencionados anteriormente, también hay un componente muy importante, que es la memoria en comparación con el nivel de escritorio general (PC doméstica general). ) Memoria, la memoria del servidor tiene su propia función de corrección de errores, que también llamamos memoria ECC (comprobación y corrección de errores).
Este número explicará brevemente cómo funciona la memoria ECC.
La memoria es un componente importante de la computadora. Se utiliza para almacenar temporalmente datos de cálculo en la CPU e intercambiar datos con memorias externas, como discos duros. Es el puente entre la memoria externa y la CPU. Todos los programas de la computadora se ejecutan en la memoria. Mientras la computadora comience a funcionar, el sistema operativo transferirá los datos que deben calcularse desde la memoria a la CPU para su cálculo. Cuando se complete el cálculo, la CPU transmitirá los resultados.
La aparición de la memoria es principalmente para compensar las enormes diferencias de ancho de banda y latencia entre el almacenamiento externo y el caché integrado de la CPU (es decir, L1, L2, L3. En esencia, es más grande que el caché integrado de la CPU, pero en general). Mucho más pequeño que el almacenamiento externo, el dispositivo de transferencia de datos intermedio puede acelerar la preparación de datos desde un almacenamiento externo más lento por adelantado, reduciendo o incluso eliminando el tiempo de espera para que la CPU obtenga los datos.
La memoria que utilizamos principalmente en los servidores ahora es la memoria DDR. No entraré en una explicación detallada de qué es DDR aquí. Las generaciones de memoria principales son DDR4 y DDR5. Además de la memoria general, también existe la memoria no volátil PMEM basada en la interfaz de memoria (o interfaz PCIe) (tomando Intel Optane como ejemplo), que proporciona una mayor cantidad de datos entre la memoria y el almacenamiento externo y está cerca de la velocidad del área de memoria caché.
En términos generales, los servidores transportan sistemas comerciales importantes. Hay muchas interferencias electromagnéticas durante el funcionamiento de los equipos electrónicos. Estas interferencias electromagnéticas pueden provocar cambios de bits (es decir, el intercambio de 0 y 1) durante la interacción de datos entre la memoria y la memoria. CPU, de esta manera, se producirán errores en la ejecución de datos. Si se trata de un software o programa general de PC, incluso puede informar un error o una falla. Sin embargo, si este problema ocurre en un sistema importante, causará consecuencias más graves. (después de todo, el banco no quiere que sus activos aumenten sin ningún motivo. Unos 0, no quiere que sus activos disminuyan).
Luego surgió la memoria ECC, que descubre proactivamente errores en los datos y los corrige.
Aquí hay dos soluciones relativamente primitivas:
Es decir, un dato se transmite en 3 copias. Si hay un problema en alguna parte de una determinada copia, se puede corregir:
Pero también han surgido problemas, aunque la probabilidad de que ocurra es muy baja, si dos datos tienen cambios de bits en la misma posición, habrá problemas con la verificación de datos y la corrección de errores:
El mayor problema al utilizar este método es el desperdicio de ancho de banda IO.
De esta manera, se agrega un código de corrección de errores al comienzo de los datos, es decir, se agrega un código de corrección de errores antes de cada dato. Cuando el número de unos en los datos es un número par, el código de corrección de errores es. 0, y cuando el número es impar, el código de corrección de error es 1.
Si el código de corrección de errores no coincide con el número de unos, los datos se retransmiten.
Esto también crea un problema. Cada verificación solo puede determinar si todos los datos son normales. En teoría, no se realiza la corrección de errores y la retransmisión aumentará el retraso.
Al mismo tiempo, si se producen dos errores de datos al mismo tiempo, el propósito de la verificación aún no se puede lograr.
El código Hamming es el principal método de verificación y corrección de errores utilizado actualmente en la memoria ECC.
Procedamos paso a paso aquí. Organice los datos de 16 bits de la siguiente manera. Supongamos que el bit 2 es responsable de la verificación de paridad en la parte derecha. Entonces estos datos tienen dos unos y el bit 2 es 0. Si hay un error en los datos y la verificación de paridad determina que no hay problema en la mitad derecha, entonces el problema está en la mitad izquierda, en caso contrario el problema está en la mitad derecha.
Como se muestra en la figura siguiente, el bit 1 realiza una verificación de paridad en las columnas 2 y 4, luego el bit 1 almacena 1. Si hay un problema con la verificación de paridad en las columnas 2 y 4, entonces el problema está en las columnas 2 y 4; de lo contrario, hay un problema en las columnas 1 y 3.
La combinación de los dos métodos anteriores puede confirmar fácilmente qué columna de datos tiene un problema:
A continuación, use un método similar, usando el bit 4 para verificar las filas 2 y 4, y el bit 8 para verificar la mitad inferior. A través de la separación de filas y la verificación de paridad de partición, puede encontrar la ubicación específica del error y realizar la corrección del error (voltear). Eso es todo.
Sin embargo, la premisa del juicio anterior es que hay un problema con los datos predeterminados. Después de utilizar el método anterior para juzgar, el bit de datos No. 0 no se incluye en la protección. Si es incorrecto o no, no afecta. el resultado de la verificación de paridad anterior. Por lo tanto, usamos el bit 0 para verificar todo el bloque de datos usando el método en 3.2.
En este caso, si hay dos errores, los resultados de la verificación de paridad total del disco y la verificación de paridad de partición entrarán en conflicto. Es imposible determinar la ubicación del error, pero se puede determinar que todo el bloque de datos es anormal. Simplemente retransmita los datos.
Pero cuando hay tres errores en los datos, resulta imposible juzgar.
De otra forma, encontraremos que las posiciones de los códigos de verificación están todas a 2 elevado a la enésima potencia:
El código de verificación solo necesita colocarse a la enésima potencia de 2. Cuanto más grande sea el bloque, menos contenido ocupará el código de corrección de errores, pero mayor será la probabilidad de que se produzcan múltiples cambios de bits. El tamaño general del bloque de transmisión ECC es de 72 bits, 64 bits son datos y 8 bits son códigos de corrección de errores. Por lo tanto, generalmente una memoria con una capacidad de 8G solo requiere ocho partículas de memoria de 1G, mientras que una memoria ECC con una capacidad de 8G requiere nueve partículas de memoria de 1G. El 1G adicional se utiliza para almacenar la capacidad adicional del código de corrección de errores.
Sin embargo, la corrección de errores por computadora definitivamente no calculará la posición del error de la forma "tonta" habitual. Aquí podemos usar el encanto del binario para lograrlo. Representamos la posición en binario.
Sacamos todas las posiciones que son 1 y realizamos una operación binaria vertical OR para obtener directamente la posición problemática:
Adjunto: También hay un LDPC (Código de verificación de paridad de baja densidad), que es un código de verificación de paridad de baja densidad. El principio de implementación específico no se explicará aquí. Este método puede determinar el problema de la inversión de varios bits y, a menudo, se utiliza. utilizado para la verificación de SSD. Debido a la alta velocidad y al costo de implementación de la memoria, los códigos Hamming todavía se utilizan para implementar ECC.
Este número presenta brevemente cómo la memoria ECC implementa la corrección de errores.
La vieja regla es saber lo que está escrito.