Guía de seguimiento dinámico de Solaris

Visualización de datos de seguimiento

Una vez determine cuál es el consumidor de su interés, es posible recuperar los datos correspondientes a cualquier memoria intermedia mediante la especificación de la estructura de datos en el dcmd ::dtrace. El siguiente ejemplo muestra la salida del dcmd ::dtrace en una activación anónima de syscall:::entry con la acción trace(execname):


> ::dtrace_state
    ADDR MINOR     PROC NAME                 FILE
cbfb7a40     2        - <anonymous>             -

> cbfb7a40::dtrace
CPU     ID                    FUNCTION:NAME
  0    344                resolvepath:entry   init                           
  0     16                      close:entry   init                           
  0    202                      xstat:entry   init                           
  0    202                      xstat:entry   init                           
  0     14                       open:entry   init                           
  0    206                     fxstat:entry   init                           
  0    186                       mmap:entry   init                           
  0    186                       mmap:entry   init                           
  0    186                       mmap:entry   init                           
  0    190                     munmap:entry   init                           
  0    344                resolvepath:entry   init                           
  0    216                    memcntl:entry   init                           
  0     16                      close:entry   init                           
  0    202                      xstat:entry   init                           
  0     14                       open:entry   init                           
  0    206                     fxstat:entry   init                           
  0    186                       mmap:entry   init                           
  0    186                       mmap:entry   init                           
  0    186                       mmap:entry   init                           
  0    190                     munmap:entry   init
...

::dtrace dcmd maneja los errores de la misma forma que dtrace(1M): si se encuentran anulaciones, errores, anulaciones especulativas, etc., durante la ejecución del consumidor, ::dtrace emitirá un mensaje correspondiente al mensaje dtrace(1M).

El orden de los eventos tal y como lo muestra ::dtrace es siempre de más antiguo a más reciente dentro de una CPU determinada. Las memorias intermedias de la CPU se muestran en sí mismas en orden numérico. Si se requiere la ordenación de eventos de diferentes CPU, realice un seguimiento de la variable timestamp.

Puede visualizar sólo los datos de una CPU determinada especificando la opción - c a ::dtrace:


> cbfb7a40::dtrace -c 1
CPU     ID                    FUNCTION:NAME
  1     14                       open:entry   init
  1    206                     fxstat:entry   init
  1    186                       mmap:entry   init
  1    344                resolvepath:entry   init
  1     16                      close:entry   init
  1    202                      xstat:entry   init
  1    202                      xstat:entry   init
  1     14                       open:entry   init
  1    206                     fxstat:entry   init 
  1    186                       mmap:entry   init  
...

Tenga en cuenta que ::dtrace sólo procesa datos de DTrace del núcleo. Los datos que se hayan consumido desde el núcleo y se hayan procesado (mediante dtrace(1M) u otras vías) no estarán disponibles para su procesamiento con ::dtrace. Para garantizar que la máxima cantidad de datos posible esté disponible en el momento del error, utilice una directiva de memoria intermedia de "introducción en memoria en anillo" (ring buffering). Consulte el Capítulo 11Memorias intermedias y almacenamiento en memoria intermedia para obtener más información sobre las políticas de búfer.

Los siguientes ejemplos crean una memoria intermedia en anillo de tamaño muy reducido (16K) y registran todas las llamadas de sistema y los procesos que las realizan:


# dtrace -P syscall'{trace(curpsinfo->pr_psargs)}' -b 16k -x bufpolicy=ring
dtrace: description 'syscall:::entry' matched 214 probes

La observación de un volcado de bloqueo realizado mientras el comando anterior se encontraba en ejecución devolverá una salida similar a la del siguiente ejemplo:


> ::dtrace_state
    ADDR MINOR     PROC NAME                 FILE
cdccd400     3 d15e80a0 dtrace           ced065f0

> cdccd400::dtrace
CPU     ID                    FUNCTION:NAME
  0    139                    getmsg:return   mibiisa -r -p 25216            
  0    138                     getmsg:entry   mibiisa -r -p 25216            
  0    139                    getmsg:return   mibiisa -r -p 25216            
  0    138                     getmsg:entry   mibiisa -r -p 25216            
  0    139                    getmsg:return   mibiisa -r -p 25216            
  0    138                     getmsg:entry   mibiisa -r -p 25216            
  0    139                    getmsg:return   mibiisa -r -p 25216            
  0    138                     getmsg:entry   mibiisa -r -p 25216            
  0    139                    getmsg:return   mibiisa -r -p 25216            
  0    138                     getmsg:entry   mibiisa -r -p 25216            
  0     17                     close:return   mibiisa -r -p 25216            
...
  0     96                      ioctl:entry   mibiisa -r -p 25216            
  0     97                     ioctl:return   mibiisa -r -p 25216            
  0     96                      ioctl:entry   mibiisa -r -p 25216            
  0     97                     ioctl:return   mibiisa -r -p 25216            
  0     96                      ioctl:entry   mibiisa -r -p 25216            
  0     97                     ioctl:return   mibiisa -r -p 25216            
  0     96                      ioctl:entry   mibiisa -r -p 25216            
  0     97                     ioctl:return   mibiisa -r -p 25216            
  0     16                      close:entry   mibiisa -r -p 25216            
  0     17                     close:return   mibiisa -r -p 25216            
  0    124                   lwp_park:entry   mibiisa -r -p 25216            
  1     68                     access:entry   mdb -kw                        
  1     69                    access:return   mdb -kw                        
  1    202                      xstat:entry   mdb -kw                        
  1    203                     xstat:return   mdb -kw                        
  1     14                       open:entry   mdb -kw                        
  1     15                      open:return   mdb -kw                        
  1    206                     fxstat:entry   mdb -kw                        
  1    207                    fxstat:return   mdb -kw                        
  1    186                       mmap:entry   mdb -kw                        
...
  1     13                     write:return   mdb -kw                        
  1     10                       read:entry   mdb -kw                        
  1     11                      read:return   mdb -kw                        
  1     12                      write:entry   mdb -kw                        
  1     13                     write:return   mdb -kw                        
  1     96                      ioctl:entry   mdb -kw                        
  1     97                     ioctl:return   mdb -kw                        
  1    364                    pread64:entry   mdb -kw                        
  1    365                   pread64:return   mdb -kw                        
  1    366                   pwrite64:entry   mdb -kw                        
  1    367                  pwrite64:return   mdb -kw                        
  1    364                    pread64:entry   mdb -kw                        
  1    365                   pread64:return   mdb -kw                        
  1     38                        brk:entry   mdb -kw                        
  1     39                       brk:return   mdb -kw                        
>

Tenga en cuenta que los registros más recientes de la CPU incluyen una serie de llamadas de sistema write(2) realizadas por un proceso mdb -kw. Probablemente, este resultado estará relacionado con el fallo del sistema, ya que un usuario puede ejecutar los datos o el texto del núcleo en ejecución con mdb(1) cuando se ejecuta con las opciones -k y - w. En este caso, los datos de DTrace proporcionan al menos una vía interesante de navegación, si no la causa raíz del fallo.