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.
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. |
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.
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.
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 |