MONITOREO DE EVENTOS PARA PENTIUM CON MMX

MONITOREO DE EVENTOS PARA PENTIUM CON MMX ORGANIZACIÓN DE COMPUTADORES II Alumnos: Andrea Katz y Andrés Stoliar Monitoreo de Eventos para Pentium con

1 downloads 147 Views 57KB Size

Recommend Stories


Pentium III
Microprocesador. {CPU}. Pentium 3. Proyecto Katmai. Intel Inside. {MMX}. 3D Now

Pentium III
Microprocesador. {CPU}. Pentium 3. Proyecto Katmai. Intel Inside. {MMX}. 3D Now

Procesadores Pentium
Microprocesadores. Intel. Pentium. {MMX}. Instrucciones

Story Transcript

MONITOREO DE EVENTOS PARA PENTIUM CON MMX ORGANIZACIÓN DE COMPUTADORES II Alumnos: Andrea Katz y Andrés Stoliar

Monitoreo de Eventos para Pentium con MMX • Organización de Computadores II • Andrea Katz y Andrés Stoliar • 1/10

MONITOREO DE EVENTOS EN LOS PROCESADORES PENTIUM DE INTEL En la familia de procesadores Pentium, Intel introduce soporte de hardware que permite monitorear y medir parámetros de performance del procesador. Se provee de contadores que pueden ser programados para incrementarse cuando ocurran determinados eventos. Estos eventos pueden ser, por ejemplo, cantidad de instrucciones de algún tipo ejecutadas, hits o misses de caché, flushes de pipeline, etc. Observando algunos de estos eventos es posible llegar a conclusiones acerca, no solo del funcionamiento del procesador, sino también de cuales son las mejores opciones para escribir código eficiente para cada modelo de la familia. Cada modelo de procesador Pentium tiene un conjunto de lo que Intel llama Model Specific Registers (MSR). Si bien estos registros varían de modelo a modelo, las instrucciones para acceder a ellos son propias de la arquitectura y de acuerdo a esto pertenecen al set de instrucciones de toda la familia. Estas instrucciones son RDMSR y WRMSR (read/write MSR), que leen y escriben respectivamente los registros MSR, y entre ellos los contadores (Performance Monitor Counters) a los que nos referimos antes. En adelante nos referiremos particularmente a los procesadores Pentium con MMX.

Monitoreo de Eventos para Pentium con MMX • Organización de Computadores II • Andrea Katz y Andrés Stoliar • 2/10

REGISTROS DE MONITOREO DE PERFORMANCE (PMC) Existen cuatro reistros de monitoreo, a saber: Time Stamp Counter (TSC) Se incrementa en cada ciclo de reloj. Programmable Event Counters (CTR0 y CTR1) Son dos registros contadores de 40 bits que pueden ser programados para contar cantidad de ocurrencias o ciclos de duración de una lista pre-determinada de eventos. Control and Event Select Register (CESR) Controla la operación de los contadores programables y sus pins asociados. Relacionados con cada contador (CTR0 y CTR1) el CESR contiene tres campos: 6 bits para la selección del evento (ES), un bit de control del pin (PC) y 3 bits de control del contador (CC).

Selección del evento (ES0 - ES1) Hasta dos eventos pueden ser monitoreados simultáneamente escribiendo los códigos de evento en los bits correspondientes a estos campos. (ver Lista de eventos). Control del contador (CC0 - CC1) Controla la operación del monitor. Los dos bits menos significativos permiten indicar que se monitoreen solo eventos ligados a ejecución de código en algún nivel de privilegio (CPL) en particular. El bit más significativo selecciona entre contar ocurrencias del evento o ciclos de duración de la ejecución. CC 000 001 010 011 100 101 110 111

Significado deshabilita el contador cuenta el evento seleccionado para CPL = 0, 1 ó 2 cuenta el evento seleccionado para CPL = 3 cuenta el evento seleccionado independientemente del nivel de privilegio deshabilita el contador cuenta los ciclos de ejecución de código de CPL = 0, 1 ó 2 cuenta los ciclos de ejecución de código de CPL = 3 cuenta los ciclos de ejecución de código independientemente del privilegio

Control del pin (PC0 - PC1) Asociados con CTR0 y CTR1 hay dos pins, PM0 y PM1 (PM0/BP0 y PM1/BP1). Estos pins pueden ser programados por medio de estos campos para indicar que su contador asociado fue incrementado o bien que hubo un overflow. PC 0 1

Señal activa cuando (en) el contador correspondiente fue incrementado hubo overflow

Monitoreo de Eventos para Pentium con MMX • Organización de Computadores II • Andrea Katz y Andrés Stoliar • 3/10

RESTRICCIONES DE USO DE LOS MSR Las instrucciones RDMSR y WRMSR solamente pueden ser ejecutadas bajo nivel de privilegio cero. Dado que los programas de usuario que se ejecutan bajo un sistema operativo tienen nivel de privilegio 3 (solamente el S.O. ejecuta en nivel de privilegio 0), no les es posible incluir las instrucciones de lectura y escritura de los MSR. Se nos ocurren dos posibilidades para que un programa de usuario pueda acceder a estas instrucciones: La primera sería cambiar de privilegio, para lo cual sería necesario un sistema operativo que lo permita (por ejemplo DOS). La otra opción sería utilizar un S.O. que provea de una interfaz para usar las intrucciones desde privilegio 3. Hasta donde sabemos ningún sistema operativo cuenta con esta interfaz. La opción es agregar esta funcionalidad a un sistema operativo existente. Linux, cuyas fuentes son abiertas y su documentación abundante, resulta ideal porque permite, además, agregar funcionalidad al kernel en tiempo de ejecución, sin necesidad de volver a compilarlo una vez modificado.

Monitoreo de Eventos para Pentium con MMX • Organización de Computadores II • Andrea Katz y Andrés Stoliar • 4/10

EL MÓDULO MONITOR La interfaz deberá darnos la posibilidad de programar el Control and Event Select Register (CESR), leer los registros contadores (CRT0 y CRT1) y leer el Time Stamp Counter (TSC). Intel provee la instrucción RDPMC (read PMC) para leer CRT0 y CRT1 bajo nivel de privilegio 3. Esta instrucción es soportada por el procesador bajo la condición de que se active el flag Program Counter Enable del registro de control 4 (CR4.PCE). Este registro solo puede ser modificado bajo nivel de privilegio 0, por lo que se deberá hacerlo a través de esta interfaz. Análogamente, existe la instrucción RDTSC (read TSC). A diferencia de la anterior, el uso de esta instrucción con nivel de privilegio 3 está habilitado por defecto. Por esto no será necesaria ninguna intervención de esta interfaz. En cuanto a la programación de los contadores, es necesario que la interfaz provea la forma de escribir el CESR. Las operaciones que provee el modulo monitor son las siguientes: Código de operación 0 1 2 3 4

Descripción

Entrada

Salida

Hello. Verifica el funcionamiento del módulo. Escribe el CESR Lee el CESR Resetea CESR Resetea contadores CRT0 y CRT1

CESR a escribir -

CESR -

No se dispone de una operación para setear el flag Program Counter Enable (CR4.PCE) dado que el módulo se ocupa de hacerlo cuando es cargado. El módulo monitor atiende con el código de llamada 250 de la int 0x80, que es la que se utiliza para las llamadas al sistema operativo. El pasaje de parámetros se realiza por medio de registros. Por lo tanto, la llamada para realizar alguna de estas operaciones se hace del siguiente modo: mov ecx, parámetro mov ebx, cód_op mov eax, 250 int 0x80

(si es necesario)

El hecho de que estas operaciones sean hechas por medio de una llamada al S.O. genera un overhead sobre la operación propiamente dicha. Esto debería ser tenido en cuenta en el momento de realizar las mediciones. Otra cosa que debería tenerse presente es que los registros de monitoreo no son salvados durante los cambios de contexto. Esto es, los eventos son monitoreados continuamente si el CESR está programado, independientemente de qué proceso sea el que se esté ejecutando. Además no hay restricciones en cuanto a que cualquier proceso puede acceder a las operaciones del monitor en todo momento.

Monitoreo de Eventos para Pentium con MMX • Organización de Computadores II • Andrea Katz y Andrés Stoliar • 5/10

MODOS DE INSTALACIÓN Y USO El módulo monitor está compilado para la versión de kernel 2.2.14. Bajo esta versión solamente es necesario introducir –como root– el comando “insmod monitor.o” desde el directorio en que se encuentra el archivo “monitor.o”. Se provee también de los archivos fuentes “mod.c”, “mon.c”, “msr.h” y el Makefile correspondiente. A los efectos de simplificar el uso de las funciones del módulo monitor, se agrega una pequeña librería de macros. En los archivos de código en que éstas sean usadas deberá incluírse la línea “%include “monitor.mac””. Macro HELLO Solo para propósitos de debug. Permite verificar si el módulo se encuentra cargado. Sintaxis:

HELLO

Entrada:

ninguna

Salida:

Devuelve 0 por eax. Imprime un mensaje por consola.

Utiliza:

eax y ebx

Ejemplo:

HELLO

Macro PROGRAMAR Escribe 0 en los contadores CTR0 y CTR1. Genera la palabra de control y la escribe en el CESR. Sintaxis:

PROGRAMAR pin0, control0, evento0, pin1, control1, evento1

Entrada:

Las tres primeras entradas programan el contador 0 (CTR0), las tres siguientes programan el contador 1 (CTR1).

pin0:

Selecciona la función del pin externo (PM0/BP0). - Si es incr el pin activo indica incremento del contador. - Si es ovrf el pin activo indica overflow del contador.

control0:

Actúa sobre dos aspectos. En primer lugar indica si el contador debe incrementarse en cada ocurrencia del evento o en cada ciclo que dure el evento. Por otro lado permite decidir sobre la ejecución de código de qué nivel de privilegio se quiere medir. - Si es veces012 cuenta la cantidad de ocurrencias del evento que se produjeron bajo privilegio 0, 1 o 2. - Si es veces3 cuenta la cantidad de ocurrencias del evento que se produjeron bajo privilegio 3.

Monitoreo de Eventos para Pentium con MMX • Organización de Computadores II • Andrea Katz y Andrés Stoliar • 6/10

- Si es veces0123 cuenta la cantidad de ocurrencias del evento que se produjeron independientemente del nivel de privilegio. - Si es ciclos012 cuenta y acumula los ciclos durante los cuales se ejecutó en nivel de privilegio 0, 1 o 2. - Si es ciclos3 cuenta y acumula los ciclos durante los cuales se ejecutó en nivel de privilegio 3. - Si es ciclos0123 cuenta y acumula los ciclos durante los cuales se ejecutó independientemente del nivel de privilegio. - Si es nada el contador no se incrementa. evento0:

Selecciona el evento. Constante que identifica el evento. (Ver Lista de eventos).

pin1: control1: evento1:

idem que pin0 pero para CTR1 idem que control0 pero para CTR1 idem que evento0 pero para CTR1

Salida:

Devuelve 0 por eax.

Utiliza:

eax, ebx y ecx.

Ejemplo:

PROGRAMAR ovrf, veces3, 3, ovrf, veces3, 3 Cuenta en el contador 0 las veces que se produjo un miss durante una operación de lectura de datos por parte del usuario, y en el 1 el mismo evento bajo cualquier nivel de privilegio (incluyendo los de CPL 3).

La definición de las macros es la siguiente: SYSMONITOR EQU 250 ;pin incr EQU 0 ovrf EQU 1 ;control nada veces012 veces3 veces0123 ciclos012 ciclos3 ciclos0123

EQU EQU EQU EQU EQU EQU EQU

0 1 2 3 5 6 7

;HELLO %MACRO HELLO mov ebx, 0 mov eax, SYSMONITOR int 0x80 %endmacro Monitoreo de Eventos para Pentium con MMX • Organización de Computadores II • Andrea Katz y Andrés Stoliar • 7/10

;escribe el CESR ;PROGRAMAR pin0, control0, evento0, pin1, control1, evento1 %MACRO PROGRAMAR 6 mov ebx,4 mov eax,SYSMONITOR int 0x80 mov ecx,((%3)+(%2

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.