Guía de seguimiento dinámico de Solaris

Cálculos e informes de estabilidad

El compilador D realiza cálculos de estabilidad de cada una de las descripciones de sondeo e instrucciones de acción de sus programas D. Puede utilizar la opción -v del comando dtrace para visualizar un informe de estabilidad de su programa. El siguiente ejemplo utiliza un programa escrito en la línea de comandos:


# dtrace -v -n dtrace:::BEGIN'{exit(0);}'
dtrace: description 'dtrace:::BEGIN' matched 1 probe
Stability data for description dtrace:::BEGIN:
        Minimum probe description attributes
                Identifier Names: Evolving
                Data Semantics:   Evolving
                Dependency Class: Common
        Minimum probe statement attributes
                Identifier Names: Stable
                Data Semantics:   Stable
                Dependency Class: Common
CPU     ID                    FUNCTION:NAME
  0      1                           :BEGIN

Puede que también desee combinar la opción - v del comando dtrace con la opción -e, que indica a dtrace que compile pero no ejecute el programa D, de modo que pueda determinar la estabilidad del programa sin tener que habilitar ningún sondeo ni ejecutar el programa. A continuación se muestra otro ejemplo de informe de estabilidad:


# dtrace -ev -n dtrace:::BEGIN'{trace(curthread->t_procp);}'
Stability data for description dtrace:::BEGIN:
        Minimum probe description attributes
                Identifier Names: Evolving
                Data Semantics:   Evolving
                Dependency Class: Common
        Minimum probe statement attributes
                Identifier Names: Stable
                Data Semantics:   Private
                Dependency Class: Common
#

Tenga en cuenta que en nuestro nuevo programa hemos hecho referencia a la variable D curthread, que tiene un nombre Stable, pero semántica de datos Private (es decir, si puede verla, estará accediendo a detalles de implementación Private del núcleo), y este estado se refleja ahora en el informe de estabilidad del programa. Los atributos de estabilidad del informe del programa se calculan seleccionando el nivel de estabilidad mínimo y las clases de los valores correspondientes de cada trío de atributos de la interfaz.

Los atributos de estabilidad de una descripción de sondeo se calculan tomando los atributos de estabilidad mínima de todos los campos de descripción de los sondeos especificados, de acuerdo con los atributos publicados por el proveedor. Los atributos de los proveedores DTrace disponibles se muestran en el capítulo correspondiente de cada proveedor. Los proveedores de DTrace exportan tres atributos de estabilidad para cada uno de los cuatro campos de descripción de todos los sondeos publicados por dicho proveedor. Por lo tanto, el nombre de un proveedor podría tener más estabilidad que los sondeos que exporta. Por ejemplo, la descripción del sondeo:

fbt:::

que indica que DTrace debe realizar un seguimiento de las entradas y devoluciones de todas las funciones del núcleo, tiene más estabilidad que la descripción del sondeo:

fbt:foo:bar:entry

que nombra una función interna específica bar() en el módulo del núcleo foo. Por razones de sencillez, la mayoría de los proveedores utilizan un único conjunto de atributos para todos los valores module:function :name que publican. Los proveedores también especifican atributos para la matriz args[], ya que la estabilidad de los argumentos de los sondeos varían según el proveedor.

Si no se especifica el campo proveedor en la descripción de un sondeo, a la descripción se le asignan los atributos de estabilidad Unstable/Unstable/Common, ya que la descripción podría terminar haciendo coincidir sondeos de proveedores que aún no existen cuando se utilizan en una futura versión de Solaris. Por lo tanto, Sun no puede garantizar la futura estabilidad y comportamiento de este programa. Debería siempre especificar de forma explícita cuál es el proveedor a la hora de escribir las cláusulas del programa D. Asimismo, todos los campos de descripción de sondeo que contengan caracteres coincidentes de patrón (consulte el Capítulo 4Estructura del programa D) o variables de macro como $1 (consulte el Capítulo 15Secuencias de comandos), se tratan como si no estuvieran especificados, ya que estos patrones de descripción podrían expandirse para coincidir con proveedores o sondeos publicados por Sun en futuras versiones de DTrace y del SO Solaris.

Los atributos de estabilidad se calculan para la mayoría de instrucciones del lenguaje D tomando la estabilidad y clase mínimas de las entidades de la instrucción. Por ejemplo, las siguientes entidades del lenguaje D tienen los siguientes atributos:

Entidad 

Atributos 

Variable D integradacurthread

Stable/Private/Common 

Variable D definida por el usuario x

Stable/Stable/Common 

Si escribe la siguiente instrucción de programa D:

x += curthread->t_pri;

los atributos resultantes de la instrucción son Stable/Private/Common, los atributos mínimos asociados a los operandos curthread y x. La estabilidad de una expresión se computa tomando los atributos de estabilidad mínimos de cada uno de los operandos.

A las variables D que defina en el programa se asignarán automáticamente los atributos Stable/Stable/Common. Asimismo, a la gramática del lenguaje D y a los operadores D se les asigna de forma implícita los atributos Stable/Stable/Common. A las referencias a símbolos del núcleo que utilicen el operador comilla inversa (`) se les asignan siempre los atributos, porque reflejan artefactos de implementación. A los tipos que defina en el código fuente de su programa D, específicamente a los que están asociados con el espacio de nombre de tipo C y D, se les asignan los atributos Stable/Stable/Common. A los tipos que se definen en la implementación del sistema operativo y proporcionados por espacios de nombres de otro tipo, se les asignan los atributos Private/Private/Unknown. El operador de conversión de tipo D devuelve una expresión cuyos atributos de estabilidad son el mínimo de los atributos de la expresión de entrada y los atributos del tipo de salida de conversión.

Si utiliza el preprocesador C para incluir los archivos de cabecera del sistema C, estos tipos se asociarán al espacio de nombre de tipo C, y se les asignarán los atributos Stable/Stable/Common, ya que la única opción del compilador D es asumir que el usuario toma la responsabilidad de estas declaraciones. Por lo tanto, es posible que no obtenga una percepción clara de la estabilidad del programa si utiliza el preprocesador C para incluir un archivo de cabecera que contenga artefactos de implementación. A fin de determinar los niveles de estabilidad correctos, debe siempre consultar la documentación correspondiente a los archivos de cabecera.