# SystemTap

En informática, SystemTap (stap) es un lenguaje de script y herramienta para la instrumentación dinámica para sistemas operativos en producción basados en el núcleo Linux. Los administradores del sistema pueden usar SystemTap para extraer, filtrar y resumir datos para permitir el diagnóstico de problemas complejos de rendimiento o funcionales.
SystemTap consiste en software libre y de código abierto e incluye contribuciones de Red Hat, IBM, Intel, Hitachi, Oracle y otros miembros de la comunidad.

## Historia

SystemTap debutó en 2005 en Red Hat Enterprise Linux 4 Update 2 como una vista previa de la tecnología.
Después de cuatro años de desarrollo, SystemTap 1.0 se lanzó en 2009.
A 2011, SystemTap es totalmente compatible con todas las distribuciones de Linux, incluyendo RHEL/CentOS 5 desde la actualización 2, SLES 10, Fedora, Debian y Ubuntu.
Se agregaron puntos de rastreo en el CPython VM y JVM en SystemTap 1.2.

## Uso

Los archivos de SystemTap se escriben en el lenguaje de SystemTap (se guardan como archivos .stp) y se ejecutan con la línea de comandos stap. El sistema lleva a cabo una serie de pases de análisis en el script antes de permitir que se ejecute. Los scripts pueden ejecutarse con uno de los tres backends seleccionados por la opción --runtime=. El valor predeterminado es un módulo de kernel, que tiene la capacidad más completa para inspeccionar y manipular cualquier parte del sistema y, por lo tanto, requiere el mayor privilegio. Otro backend se basa en la biblioteca de análisis dinámico de programas DynInst para instrumentar los propios programas de espacio de usuario y requiere el menor privilegio. El backend más reciente se basa en el byte-code eBPF, está limitado a las capacidades del intérprete del kernel de Linux y requiere un nivel de privilegio intermedio. En cada caso, el módulo se descarga cuando el script ha terminado de ejecutarse.
Los scripts generalmente se enfocan en eventos (como iniciar o finalizar un script), puntos de sondeo compilados como los "puntos de rastreo" de Linux, o la ejecución de funciones o sentencias en el kernel o espacio de usuario.
Algunos scripts de "modo de gurú" también pueden tener código C incrustado, que puede ejecutarse con la opción de línea de comandos -g . Sin embargo, se desaconseja el uso del modo guru, y cada versión de SystemTap incluye más puntos de prueba diseñados para eliminar la necesidad de scripts en modo guru. Se requiere el modo Guru para permitir que los scripts modifiquen el estado en el software instrumentado, como para aplicar algunos tipos de soluciones de seguridad de emergencia.
A partir de la versión 1.7 de SystemTap, el software implementa el nuevo grupo stapsys y el nivel de privilegio correspondiente.

## Ejemplos simples

La siguiente secuencia de comandos muestra todas las aplicaciones que configuran las opciones de socket TCP en el sistema, qué opciones se están configurando y si la opción se configuró con éxito o no:
Muchos otros ejemplos se envían con SystemTap. También hay ejemplos reales del uso de SystemTap en la página de War Stories.

## Importación de scripts desde otras tecnologías de rastreo.

SystemTap puede adjuntarse a los marcadores de DTrace cuando se compilan en una aplicación utilizando macros del archivo de encabezado sys/sdt.h