Guía de seguimiento dinámico de Solaris

Capítulo 23 Proveedor sysinfo

El proveedor sysinfo hace que los sondeos que corresponden a las estadísticas de núcleo clasificadas por el nombre sys estén disponibles. Debido a que estas estadísticas proporcionan la información para utilidades de supervisión del sistema comompstat(1M), el proveedor sysinfo permite la exploración rápida de un comportamiento atípico observado.

Sondeos

El proveedor sysinfo hace que los sondeos que corresponden a los campos en la estadística de núcleo sys estén disponibles: un sondeo proporcionado por sysinfo se activa inmediatamente antes de que se aumente el valor de sys correspondiente. El siguiente ejemplo muestra cómo visualizar los nombres y los valores actuales de la estadística de núcleo sys utilizando el comandokstat(1M).


$ kstat -n sys
module: cpu                             instance: 0
name:   sys                             class:    misc
	bawrite                         123
	bread                           2899
	bwrite                          17995
...

Los sondeos de fpuinfo se describen en la Tabla 23–1.

Tabla 23–1 Sondeos sysinfo

bawrite

Sondeo que se activa siempre que una memoria intermedia se va a escribir asíncronamente a un dispositivo. 

bread

Sondeo que se activa siempre que se lee físicamente una memoria intermedia desde un dispositivo. bread se activa después de que la memoria intermedia se haya solicitado desde el dispositivo, pero antes de bloquearse pendiente de su finalización.

bwrite

Sondeo que se activa siempre que una memoria intermedia se va a escribir a un dispositivo, tanto de forma síncrona como asíncrona.

idlethread

Sondeo que se activa cada vez que la CPU entra en un bucle inactivo. 

intrblk

Sondeo que se activa siempre que se bloquea un subproceso de interrupción. 

inv_swtch

Sondeo que se activa cuando se fuerza a un subproceso que se está ejecutando a que abandone de forma no voluntaria la CPU. 

lread

Sondeo que se activa siempre que se lee lógicamente una memoria intermedia desde un dispositivo. 

lwrite

Sondeo que se activa siempre que se escribe lógicamente una memoria intermedia a un dispositivo. 

modload

Sondeo que se activa siempre que se carga un módulo de núcleo. 

modunload

Sondeo que se activa siempre que se descarga un módulo de núcleo. 

msg

Sondeo que se activa siempre que se realiza una llamada de sistema msgsnd(2) o msgrcv(2) pero antes de que se hayan realizado las operaciones de la cola de mensajes.

mutex_adenters

Sondeo que se activa siempre que se realiza un intento de adquirir un bloqueo adaptativo propio. Si este sondeo se activa, uno de los sondeos del proveedor lockstat, adaptive-block o adaptive-spin, también se activará. Consulte el Capítulo 18Proveedor lockstat, para obtener más información.

namei

Sondeo que se activa siempre que se intenta una búsqueda de nombres en el sistema de archivos. 

nthreads

Sondeo que se activa siempre que se crea un subproceso. 

phread

Sondeo que se activa siempre que se va a realiza una lectura de E/S sin procesar. 

phwrite

Sondeo que se activa siempre que se va a realizar una escritura de E/S sin procesar. 

procovf

Sondeo que se activa cuando no se puede crear un nuevo proceso porque el sistema ha agotado las entradas de la tabla de procesos. 

pswitch

Sondeo que se activa siempre que una CPU cambia de ejecutar un subproceso a otro. 

readch

Sondeo que se activa después de cada lectura correcta, pero antes de que se devuelva el control al subproceso que realiza la lectura. Se puede producir una lectura mediante las llamadas de sistema read(2), readv(2) o pread(2). arg0 contiene el número de bytes que se leyeron correctamente.

rw_rdfails

Sondeo que se activa siempre que se intenta leer/ bloquear un lectores/escritor cuando el bloqueo pertenece a un escritor o es deseado por un escritor. Si se activa este sondeo, el sondeo rw-block del proveedor lockstat también se activará. Consulte el Capítulo 18Proveedor lockstat, para obtener más información.

rw_wrfails

Sondeo que se activa siempre que se realiza un intento de escribir/bloquear un bloqueo de lectores/escritor cuando el bloqueo pertenece a una serie de lectores o a otro escritor. Si se activa este sondeo, el sondeo rw-block del proveedor lockstat también se activará. Consulte el Capítulo 18Proveedor lockstat, para obtener más información.

sema

Sondeo que se activa siempre que se realiza una llamada de sistema semop(2), pero antes de que se haya realizado cualquier operación de semáforo.

sysexec

Sondeo que se activa siempre que se realiza una llamada de sistema exec(2).

sysfork

Sondeo que se activa siempre que se realiza una llamada de sistema fork(2).

sysread

Sondeo que se activa siempre que se realiza una llamada de sistema read(2), readv(2) o pread(2).

sysvfork

Sondeo que se activa siempre que se realiza una llamada de sistema vfork(2).

syswrite

Sondeo que se activa siempre que se realiza una llamada de sistema write(2), writev(2) o pwrite(2).

trap

Sondeo que se activa siempre que se produce una captura de procesador. Tenga en cuenta que algunos procesadores, en concreto las variantes de UltraSPARC, tratan algunas capturas ligeras mediante un mecanismo que no produce que se active este sondeo. 

ufsdirblk

Sondeo que se produce siempre que se lee un bloqueo de directorio desde el sistema de archivos UFS. Consulte ufs(7FS) para obtener información sobre UFS.

ufsiget

Sondeo que se activa siempre que se recupera un inode. Consulte ufs(7FS) para obtener información sobre UFS.

ufsinopage

Sondeo que se activa tras un inode en el núcleo sin que se haya convertido en disponible ninguna página de datos para su reutilización. Consulte ufs(7FS) para obtener información sobre UFS.

ufsipage

Sondeo que se activa tras un inode en el núcleo con páginas de datos que se han convertido en disponibles para su reutilización. Este sondeo se activa después de que las paginas de datos asociadas se hayan enviado al disco. Consulte ufs(7FS) para obtener información sobre UFS.

writech

Sondeo que se activa después de cada escritura correcta, pero antes de que se devuelva el control al subproceso que realiza la escritura. Se puede producir una escritura mediante las llamadas de sistema write(2), writev(2) o pwrite(2). arg0 contiene el número de bytes que se escribieron correctamente.

xcalls

Sondeo que se activa siempre que se va a realizar una llamada cruzada. Una llamada cruzada es el mecanismo del sistema operativo para que una CPU solicite un trabajo inmediato de otra CPU. 

Argumentos

Los argumentos para los sondeos sysinfo son los siguientes:

arg0

El valor por el que se incrementa la estadística. Para la mayoría de los sondeos, este argumento siempre es 1, pero para algunos sondeos, este argumento puede tomar otros valores. 

arg1

Un puntero al valor actual de la estadística que se va a incrementar. Este valor es una cantidad de 64 bits que se incrementará en función del valor de arg0. Si se anula la referencia de este puntero, los consumidores podrán determinar el recuento actual de la estadística correspondiente al sondeo.

arg2

Puntero a la estructura cpu_t que corresponde a la CPU en la que se va a aumentar la estadística. Esta estructura se define en <sys/cpuvar.h>, sin embargo, es parte de la implementación del núcleo y debería considerarse privada.

El valor de arg0 es 1 para la mayoría de los sondeos sysinfo. Sin embargo, los sondeos readch y writech definen arg0 en el número de bytes leídos o escritos, respectivamente. Esta función permite determinar el tamaño de lecturas por el nombre del ejecutable, como se muestra en el siguiente ejemplo:


# dtrace -n readch'{@[execname] = quantize(arg0)}'
dtrace: description 'readch' matched 4 probes
^C
  xclock                                            
           value  ------------- Distribution ------------- count    
              16 |                                         0        
              32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1        
              64 |                                         0        

  acroread                                          
           value  ------------- Distribution ------------- count    
              16 |                                         0        
              32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3        
              64 |                                         0        

  FvwmAuto                                          
           value  ------------- Distribution ------------- count    
               2 |                                         0        
               4 |@@@@@@@@@@@@@                            13       
               8 |@@@@@@@@@@@@@@@@@@@@@                    21       
              16 |@@@@@                                    5        
              32 |                                         0        

  xterm                                             
           value  ------------- Distribution ------------- count    
              16 |                                         0        
              32 |@@@@@@@@@@@@@@@@@@@@@@@@                 19       
              64 |@@@@@@@@@                                7        
             128 |@@@@@@                                   5        
             256 |                                         0        

  fvwm2                                             
           value  ------------- Distribution ------------- count    
              -1 |                                         0        
               0 |@@@@@@@@@                                186      
               1 |                                         0        
               2 |                                         0        
               4 |@@                                       51       
               8 |                                         17       
              16 |                                         0        
              32 |@@@@@@@@@@@@@@@@@@@@@@@@@@               503      
              64 |                                         9        
             128 |                                         0        

  Xsun                                              
           value  ------------- Distribution ------------- count    
              -1 |                                         0        
               0 |@@@@@@@@@@@                              269      
               1 |                                         0        
               2 |                                         0        
               4 |                                         2        
               8 |@                                        31       
              16 |@@@@@                                    128      
              32 |@@@@@@@                                  171      
              64 |@                                        33       
             128 |@@@                                      85       
             256 |@                                        24       
             512 |                                         8        
            1024 |                                         21       
            2048 |@                                        26       
            4096 |                                         21       
            8192 |@@@@                                     94       
           16384 |                                         0

El proveedor sysinfo define arg2 para que sea un puntero a cpu_t, una estructura interna a la implementación del núcleo. Los sondeos sysinfo se activan en la CPU donde se incrementa la estadística. Use el miembro cpu_id de la estructura cpu_t para determinar la CPU de interés.

Ejemplo

Examine el siguiente resultado de mpstat(1M):


CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
 12   90  22 5760   422  299  435   26   71  116   11  1372    5  19  17  60
 13   46  18 4585   193  162  431   25   69  117   12  1039    3  17  14  66
 14   33  13 3186   405  381  397   21   58  105   10   770    2  17  11  70
 15   34  19 4769   109   78  417   23   57  115   13   962    3  14  14  69
 16   74  16 4421   437  406  448   29   77  111    8  1020    4  23  14  59
 17   51  15 4493   139  110  378   23   62  109    9   928    4  18  14  65
 18   41  14 4204   494  468  360   23   56  102    9   849    4  17  12  68
 19   37  14 4229   115   87  363   22   50  106   10   845    3  15  14  67
 20   78  17 5170   200  169  456   26   69  108    9  1119    5  21  25  49
 21   53  16 4817    78   51  394   22   56  106    9   978    4  17  22  57
 22   32  13 3474   486  463  347   22   48  106    9   769    3  17  17  63
 23   43  15 4572    59   34  361   21   46  102   10   947    4  15  22  59

A partir del resultado anterior, puede concluir que el campo xcal parece demasiado alto, especialmente dada la relativa inactividad del sistema. mpstat determina el valor en el campo xcal examinando el campo xcalls de la estadística de núcleo sys. Esta anomalía se puede explorar fácilmente habilitando el sondeo xcalls sysinfo, tal y como se muestra en el siguiente ejemplo:


# dtrace -n xcalls'{@[execname] = count()}'
dtrace: description 'xcalls' matched 4 probes
^C
  dtterm                                                            1
  nsrd                                                              1
  in.mpathd                                                         2
  top                                                               3
  lockd                                                             4
  java_vm                                                          10
  ksh                                                              19
  iCald.pl6+RPATH                                                  28
  nwadmin                                                          30
  fsflush                                                          34
  nsrindexd                                                        45
  in.rlogind                                                       56
  in.routed                                                       100
  dtrace                                                          153
  rpc.rstatd                                                      246
  imapd                                                           377
  sched                                                           431
  nfsd                                                           1227
  find                                                           3767

El resultado muestra dónde buscar el origen de las llamadas cruzadas. Una serie de procesos find(1) producen la mayoría de las llamadas cruzadas. La siguiente secuencia de comandos de D se puede utilizar para comprender el problema con más detalle:

syscall:::entry
/execname == "find"/
{
	self->syscall = probefunc;
	self->insys = 1;
}

sysinfo:::xcalls
/execname == "find"/
{
	@[self->insys ? self->syscall : "<none>"] = count();
}

syscall:::return
/self->insys/
{
	self->insys = 0;
	self->syscall = NULL;
}

Esta secuencia de comandos utiliza el proveedor syscall para atribuir las llamadas cruzadas de find a una llamada de sistema concreta. Es posible que algunas llamadas cruzadas, como las resultantes de los fallos de página, no procedan de llamadas de sistema. La secuencia de comandos imprime “<none>” en estos casos. Al ejecutar la secuencia de comandos se produce un resultado parecido al siguiente ejemplo:


# dtrace -s ./find.d
 dtrace: script './find.d' matched 444 probes
^C
  <none>                                                            2
  lstat64                                                        2433
  getdents64                                                    14873

Este resultado indica que la mayoría de las llamadas cruzadas inducidas por find son inducidas a su vez por llamadas de sistema getdents(2). Una mayor exploración dependerá de la dirección en la que desea explorar. Si desea comprender por qué los procesos find realizan llamadas a getdents, podría escribir una secuencia de comandos de D para agregarse en ustack() cuando find induce una llamada cruzada. Si desea comprender por qué las llamadas a getdents inducen llamadas cruzadas, podría escribir una secuencia de comandos de D para agregarse en stack() cuando find induce una llamada cruzada. Independientemente del siguiente paso, la presencia del sondeo xcalls ha permitido que descubra rápidamente la causa origen de un resultado inusual de supervisión.

Estabilidad

El proveedor sysinfo utiliza el mecanismo de estabilidad de DTrace para describir sus estabilidades, como se muestra en la siguiente tabla. Para obtener más información sobre el mecanismo de estabilidad, consulte el Capítulo 39Estabilidad.

Elemento 

Estabilidad del nombre 

Estabilidad de los datos 

Clase de dependencia 

Proveedor 

Evolutivo 

Evolutivo 

ISA

Módulo 

Privado 

Privado 

Desconocido 

Función 

Privado 

Privado 

Desconocido 

Nombre 

Evolutivo 

Evolutivo 

ISA

Argumentos 

Privado 

Privado 

ISA