Articulo de referencia

ProbeVue

ProbeVue ​​es la implementación de IBM de un entorno de rastreo dinámico ligero introducido en AIX versión 6.1. [ 1 ] ProbeVue ​​permite sondear procesos en ejecución para reali...

ProbeVue ​​es la implementación de IBM de un entorno de rastreo dinámico ligero introducido en AIX versión 6.1. [ 1 ] ProbeVue ​​permite sondear procesos en ejecución para realizar análisis estadísticos y recuperar datos del proceso sondeado. Su naturaleza dinámica permite utilizarlo como una herramienta global de rendimiento del sistema, a la vez que conserva la capacidad de profundizar en eventos muy específicos de un único proceso o hilo.

Debido a que no se requieren modificaciones de un proceso o sistema analizado [ 2 ] y al diseño ligero de ProbeVue ​​como herramienta de rastreo, es adecuado para su uso en un entorno de producción donde las herramientas de rastreo anteriores habrían sido prohibitivas en términos de rendimiento.

Descripción

ProbeVue ​​proporciona una serie de especificaciones de puntos de sondeo, que son eventos potenciales que se pueden sondear. Un script escrito en lenguaje Vue permite al usuario definir un sondeo, que es un bloque de código llamado bloque de acción que se ejecutará cuando ocurran dichos eventos en el sistema. La ejecución del bloque de acción se puede limitar a eventos específicos mediante una instrucción condicional colocada en el sondeo, llamada predicado. El código del bloque de acción sigue una sintaxis similar a la de C con un conjunto limitado de funciones integradas.

A continuación se muestra un ejemplo de una sonda definida para cuando un proceso con PID 123456 accede a la llamada al sistema read() . Cuando esto ocurre, este script llama a la función integrada printf() para imprimir un mensaje en sus búferes de rastreo de salida. La primera línea del bloque de acción es un comentario de estilo C y, por lo tanto, no se ejecutará en el entorno de ProbeVue.

@@ syscall :*: read : entry when ( __pid == 123456 ) { /* Este es un comentario: El proceso con PID 123456 ha llamado a read(); */ printf ( "Llamada al sistema read() ingresada. \n " ); }

Las sondas como la del ejemplo anterior se pueden escribir y ejecutar sin las exhaustivas pruebas que normalmente se requieren en un sistema de producción. El entorno ProbeVue ​​protege al usuario del código erróneo y del rastreo que consume muchos recursos, problemas frecuentes en las herramientas de rastreo anteriores de IBM. La función de compilación en tiempo de ejecución de ProbeVue ​​proporciona un potente entorno ad hoc para la recopilación de datos.

Especificaciones del punto de sondeo

Actualmente, IBM proporciona los siguientes proveedores de sondeo en AIX 6.1: syscall, uft, interval, trace y los sondeos de ProbeVue ​​(BEGIN y END). El proveedor syscall define puntos de sondeo para un subconjunto de las llamadas al sistema disponibles. Los sondeos de rastreo de funciones de usuario (uft) se pueden definir para los puntos de entrada de funciones definidas en un programa C o C++ . Tanto los sondeos syscall como uft deben incluir un prototipo de función válido en el script Vue antes de que se pueda acceder a los parámetros de la función (para los sondeos de entrada) o a los valores de retorno (solo para los sondeos de salida de syscall). Los sondeos interval se activan mediante un temporizador y se pueden definir en intervalos de 100 milisegundos. El proveedor trace permite a ProbeVue ​​acceder a los ganchos de rastreo tradicionales. Finalmente, los sondeos de ProbeVue ​​denominados BEGIN y END se activarán cuando el entorno probevue se inicie y finalice.

El lenguaje Vue

Dado que ProbeVue ​​está diseñado como una herramienta para monitorizar eventos del sistema operativo, el lenguaje Vue utiliza un estilo orientado a eventos que se emplea para describir cómo procesar los datos derivados de estos eventos.

Al igual que la mayoría de los lenguajes de rastreo dinámico presentes en otros sistemas Unice, el lenguaje Vue tiene una sintaxis similar a la de C y se suele presentar en este contexto. La relación de Vue con C presenta muchos paralelismos, pero se diferencia significativamente de la naturaleza imperativa de C. Aquí se muestran algunos de los contrastes y similitudes. [ 3 ]

Tipos de datos

Dado que ProbeVue ​​se utiliza para monitorizar aplicaciones escritas principalmente en C, admite todos los tipos de datos y estructuras de datos de C. Vue también admite los tipos de datos String, list y time stamp. Los tipos String y list son en realidad arrays , mientras que time stamp es una representación de alta resolución de un punto en el tiempo. La conversión de tipos y la promoción automática de tipos durante las operaciones con tipos mixtos también son similares al comportamiento de C.

En ProbeVue, los punteros a arreglos y estructuras de datos se comportan igual que en un programa C. La principal diferencia radica en que, cuando los punteros apuntan a una ubicación en memoria, lo hacen en otro espacio de proceso. Para acceder a esa memoria, es necesario copiar primero la ubicación de memoria al entorno local de ProbeVue. Si la memoria está paginada, ProbeVue ​​no puede forzar un fallo de página para acceder a ella. Otra diferencia es que el tamaño de los punteros en C se determina en tiempo de compilación , mientras que en ProbeVue ​​depende de la arquitectura (32 o 64 bits) de la aplicación analizada.

Los tipos de datos de punto flotante son tipos de datos válidos para la asignación desde un proceso sondeado, pero no se pueden utilizar para operaciones matemáticas de punto flotante.

Clases de datos

Vue utiliza reglas de alcance similares a las de C, pero también debe tener en cuenta la naturaleza externa de gran parte de los datos en las sondas. Como resultado, no todas las clases de datos están disponibles o son relevantes en todas las sondas o en todas las partes de un script de View. Las clasificaciones básicas de datos son las siguientes.

globals - Variables que tienen alcance en todo el script de Vue
shell: variables que siguen las convenciones del shell y se leen desde el entorno Unix.
kernel - Variables proporcionadas por el kernel
local - Variables que son locales a un bloque de acción de sondeo
Variables locales de hilo: variables que son locales a un hilo, pero que tienen alcance en varios bloques de acciones de sondeo.
entrada/salida: variables definidas por la sonda y propias de la misma.
Integrado: Variables predefinidas con valores relevantes para la sonda de disparo actual.

Operadores

Los operadores de Vue siguen de cerca las convenciones de C, con la excepción de cuando se usan con cadenas de texto. Cuando se usan con cadenas, el operador + realiza la concatenación y el operador == se usa para comparaciones.

Control de flujo

Vue no permite la definición de funciones de usuario, [ 4 ] recursión ni estructuras de bucle, pero sí ofrece expresiones condicionales if-then dentro de un bloque de acción de sondeo. La naturaleza ligera de ProbeVue ​​impide que un script de Vue defina bucles costosos u operaciones de ramificación extensas que podrían degradar el rendimiento.

Rastreo tentativo

El rastreo provisional es un concepto que permite etiquetar como provisional la salida de rastreo de un bloque de código. Esta salida puede guardarse posteriormente en los búferes de rastreo como salida visible o descartarse. Su funcionamiento conceptual es muy similar al de los controles de transacciones en SQL .

Uso

Un script de Vue puede ser invocado con magia del intérprete y establecido como ejecutable como un script de shell o puede ser ejecutado como entrada para el comando ProbeVue ​​en forma de un parámetro de línea de comandos o entrada stdin. [ 5 ] Por convención, los scripts de Vue tienen una extensión de nombre de archivo .e .

Deficiencias

El lenguaje Vue carece de agregaciones y, en su lugar, utiliza un tipo de dato de lista que ofrece una funcionalidad similar, aunque limitada. El producto equivalente de Solaris, llamado DTrace, ofrece un tipo de dato de agregación y un potente conjunto de funciones de agregación para representar datos estadísticos. El tipo de dato de lista solo ofrece funciones de agregación básicas para un único elemento (a diferencia de los arreglos asociativos de agregaciones que ofrece DTrace). El tipo de dato de lista simplifica ligeramente el proceso de mantener las estadísticas manualmente, pero no permite restablecer la lista (por ejemplo, a intervalos regulares), algo que se puede hacer fácilmente con resúmenes manuales y tipos básicos. IBM se ha comprometido a incorporar arreglos asociativos en futuras versiones del lenguaje Vue.

Debido al largo tiempo de desarrollo que DTrace tiene en comparación con ProbeVue, DTrace tiene muchas más especificaciones de puntos de sondeo. [ 6 ] IBM tiene previsto añadir una cantidad considerable de nuevos puntos de sondeo en futuras versiones tecnológicas de AIX 6.1 y en la próxima versión principal de AIX.

Véase también

Referencias

  1. "1.4: ProbeVue". IBM RedBooks: Guía de diferencias de IBM AIX versión 6.1 . 10 de marzo de 2008. pág.  21. ISBN 0738485799.
  2. Entrada de ProbeVue ​​de la página del centro de conocimiento de AIX 7.1
  3. La discusión sobre los conceptos del lenguaje Vue se puede encontrar en la sección del lenguaje de programación Vue y en la especificación de la Guía de usuarios extendida de ProbeVue .
  4. Las funciones predefinidas están disponibles en el entorno ProbeVue. Consulte el RedBook de diferencias de AIX 6.1 o la especificación de la Guía del usuario extendida de ProbeVue ​​para obtener una lista de las funciones predefinidas.
  5. Entrada del comando ProbeVue ​​en la página del Centro de conocimiento de AIX 6.1
  6. En DTrace, estos se denominan proveedores.
  • ProbeVue: Especificación de la guía de usuario extendida
  • Hoja de datos rápida de ProbeVue
  • Diferencias de AIX 6.1 (RedBook)
  • Artículo de DeveloperWorks sobre ProbeVue
  • Ejemplos de scripts y notas de uso de ProbeVue
  • Depuración de aplicaciones C++ con ProbeVue