Compartir tecnología

Gestión de bases de datos: edición 218 Memoria del servidor (20240711)

2024-07-12

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

Gestión de bases de datos: edición 218 Memoria del servidor (20240711)

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.

1 memoria

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é.

2 memorias ECC

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.

3 principios

Aquí hay dos soluciones relativamente primitivas:

3.1 Transmisión de múltiples copias

Es decir, un dato se transmite en 3 copias. Si hay un problema en alguna parte de una determinada copia, se puede corregir:
imagen.png
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:
imagen.png
El mayor problema al utilizar este método es el desperdicio de ancho de banda IO.

3.2 Código de corrección de errores

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.
imagen.png
Si el código de corrección de errores no coincide con el número de unos, los datos se retransmiten.
imagen.png
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.

3.3 Código Hamming

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.
imagen.png
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.
imagen.png
La combinación de los dos métodos anteriores puede confirmar fácilmente qué columna de datos tiene un problema:
imagen.png
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.
imagen.png
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.
imagen.png
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.
imagen.png
Pero cuando hay tres errores en los datos, resulta imposible juzgar.
imagen.png
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:
imagen.png
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.
imagen.png
Sacamos todas las posiciones que son 1 y realizamos una operación binaria vertical OR para obtener directamente la posición problemática:
imagen.png

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.

Resumir

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.