5

Click here to load reader

37 supervisión del sistema

Embed Size (px)

Citation preview

Page 1: 37  supervisión del sistema

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.

Page 2: 37  supervisión del sistema

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.

Page 3: 37  supervisión del sistema

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í.

Page 4: 37  supervisión del sistema

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

ke

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

Page 5: 37  supervisión del sistema

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.