43.2. Configuración de Oprofile

Antes de que pueda ejecutar Oprofile, debe configurarlo. Como mínimo, se requiere seleccionar supervisar el kernel (o seleccionar no supervisar el kernel). Las secciones siguientes describen cómo utilizar la utilidad opcontrol para configurar Oprofile. A medida que se ejecutan los comandos opcontrol, las opciones de configuración son guardadas al archivo /root/.oprofile/daemonrc.

43.2.1. Especificar el Kernel

Primero, configure si Oprofile debería supervisar el kernel. Esta es la única opción de configuración que se requiere antes de iniciar Oprofile. Todas las otras opciones son opcionales.

Para supervisar el kernel, ejecute el comando siguiente como root:

opcontrol --vmlinux=/boot/vmlinux-`uname -r`

Para configurar Oprofile para que no controle el kernel, ejecute el comando siguiente como root:

opcontrol --no-vmlinux

Este comando también carga el módulo del kernel oprofile (si aún no ha sido cargado) y crea el directorio /dev/oprofile/ si aún no existe. Consulte la Sección 43.6 para más detalles sobre este directorio.

NotaNota
 

Aún si se configura Oprofile para que no perfile el kernel, el kernel de SMP debe estar ejecutándose para que el módulo oprofile se pueda cargar a partir de este.

El configurar si las muestras deberían ser reunidas dentro del kernel sólo cambia los datos que son reunidos, no el cómo o dónde estos datos son almacenados. Para generar archivos de muestras diferentes para el kernel y las bibliotecas de aplicaciones, consulte la Sección 43.2.3.

43.2.2. Configurar los eventos a supervisar

La mayoría de los procesadores contienen contadores, los cuales son usados por Oprofile para supervisar eventos específicos. Como se muestra en la Tabla 43-2, el número de contadores disponibles depende del procesador.

Procesadorcpu_typeNúmero de contadores
Pentium Proi386/ppro2
Pentium IIi386/pii2
Pentium IIIi386/piii2
Pentium 4 (sin hilos múltiples)i386/p48
Pentium 4 (múltiples hilos o hyper-threaded)i386/p4-ht4
Athloni386/athlon4
AMD64x86-64/hammer4
Itaniumia64/itanium4
Itanium 2ia64/itanium24
TIMER_INTtimer1
IBM eServer iSeriestimer1
IBM eServer pSeriestimer1
IBM eServer S/390timer1
IBM eServer zSeriestimer1

Tabla 43-2. Procesadores y contadores de Oprofile

Utilice la Tabla 43-2 para verificar que fue detectado el tipo correcto de procesador y para determinar el número de eventos que pueden ser monitoreados simultáneamente. Se utiliza timer como el tipo de procesador si el procesador no tiene hardware de supervisión del rendimiento compatible.

Si se utiliza timer, los eventos no se pueden configurar para ningún procesador porque el hardware no tiene el soporte para el hardware de contadores de rendimiento. En su lugar, se utilizan las interrupciones del temporizador para crear perfiles.

Si no se utiliza timer como el tipo de procesador, se pueden cambiar los eventos supervisados y el contador 0 para el procesador, es configurado por defecto a un evento en base a tiempo. Si existe más de un contador en el procesador, los contadores diferentes del contador 0, no se configuran a un evento por defecto. Los eventos controlados por defecto se muestran en la Tabla 43-3.

ProcesadorEvento predeterminado para el Contador 0Descripción
Pentium Pro, Pentium II, Pentium III, Athlon, AMD64CPU_CLK_UNHALTEDEl reloj del procesador no está detenido
Pentium 4 (HT y no-HT), Intel® EM64TGLOBAL_POWER_EVENTSEl tiempo durante el cual el procesador no está detenido
Itanium 2CPU_CYCLESCPU Cycles
TIMER_INT(ninguno)Muestra para cada interrupción del temporizador

Tabla 43-3. Eventos predeterminados

El número de eventos que se pueden supervisar a la vez, es determinado por el número de contadores para el procesador. Sin embargo, no es una relación de uno a uno; en algunos procesadores, se deben mapear ciertos eventos a contadores específicos. Para determinar el número de contadores disponibles, ejecute el comando siguiente:

cat /dev/oprofile/cpu_type

Los eventos disponibles varían dependiendo del tipo de procesador. Para determinar los eventos disponibles para el perfilamiento, ejecute el comando siguiente como root (la lista es específica al tipo de procesador):

op_help

Se pueden configurar los eventos para cada contador a través de la línea de comandos o con una interfaz gráfica. Si el contador no se puede configurar a un evento específico, se muestra un mensaje de error.

Para configurar el evento para cada contador configurable a través de la línea de comandos, utilice opcontrol:

opcontrol --ctrlN-event=<event-name>

Reemplace N con el número del contador (comenzando con 0) y reemplace <event-name> con el nombre exacto del evento desde op_help.

43.2.2.1. Velocidad de muestreo

Por defecto, se selecciona un evento basado en tiempo. Esto crea aproximadamente 2000 muestras por segundo por procesador. Si se utilizan las interrupciones del temporizador, el temporizador es configurado a la velocidad instantánea que sea y no es configurable por el usuario. Si el cpu_type no es timer, cada evento puede tener una velocidad de muestreo configurada. La velocidad de muestreo es el número de eventos entre cada instantánea de muestra.

Cuando configure el evento para el contador, también se puede especificar una velocidad de muestreo:

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate>

Reemplace <sample-rate> con el número de eventos a esperar antes de tomar muestras otra vez. Mientras más pequeña la cuenta, más frecuentes seran los muestreos. Para aquellos eventos que no ocurren frecuentemente, se necesita una cuenta más pequeña para capturar las instancias del evento.

AtenciónAtención
 

Tenga extremo cuidado cuando configure las velocidades de muestreo. Si se toman muestras con demasiada frecuencia puede sobrecargar al sistema, causando que el sistema parezca congelado o que en verdad el sistema se congele.

43.2.2.2. Máscaras de unidades

Si el cpu_type no es timer, se pueden necesitar máscaras de unidades para definir aún más el evento.

Las máscaras de unidades para cada evento son listadas con el comando op_help. Los valores para cada máscara de unidad son listados en formato hexadecimal. Para especificar más de una máscara de unidad, los valores hexadecimales deben estar combinados usando una operación de bits or.

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate> --ctrN-unit-mask=<value>

43.2.3. Separar perfiles del Kernel y del espacio del usuario

Por defecto, se reune información del modo del kernel y del modo del usuario por cada evento. Para configurar Oprofile para que no cuente eventos en modo del kernel para un contador en particular, ejecute el comando siguiente (donde N es el número del contador):

opcontrol --ctrN-kernel=0

Ejecute el comando siguiente para comenzar a perfilar otra vez en modo kernel para el contador:

opcontrol --ctrN-kernel=1

Para configurar Oprofile para que no cuente eventos en modo usuario para un contador específico, ejecute el comando siguiente (donde N es el número del contador):

opcontrol --ctrN-user=0

Ejecute el comando siguiente para comenzar a perfilar nuevamente en modo usuario para el contador:

opcontrol --ctrN-user=1

Cuando el demonio Oprofile escribe datos del perfil a los archivos de muestras, puede separar los datos del perfil de kernel y de la biblioteca en archivos separados. Para configurar la forma en que el demonio escribe a los archivos de muestra, ejecute el comando siguiente como root:

opcontrol --separate=<choice>

<choice> puede ser alguno de los siguientes:

Si se utiliza --separate=library, el nombre del archivo de muestras incluye el nombre del ejecutable así como también el nombre de la biblioteca.