¿Cómo interactúa la actualización de SDRAM con ECC?

4

Estoy tratando de entender cómo funciona el hardware de SDRAM si también tiene capacidad ECC.

Si un sistema de memoria tiene capacidad ECC, podrá corregir un solo error de bit en un bloque de memoria y detectar, pero no corregir, un error de múltiples bits. La forma en que lo entiendo es que cuando se lee el bloque de memoria, también se lee el Código de corrección de errores para ese bloque, y si se invierte un solo bit de lo que se escribió originalmente, el controlador de memoria lo corrige automáticamente. / p>

Ahora SDRAM, por su naturaleza, debe actualizar los datos que contiene o se corromperán con el tiempo. Por lo tanto, necesita leer sus celdas de memoria y luego volver a escribir los datos de manera regular. Por lo que he leído, esta lectura de actualización es ligeramente diferente de una lectura de memoria regular, ya que en realidad no tiene que enviar datos a través del bus a la CPU, por lo que la actualización se realiza en todo un banco a la vez y simplemente lee y escribe datos de nuevo en las mismas celdas sin tocar el bus.

Mi pregunta es si el proceso de ECC entra en juego durante las lecturas de actualización regulares de SDRAM, o se pasa por alto el proceso para que las actualizaciones se realicen lo más rápido posible para que no bloqueen el sistema de memoria e impidan el funcionamiento regular. accesos de memoria? Si tengo ECC SDRAM, ¿los errores de un solo bit se corrigen automáticamente en cada ciclo de actualización o el controlador de memoria espera hasta que la memoria oficial acceda para detectar y corregir los errores de un solo bit?

Quizás la respuesta podría depender del controlador de memoria en particular. Estoy leyendo la hoja de datos de un concentrador de controlador de gráficos y memoria Intel 855GM / 855GME para ver si ese controlador en particular hace lo que estoy describiendo, pero aún no he encontrado una respuesta.

    
pregunta A. Levy

2 respuestas

6

Para empezar, SDRAM Refresh no mueve técnicamente los datos fuera del chip. A nivel académico, lee los datos y vuelve a escribirlos, pero los pines de datos de la SDRAM no ven esos datos; se realizan internamente en el chip SDRAM. El controlador SDRAM le dice a la SDRAM que haga la actualización, pero eso es todo lo que se ve externamente.

ECC se realiza fuera del chip SDRAM, en el controlador SDRAM (generalmente ubicado dentro de la CPU o el chipset). También hay muchos controladores SDRAM diferentes que admiten ECC, por lo que es difícil hacer afirmaciones generales que sean siempre correctas. Pero lo intentaré.

Cuando se lee una ubicación de la memoria y los datos se corrompen pero se pueden corregir, los datos corregidos generalmente se escriben de nuevo en la RAM.

Algunos controladores ECC utilizarán el tiempo "inactivo" para leer cada ubicación de la memoria y, si hay un error corregible, volver a escribir los datos corregidos. La idea aquí es que esto evita que un solo error de bit que se puede corregir se convierta en un error de bits múltiples no corregible debido a una mayor "rotura de bits". Hay un término para esta función que estoy olvidando en este momento.

Leer cada ubicación de la memoria es una buena idea, pero en computadoras más modernas no se puede confiar en esto para actualizar la memoria SDRAM de manera efectiva. Las máquinas modernas tienen mucha memoria y se necesita mucho tiempo para leerlas. La actualización incorporada de los chips SDRAM funciona bastante bien. Y hacer esto quita el ancho de banda de memoria valioso de la CPU.

Es mucho mejor usar la actualización normal y luego escanear la memoria en busca de errores en una tarea de baja prioridad.

    
respondido por el user3624
2

La actualización de la SDRAM no tiene ningún efecto sobre los errores y no se puede utilizar para ayudar a un sistema ECC; las dos características son sistemas separados.

Sin embargo, lo contrario puede funcionar; Al implementar un determinado tipo de esquema ECC, también puede actualizar la memoria como efecto secundario y desactivar la lógica de "actualización automática". Esto significa que puede obtener un poco más de valor del tiempo "desperdiciado" empleado en actualizar la memoria.

Utiliza el efecto de que abrir un banco con RAS (accediendo a él si lo desea) y luego cerrar ese banco ("precargarlo") tiene el mismo efecto que actualizar ese banco. Para obtener más detalles, lea la hoja de datos de la memoria (¡libro!) Prestando atención a ese tema.

Entonces, si tiene un proceso en segundo plano que accede a cada banco de memoria, al menos una vez cada 64 ms, ese proceso también actualizará la memoria sin necesidad de ninguna lógica de actualización adicional.

En la década de 1980, era común que los sistemas pequeños compartieran DRAM entre la CPU y el video, ¡por lo que la exploración del video refrescaría automáticamente la memoria gratis!

Ahora, un esquema de ECC de alta integridad implica la "limpieza" de la memoria, es decir, la lectura y la corrección de errores como un proceso en segundo plano, de modo que los errores de un solo bit no pueden acumularse y convertirse en errores de doble bit no corregibles.

El proceso en segundo plano es:
Abrir un banco lea y (si es necesario) corrija una o algunas columnas; cerrar el banco dormir por 8 nosotros.
Cuando esa columna se haya borrado en todos los bancos (en menos de 64 ms), incremente la dirección de la columna y comience de nuevo.

Obtenga la programación correcta (¡8 us y 64ms son ejemplos y su SDRAM puede variar!) y este esquema de ECC también actualizará su memoria de forma gratuita.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas