stringtranslate.com

Marcador de núcleo

Los marcadores de kernel eran un mecanismo de soporte de instrumentación de kernel estático para el código fuente del kernel de Linux , que permitía que herramientas especiales como LTTng [1] o SystemTap [2] rastrearan la información expuesta por estos puntos de sondeo. Los marcadores de kernel se declaraban en el código del kernel mediante líneas de una sola línea con el formato:

trace_mark ( nombre , cadena_de_formato , ...);  

Donde nombre es el nombre único del marcador y formato_cadena describe los tipos de argumentos restantes.

Un marcador puede estar activado o desactivado según si hay una sonda conectada a él o no. El código que desea conectarse a un punto de seguimiento primero llama a:

int marker_probe_register ( const char * nombre , const char * cadena_de_formato , marker_probe_func * sonda , void * pdata );          

para registrar su devolución de llamada de sonda con el punto marcador ( pdata es un valor de datos privado que el código desea pasar a la sonda ). Posteriormente, la sonda se activa y desactiva mediante:

int marcador_arm ( const char * nombre ); int marcador_disarm ( const char * nombre );      

El uso de marcadores tiene una sobrecarga insignificante gracias en parte a los Valores Inmediatos , [3] otro mecanismo de soporte que incorpora interruptores en el código que se pueden activar y desactivar dinámicamente, sin usar una referencia de memoria y ahorrando así líneas de caché. [4]

La motivación inicial para crear esta infraestructura de instrumentación estática fue la gran sobrecarga de rendimiento inducida por el mecanismo de instrumentación dinámica anterior, el mecanismo Kprobe , que depende de puntos de interrupción . La instrumentación estática también puede sobrevivir más fácilmente a los cambios en el código fuente porque los marcadores están en el código fuente.

Los marcadores de núcleo consistían esencialmente en una macro de preprocesamiento de C que añadía, en la función instrumentada, una rama sobre una llamada de función . Al hacerlo, ni la configuración de la pila ni la llamada de función se ejecutan cuando la instrumentación no está habilitada. Al identificar la rama que ejecuta la configuración de la pila y la llamada de función como (usando el gcc incorporado ), se le da una pista al compilador para que coloque las instrucciones de seguimiento lejos de las líneas de caché involucradas en la ejecución estándar del núcleo. [5]unlikelyexpect()

Se identificaron dos inconvenientes de los marcadores de kernel [5] que llevaron a su reemplazo por puntos de seguimiento :

Un conjunto de parches que los implementaba se fusionó en la versión 2.6.24, [6] que se lanzó el 24 de enero de 2008. Para abordar los problemas relacionados con los marcadores del núcleo, Mathieu Desnoyers, su autor original, implementó una versión más simple y más segura de los puntos de sondeo estáticos llamada Tracepoints . Un conjunto de parches que implementaba Tracepoints se fusionó en la versión 2.6.28, [7] que se lanzó el 25 de diciembre de 2008. A partir de entonces, los marcadores del núcleo se eliminaron lentamente de las fuentes del núcleo y finalmente se eliminaron por completo en el núcleo Linux 2.6.32, [8] [9] que se lanzó el 3 de diciembre de 2009.

Véase también

Referencias

  1. ^ Puntos de seguimiento y marcadores Archivado el 23 de septiembre de 2009 en Wayback Machine , Wiki de seguimiento de LTTng
  2. ^ Uso de marcadores, Wiki de SystemTap
  3. ^ Mathieu Desnoyers, [parche 08/10] Valor inmediato - Documentación [ enlace muerto permanente ]
  4. ^ Mathieu Desnoyers, [parche 7/8] Valores inmediatos - Documentación [ enlace muerto permanente ]
  5. ^ ab Mathieu Desnoyers, Seguimiento de sistemas operativos de bajo impacto, tesis doctoral, Département de génie informatique et génie logiciel, École Polytechnique de Montréal, Université de Montréal, diciembre de 2009
  6. ^ Registro de cambios de Linux 2.6.24, principiantes del kernel de Linux
  7. ^ Registro de cambios de Linux 2.6.28, principiantes del kernel de Linux
  8. ^ Registro de cambios de Linux 2.6.32, principiantes del kernel de Linux
  9. ^ Christoph Hellwig, fc537766 Archivado el 15 de abril de 2013 en archive.today seguimiento: eliminar marcadores, árbol git de Linux de Torvalds

Enlaces externos