jueves, 15 de enero de 2009

Monitoreo de rendimiento y depuración

Las arquitecturas IA-32 y Intel 64 proporcionan facilidades de depuración para usarlos en código de depuración y monitorización de rendimiento. Estas facilidades son importantes para depurar aplicaciones, software del sistema, y sistemas operativos multitarea. Al soporte de depuración se accede usando registros de depuración (DB0 a DB7) y registros específicos de cada modelo (MSRs). Los primeros contienen las direcciones de memoria y localizaciones de E/S llamadas breakpoints (son localizaciones user-selected en un programa, un área de almacenamiento de datos en memoria, o puertos de E/S específicos).
Estas son las facilidades de depuración y de monitorización de rendimiento:
- Excepción de depuración (#DB); transfiere el control del programa a un procedimiento de depuración cuando ocurre un evento de depuración.
- Excepción Breakpoint (#BP)
- Registro de direcciones breakpoint (DR0 a DR3); especifican las direcciones de 4 breakpoints.
- Registro de estado de depuración (DR6); Devuelve las condiciones efectivas cuando se generó la excepción de depuración o de breakpoint.
- Registro de control de depuración (DR7); Especifica la forma de acceso a memoria o de E/S que causó que se generara el breakpoint.
- bandera T (trap), TSS; genera una excepción de depuración cuando se intenta cambiar de tarea con la bandera T activa en su TSS.
- bandera RF (resume), registro EFLAGS; suprime múltiples excepciones a la misma instrucción.
- bandera TF (trap), registro EFLAGS; genera una excepción de depuración después de cada ejecución de una instrucción.
- Instrucción breakpoint (INT3); genera una excepción de breakpoint que transfiere el control del programa al procedimiento de depuración. Es especialmente útil cuando se quieren mas de 4 breakpoints o cuando se ponen en el código fuente.
- facilidades de grabación del último banco; El banco de reserva guarda en la pila de 'last branch record' (o LBR) los MSRs para los últimos bancos recibidos, interrupciones, y/o excepciones en MSRs.
El monitoreo del rendimiento se introdujo en el procesador Pentium con un conjunto de contadores de monitoreo de rendimiento específicos. Estos contadores permiten seleccionar los parámetros de rendimiento del procesador para que sean monitorizados. La información de los contadores se puede usar para poner a punto el sistema y el rendimiento del compilador. En la familia P6 este mecanismo se mejoró permitiendo una selección mayor de eventos a monitorizar y permite un mayor control para monitorizar mas eventos. Mas tarde, los Pentium 4 y Xeon lo mejoraron aun mas y incluyeron un nuevo conjunto de eventos de rendimiento. Estos mecanismos de monitorización del rendimiento y los eventos del rendimiento no son arquitectónicos; son específicos de cada modelo (diferentes y no compatibles entre familias).
Los eventos de monitorización de rendimiento son arquitectónicos cuando tienen consistencia entre microarquitecturas. Intel Core Solo y Intel Core Duo introducen el monitoreo del rendimiento de la arquitectura. Esta característica proporciona un mecanismo al software para enumerar eventos de rendimiento y proporciona facilidades de configuración y contadores para eventos.
El contaje de los ciclos (clockticks), forma una base para medir cuanto tiempo le lleva ejecutarse a un programa. Este contaje también se usa como parte de ratios eficientes, como los ciclos por instrucción (CPI). Los relojes pueden dejar de marcar si el procesador se para cuando no hay nada que hacer en la CPU, o cuando el procesador está 'dormido' como resultado de ser parado o por algún tema de administración energética.
La capacidad de monitoreo del rendimiento en procesadores de doble núcleo duplica las fuentes de la microarquitectura de un procesador mononúcleo. Cada núcleo tiene sus propias fuentes de monitoreo de rendimiento dedicadas.
Los procesadores de la familia P6 proporcionan dos contadores de rendimiento de 40 bits, permitiendo monitorizar dos tipos de eventos a la vez. Pueden o contar eventos o medir su duración. Cuando los cuentan, un contador se incrementa cada vez que se da uno o varios eventos específicos. La acción de estos contadores engloba todos los niveles de privilegios.
El procesador Pentium también proporciona dos contadores de 40 bits, que se pueden usar para contar eventos o medir su duración. Los contadores están soportados por tres MSRs: el MSR selector de control y eventos (CESR) y los MSRs contadores de rendimiento (CTR0 y CTR1). En estos se puede escribir y leer utilizando las instrucciones RDMSR y WRMSR, teniendo privilegios de nivel 0 (los máximos). Cada contador está asociado a un pin externo el cual puede ser usado para indicar el estado del contador al hardware externo.

No hay comentarios: