Guía de seguimiento dinámico de Solaris

Proveedores y sondeos

En los ejemplos anteriores, hemos aprendido a utilizar dos sencillos sondeos denominados BEGIN y END. Pero, ¿de dónde proceden estos sondeos? Los sondeos de DTrace provienen de un conjunto de módulos del núcleo denominados proveedores; cada uno de ellos realiza un tipo determinado de instrumentación para crear sondeos. Al utilizar DTrace, a cada proveedor se le concede la oportunidad de publicar los sondeos que puede proporcionar a la estructura de DTrace. A continuación, puede habilitar y enlazar las acciones de seguimiento a cualquiera de los sondeos publicados. Para mostrar todos los sondeos disponibles en el sistema, escriba el comando:


# dtrace -l
  ID   PROVIDER            MODULE          FUNCTION NAME
   1     dtrace                                     BEGIN
   2     dtrace                                     END
   3     dtrace                                     ERROR
   4   lockstat           genunix       mutex_enter adaptive-acquire
   5   lockstat           genunix       mutex_enter adaptive-block
   6   lockstat           genunix       mutex_enter adaptive-spin
   7   lockstat           genunix       mutex_exit  adaptive-release

   ... many lines of output omitted ...

#

Es posible que el conjunto de resultados tarde en aparecer. Para realizar un recuento de todos los sondeos, puede escribir el comando:


# dtrace -l | wc -l
        30122

Es posible que observe una cantidad total diferente en el equipo, ya que el número de sondeos varía en función de la plataforma operativa y el software que tenga instalados. Como puede observar, hay un gran número de sondeos disponibles, por lo que podrá examinar cada rincón anteriormente inexplorado del sistema. De hecho, esta lista no incluye todos los resultados, ya que, como observaremos más adelante, algunos proveedores permiten crear nuevos sondeos sobre la marcha en función de las solicitudes de seguimiento, por lo que el número real de sondeos de DTrace es casi ilimitado.

Ahora volvamos a la salida de dtrace -l en la ventana del terminal. Tenga en cuenta que cada sondeo tiene dos nombres, como hemos mencionado anteriormente, un Id. compuesto por un entero y un nombre que pueden leer los usuarios. Este nombre está compuesto por cuatro partes, que se muestran en diferentes columnas en la salida de dtrace. Las cuatro partes del nombre del sondeo son:

Proveedor 

El nombre del proveedor de DTrace que publica este sondeo. El nombre de proveedor se corresponde normalmente con el nombre del módulo del núcleo de DTrace que realiza la instrumentación para habilitar el sondeo. 

Módulo 

Si este sondeo se corresponde con una ubicación de programa específica, se trata del nombre del módulo en el que se encuentra el sondeo. Este nombre puede ser el nombre de un módulo del núcleo o el nombre de una biblioteca de usuario. 

Función 

Si este sondeo se corresponde con una ubicación de programa específica, se trata del nombre de la función del programa en la que se encuentra el sondeo. 

Nombre 

El componente final del nombre del sondeo es el nombre que le indica de forma aproximada el significado semántico del sondeo como, por ejemplo, BEGIN o END.

Al escribir el nombre de un sondeo que pueden leer los usuarios, escriba sus cuatro partes separadas por dos puntos como se muestra a continuación:

proveedor:módulo: función:nombre

Tenga en cuenta que algunos de los sondeos de la lista no tienen ningún módulo ni función como, por ejemplo, los sondeos BEGIN y END utilizados anteriormente. Algunos sondeos dejan estos dos campos en blanco porque no se corresponden con ninguna ubicación o función de programa instrumentada específica. En su lugar, estos sondeos hacen referencia a un concepto más abstracto, como la idea del fin de la solicitud de seguimiento. A un sondeo con un módulo y una función como parte de su nombre se le conoce como sondeo fijado, y a uno sin nombre ni función se le conoce como no fijado.

Por convención, si no se especifican todos los campos de un nombre de sondeo, DTrace hace coincidir la solicitud con todos los sondeos que tengan valores coincidentes en las partes del nombre especificadas. En otros términos, al utilizar anteriormente el nombre de sondeo BEGIN, le estaba indicando realmente a DTrace que devolviese cualquier sondeo cuyo campo de nombre sea BEGIN, independientemente del valor de los campos de proveedor, módulo y función. En este caso, sólo hay un sondeo que coincida con la descripción, por lo que el resultado es el mismo. Sin embargo, ahora sabe que el verdadero nombre del sondeo BEGIN es dtrace:::BEGIN, que indica que la estructura de DTrace proporciona este sondeo y que no se ha fijado a una función. Por lo tanto, el programa hello.d podría haberse escrito de la siguiente forma y produciría el mismo resultado:

dtrace:::BEGIN
{
	trace("hello, world");
	exit(0);
}

Ahora que ya sabe dónde se originan los sondeos y cómo asignarles un nombre, vamos a aprender un poco más sobre qué ocurre al habilitar los sondeos y solicitar a DTrace que realice alguna acción. A continuación, regresaremos a nuestro recorrido general por el lenguaje D.