viernes, 9 de enero de 2009

Arquitectura de comprobación de máquina

Los Pentium 4, Intel Xeon, y la familia P6 implementan una arquitectura de máquina que proporciona un mecanismo para detectar y reportar errores de hardware, como errores en los buses del sistema, errores en caches...Consiste en un conjunto de registros específicos de modelo (MSRs) que se usan para montar comprobaciones de máquina y bancos adicionales de MSRs usados para guardar errores detectados. El procesador señala la detección de un error de comprobación de máquina mal corregido generando una excepción de comprobación de máquina. La implementación de esta arquitectura no permite que el procesador se reinicie después de generar una excepción de comprobación de máquina. Sin embargo, el administrador de excepciones de comprobación de máquina puede recoger información sobre el error desde los MSRs de comprobación de máquina.
Los MSRs de comprobaciones de máquina en los Pentium 4, Intel Xeon, y en la familia P6 consisten en un conjunto de registros de control y de estado globales y varios bancos de registros de reportado de errores. Cada banco está asociado con una unidad hardware específica en el procesador. Para leer y escribir en estos registros se usan las instrucciones RDMSR y WRMSR. Cada banco de registros de reporte de errores puede contener los MSRs IA32_MCi_CTL, IA32_MCi_STATUS, IA32_MCi_ADDR, y IA32_MCi_MISC. El número de bancos de reporte se indica por los bits [7:0] del MSR IA32_MCG_CAP. El primer registro de reporte de errores empieza siempre en la dirección 400H.
Empezando con los Intel Core Duo, el reporte de errores de la cache fue mejorado. En procesadores anteriores, el estado de la cache estaba basada en el número de correcciones que ocurrían eventualmente. Ahora, el estado de la cache está basada en el número de líneas en una cache que sufren repetidas correcciones. Un procesador que soporta reporte de errores de cache mejorado contiene hardware que rastrea el estado operativo de ciertos caches y proporciona un indicador de su 'salud'. El hardware reporta un estado 'verde' cuando el número de lineas que sufre repetidas correcciones está por debajo de un umbral, y se reporta un estado 'amarillo' cuando ese umbral se irrumpe. En este caso la cache que lo reporta opera correctamente, pero se debe programar el sistema para que sirva dentro de un par de semanas. Intel recomienda contar con este mecanismo para estructuras soportadas por el reporte de errores basado en umbral.
La interrupción de error de comprobación de máquina (CMCI) en una mejora arquitectónica que proporciona capacidades más allá de las de reporte de errores basadas en umbral. Con esta última, el software está limitado a usar periodic polling para preguntar el estado de errores MC corregido por hardware. CMCI (que está desactivado por defecto) proporciona un mecanismo de señalización para repartir una interrupción local basada en los valores de umbral que puede programar el software usando los MSRs IA32_MCi_CTL2. Para detectar la existencia de umbrales para un banco determinado, el software escribe solo los bits 14:0 con el valor del umbral. Si los bits persisten, entonces los umbrales están disponibles (y CMCI también). Si los bits son todos ceros, entonces no existen.
Cuando el procesador detecta una condición de error de comprobación de máquina, escribe un código de error de 16 bits en el campo de códigos de error del MCA de uno de los registros IA32_MCi_STATUS y activa la bandera VAL (válido) en el registro. Los códigos de error MCA están arquitectónicamente definidos para los procesadores IA-32 y Intel 64. Para determinar la causa de la excepción, el administrador de excepciones de comprobación de máquina tiene que leer la bandera VAL para cada registro IA32_MCi_STATUS. Si la bandera está activa, el administrador debe leer el campo de código de error MCA del registro. Es la codificación del campo la que determina el tipo de error que se reporta y no el banco de registros reportado. Hay 2 tipos de código: códigos de errores simples, y códigos de errores compuestos.
La arquitectura para comprobaciones de máquina y logging de errores se pueden usar de dos formas distintas:
- Para detectar errores de máquina durante una ejecución normal de instrucciones
- Para comprobar periódicamente y loggear los errores de máquina.
Para usar la excepción de comprobación de máquina, el sistema operativo debe proporcionar un administrador de excepciones de comprobación de la máquina. Este administrador puede necesitar ser diseñado específicamente para cada familia de procesadores. Se requiere un programa o una utilidad especial para loggear errores de máquina.

No hay comentarios: