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
Información general
Tipo de programa aplicación informática
Licencia GNU General Public License
Información técnica
Programado en C++
Plataformas admitidas Linux
Versiones
Última versión estable 4.2
Enlaces

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.[1]

Historia

editar

SystemTap debutó en 2005 en Red Hat Enterprise Linux 4 Update 2 como una vista previa de la tecnología.[2]

Después de cuatro años de desarrollo, SystemTap 1.0 se lanzó en 2009.[3]

A 2011, SystemTap es totalmente compatible con todas las distribuciones de Linux, incluyendo RHEL/CentOS 5[4]​ desde la actualización 2, SLES 10,[5]Fedora, Debian y Ubuntu.

Se agregaron puntos de rastreo en el CPython VM y JVM en SystemTap 1.2.[6]

Los archivos de SystemTap se escriben en el lenguaje de SystemTap[7]​ (se guardan como archivos .stp) y se ejecutan con la línea de comandos stap.[8]​ 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[9]​ 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.[10]

Ejemplos simples

editar

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:

# Show sockets setting options

# Return enabled or disabled based on value of optval
function getstatus(optval)
{
  if ( optval == 1 )
    return "enabling"
  else
    return "disabling"
}

probe begin
{
	print ("\nChecking for apps setting socket options\n")
}

  # Set a socket option
  probe tcp.setsockopt
  {
    status = getstatus(user_int($optval))
  	printf (" App '%s' (PID %d) is %s socket option %s... ", execname(), pid(), status, optstr)
  }
  
    # Check setting the socket option worked
    probe tcp.setsockopt.return
    {
      if ( ret == 0 )
        printf ("success")
      else
        printf ("failed")
      printf ("\n")
    }

probe end
{
	print ("\nClosing down\n")
}

Muchos otros ejemplos se envían con SystemTap.[11]​ También hay ejemplos reales del uso de SystemTap en la página de War Stories.[12]

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

editar

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

Véase también

editar

Referencias

editar
  1. «A SystemTap update». lwn.net. 
  2. «Product Documentation for Red Hat Enterprise Linux». Red Hat. 
  3. «Josh Stone - SystemTap release 1.0». 
  4. «Product Documentation». Red Hat. 
  5. 60951 (10 de octubre de 2006). «Optional update for SystemTap». Novell. 
  6. «Features/SystemtapStaticProbes - FedoraProject». Fedoraproject. 
  7. https://sourceware.org/systemtap/langref/
  8. Compare Romans, Robb (2009). «SystemTap Language Reference: A guide to the constructs and syntax used in SystemTap scripts» (PDF). Red Hat. Consultado el 19 de diciembre de 2010. «SystemTap [...] requires root privileges to actually run the kernel objects it builds using the sudo command, applied to the staprun program.[...] staprun is a part of the SystemTap package, dedicated to module loading and unloading and kernel-touser data transfer.» 
  9. Merey, Aaron (18 de octubre de 2017). «systemtap 3.2 release». Consultado el 18 de octubre de 2017. «The systemtap team announces release 3.2 [...] early experimental eBPF (extended Berkeley Packet Filter) backend [...]». 
  10. Eigler, Frank Ch. (1 de febrero de 2012). «systemtap 1.7 release». Consultado el 26 de marzo de 2013. «The systemtap team announces release 1.7 [...] The new group and privilege level "stapsys" has been added [...]». 
  11. «SystemTap Examples». Archivado desde el original el 12 de marzo de 2016. Consultado el 24 de julio de 2019. 
  12. «WarStories - Systemtap Wiki». 

Enlaces externos

editar