Instructor: En esta
lección, vamos a hablar de la memoria ECC, conocida
como código de corrección de errores.
Pero antes, debemos tratar el
concepto de no paridad y paridad en términos de memoria.
Cuando hablamos de no-paridad,
se trata de memoria estándar.
No comprueba si hay errores y permite
meter o sacar datos de la memoria a voluntad y esto
es lo que va a ser la mayoría de la memoria.
La memoria no paritaria es muy barata de fabricar
y tiene mayor velocidad que la paritaria.
Por otro lado, la memoria de paridad se va
a utilizar para realizar una comprobación básica de
errores y garantizar que el contenido
de la memoria es fiable y tiene integridad.
Por este motivo, esta
memoria va a ser más lenta que las memorias no paritarias,
pero tiene la fiabilidad necesaria para
los servidores y determinadas
estaciones de trabajo de sobremesa de gama alta.
Ahora la memoria que tiene una comprobación de paridad
va a ser capaz de hacer un cálculo básico basado
en lo que está viendo para
verificar si los datos son buenos o no.
Y si esos datos son buenos, los utilizará.
Y si no lo es, se producirá un error pero no
podrá solucionarlo.
Sólo podrá decir hay un error aquí pero
no sé cómo solucionarlo.
Básicamente, esto funciona haciendo que cada
byte tenga asociado un bit de paridad.
Así que en lugar de tener ocho bits, ahora tienes nueve
bits porque ocho bits de datos más un bit para la paridad.
Ahora que el bit de paridad se va a establecer en el momento adecuado.
Y entonces, va a ser calculado y comparado
cuando leas de la memoria para determinar si
alguno de los bits ha cambiado desde
que esos datos fueron escritos por última vez en esa memoria.
Sin embargo, este tipo
de comprobación se limita a detectar errores de un solo bit.
Y si hay dos bits que han sido alterados,
esa comprobación de paridad puede pasar,
porque recuerda, los bits sólo pueden ser un 0 o un 1.
Así, por ejemplo, supongamos que he
almacenado
el número 0, que se escribe 00000000 en binario.
Ahora, si sumo todos esos bits, obtengo ocho 0,
lo que me da 0 para mi bit de paridad.
Ahora si voy a leer ese número de la memoria
y veo que hay ocho 0s, los sumo
y obtengo 0, 0 coincide con mi bit de
paridad como 0, por lo que son datos
buenos.
Por otro lado,
supongamos que escribo
el número 1, que se escribe 00000001.
Ahora, si sumo todos esos números, obtendré 1.
Y pondré eso en mi parte de paridad de la novena parte.
Al hacer esto, ahora leo de eso y
obtengo 00000001.
Pero si pongo eso en
la memoria y se
sentó allí durante
un par de horas y que
1 se cambió a un 0 por accidente,
si leo que ahora y me sale 00000000, y los sumo,
me sale 0, y lo comparo con mi bit de paridad
que tenía un 1 en ella, que ahora me dice que hay un error
y algo salió mal.
No sé cuál de esos ocho bits se cambió,
pero al menos uno de ellos sí.
Ahora, por
otro lado,
si ese número de 00000001 se cambió a algo
como 01010001, ahora tenía dos bits que fueron cambiados
de 0s a 1 por accidente
por la memoria.
Cuando miro a mi paridad, todavía va a ser un 1 porque
cuando estoy sumando esos, si es un número impar,
va a ser un 1 para mi bit de paridad.
Y si los sumo y es un número
par, será un 0.
Así que como puedes ver, no
vas a ser capaz de detectar un
error si dos bits fueron cambiados dentro de
esto si estás usando un cálculo de tipo paridad.
La buena noticia es que el 90% de los errores son de un
solo bit, por lo que la comprobación
de paridad suele ser suficiente en
la mayoría de los casos.
Pero si se trata de algo como ejecutar
servidores para un banco, tener cualquier
tipo de errores puede ser algo malo.
Así que queremos algo mejor que la paridad
y ahí es donde entra en juego ECC.
Ahora ECC significa Código de Corrección de Errores.
Un código de corrección de errores es el tipo
de memoria que lleva la paridad al siguiente nivel.
Ahora no sólo puede detectar que hay un error,
al igual que la paridad, sino
que también puede corregir ese error por ti.
ECC es un poco más lento que la paridad, que también
es más lenta que la no paridad.
Por lo tanto, se renuncia a algo
de rendimiento a cambio de esta
capacidad adicional, pero se obtiene
una mayor integridad y fiabilidad de
la memoria cuando se utiliza ECC,
ya que es capaz de detectar y corregir
los errores.
En general, el ECC o código de corrección
de errores sólo se utiliza
en estaciones de trabajo o servidores de gama muy alta,
ya que su coste adicional y
ese nivel extra de integridad sólo son
necesarios en ese tipo de entornos.
Ahora te estarás preguntando,
¿cómo determina realmente el ECC qué estaba mal
y cómo solucionarlo?
Bueno, para hacer eso,
va a utilizar algo conocido como memoria
intermedia o registrada.
La memoria intermedia o memoria registrada
tiene un hardware adicional
que se sitúa entre la memoria y la CPU o el procesador.
Este hardware se denomina registro
y almacena datos en un búfer
antes de enviarlos a la CPU.
Esta característica se utiliza como medida de fiabilidad
en muchos sistemas, especialmente
en sistemas como servidores que tienen muchos
módulos de memoria diferentes en los que pueden
producirse errores.
Estos sistemas requieren el almacenamiento en búfer o el registro de
los datos con el fin de reducir la carga eléctrica
utilizada por estos sistemas
que tienen grandes cantidades de módulos de memoria, y esto
puede ser emparejado con la paridad o la memoria
de código de corrección de errores para ser
capaz de darle esa fiabilidad adicional que usted
está buscando y detectar esos errores.
Ahora bien, para poder utilizar módulos de código de corrección
de errores, la placa base debe ser compatible con ellos, al igual que la CPU.
Si alguno de esos componentes no admite ECC,
aunque compres los módulos ECC, que cuestan más, no
obtendrás esa ventaja adicional de ECC.
Así que tenlo en cuenta.
Además, la mayoría de las placas base admiten ECC o no.
Generalmente no es una opción.
Así que si compras una placa base que admita ECC,
tendrás que comprar módulos ECC, que son
esos módulos de memoria registrados.
Ahora bien, si encuentras una placa base que
admita módulos ECC o no ECC, generalmente
no admitirán ambos al mismo tiempo.
Así que todos tus módulos tienen que ser ECC
o ninguno de tus módulos puede ser ECC.
Tener una mezcla de ellos puede causar errores en el sistema
y la placa base no sabrá cómo manejarlo.
La última cosa que quiero
mencionar es que si estás usando DDR5,
DDR5 tiene alguna comprobación de errores
interna en los propios módulos.
No se considera ECC ni módulo ECC.
Por tanto, esta corrección
de errores de los nuevos módulos DDR5 se puede utilizar
en placas base que no admitan ECC y seguir contando con
cierta capacidad de comprobación de errores.
Se trata de una forma diferente de comprobación
de errores y no se considera código de corrección de errores.
Así que tenlo en cuenta y no dejes que eso te confunda
cuando estés en el campo.
Se trata de una forma distinta de comprobación
de errores y los módulos DDR5 aún pueden venderse
como módulos ECC o no ECC, porque además de esa comprobación
de errores interna, también pueden funcionar
con la CPU y la placa base si admiten ECC y ahora también tienen código de corrección
de errores.
Sé que es un poco confuso.
Así que tenlo en cuenta cuando salgas al campo.