Presentación inteligencia artificial en la actualidad
37 supervisión del sistema
1. Parte V. Supervisión del sistema
Los administradores de sistemas también supervisan el rendimiento del sistema. Red Hat Enterprise
Linux contiene herramientas para asistir a los administradores con estas tareas.
2. 547
SystemTap
37.1. Introducción
SystemTap proporciona una interfaz de línea de comandos y un lenguaje de script que simplifica la
obtención de información sobre el kernel de Linux en ejecución para que éste pueda ser analizado
en profundidad. Los datos pueden ser extraidos, filtrados y resumidos de manera rápida y segura,
permitiendo así el diagnóstico de problemas complejos de funcionalidad o rendimiento.
SystemTap permite que los scripts sean escritos en el lenguaje de script propio de SystemTap, el cual
es luego compilado en los módulos de kernel en C e insertado en el kernel.
La principal idea tras los scripts de systemtap es nombrar eventos y darles un manejador. Cuando un
evento ocurre, el Kernel de Linux ejecuta el manejador como si fuera éste una subrutina rápida, luego
continúa. Hay diferentes tipos de eventos, tales como entrar o salir de una función, el vencimiento
de un cronómetro o el inicio o finalización de la sesión de systemtap. El manejador consiste de una
serie de declaraciones a ejecutar una vez el evento ocurra. Entre estas declaraciones puede estar la
extracción de datos del contexto del evento, almacenamiento de variables internas o la impresión de
resultados.
37.2. Implementación
SystemTap takes a compiler-oriented approach to generating instrumentation. Refer to Figura 37.1,
“Flujo de Datos en SystemTap” "Flow of data in SystemTap" for an overall diagram of SystemTap used
in this discussion. In the upper right hand corner of the diagram is the probe.stp, the probe script the
developer has written. This is parsed by the translator into parse trees. During this time the input is
checked for syntax errors. The translator then performs elaboration, pulling in additional code from the
script library and determining locations of probe points and variables from the debug information. After
the elaboration is complete the translator can generate the probe.c, the kernel module in C.
El archivo probe.c es compilado en un módulo de kernel regular, probe.ko, utilizando el compilador
GCC. La compilación puede incorporar código soporte de la bibliotecas de ejecución. Depués de
que GCC ha generado la probe.ko,se inicia el demonio de System Tap para recoger las salidas del
módulo de instrumentación. Este módulo es cargado en el kernel y se da inicio a la recolección de
datos. Los datos del módulo de instrumentación se transfieren a un espacio de usuario por medio de
relayfs y son presentados por daemon. Cuando el usuario presiona Control-C el demonio descarga el
módulo, el cual también apaga el proceso de recolección de datos.
3. 548
Capítulo 37. SystemTap
Figura 37.1. Flujo de Datos en SystemTap
37.3. Utilización de System Tap
Systemtap trabaja traduciendo un script de SystemTap a C, ejecutando el compilador del sistema
C para crear un módulo kernel de eso. Cuando se carga el módulo, activa todos los eventos
probados conectándose al kernel. Después mientras los venetos ocurren en cualquier procesador,
los manipuladores compilados ejecutan. Eventualmente, la sesión se detiene, la conexiones se
deshacen y se elimina el módulo. Todo este proceso es dirigido desde un sólo programa de líneas de
comandos, stap.
37.3.1. Rastreo
La manera más simple de sondear es rastrear un evento. Este es el efecto de insertar declaraciones
de impresión estratégicamente ubicadas en un programa. Con frecuencia este es el primer paso para
resolver un problema: explorar para ver la historia de lo que ha pasado.
Este estilo de instrumentación es el más simple. Sólo le pide a systemtap que imprima algo para cada
evento. Para expresar esto en el lenguaje de scripts necesita decir donde se debe hacer el sondeo y lo
que debe imprimir allí.
4. 549
Rastreo
37.3.1.1. Donde Sondear
Systemtap supports a number of built-in events. The library of scripts that comes with
systemtap, each called a "tapset", may define additional ones defined in terms of the built-in
family. See the stapprobes man page for details. All these events are named using a
unified syntax that looks like dot-separated parameterized identifiers:
Evento Descripción
begin El arranque de la sesión de systemtap.
end El final de la sesión de systemtap
kernel.function("sys_open") La entrada a la función llamada
sys_open en el
k
e
r
n
e
l
.
syscall.close.return El retorno de la llamada del sistema
cerrado.
module("ext3").statement(0xdeadbeef) La instrucción dirigida en el
controlador del sistema de
archivos ext3.
timer.ms(200) Un temporizador que dispara
cada 200 milisegundos.
Tabla 37.1. Eventos SystemTap
We will use as a demonstration case that you would like to trace all function entries and
exits in a source file, for example net/socket.c in the kernel. The
kernel.function probe point lets you express that easily, since systemtap
examines the kernel's debugging information to relate object code to source code. It
works like a debugger: if you can name or place it, you
can probe it. Use kernel.function("*@net/socket.c") for the function entries, and
kernel.function("*@net/socket.c").return for the exits. Note the use of
wildcards in the function name part, and the subsequent @FILENAME part. You can also put
wildcards into the file name, and even add a colon (:) and a line number, if you want to
restrict the search that precisely. Since systemtap will put a separate probe in every place
that matches a probe point, a few wildcards can expand to hundreds or thousands of
probes, so be careful what you ask for.
Una vez identifique los puntos de sondeo aparecerá el esqueleto del script de systemtap. La
palabra clave probe introduce un punto de prueba o una lista de ellas separadas por
comas. Los parentesis
{ y } encierran el manipulador para todos los puntos de sondeo enumerados.
Puede ejecutar este script tal como está aunque con manipuladores vacios no habrá
salidas. Ponga las dos líneas en un archivo nuevo. Ejecute stap -v FILE. Déle fin en
cualquier momento con ^C. (La opción -v le dice systemtap que imprima más mensajes
5. 550
verbosos durante su procesamiento. Intente la opción -h para ver más opciones.
37.3.1.2. Que Imprimir
Debido a que está interesado en cada función a la que se entró y se salió, se debería
imprimir una línea para cada una que contenga el nombre de la función. Para hacer que la
lista sea fácil de
leer, systemtap debe indentar las líneas de manera que las funciones llamadas por otras
funciones rastreadas sean anidadas más a fondo. Para distinguir un proceso de los otros
que se puedan estar ejecutando en ese momento, systemtap debe imprimir el identificador
del proceso en la línea.