Los sondeos profile-n se activan después de un intervalo de tiempo fijo, en todas las CPU a un alto nivel de interrupción. El intervalo de activación del sondeo está indicado por el valor de n: la fuente de interrupción se activará n veces por segundo. n podría tener también un sufijo de tiempo opcional, en cuyo caso se interpreta que n se encuentra en las unidades que vienen indicadas con el sufijo. Puede consultar la lista de sufijos válidos y las unidades que denotan en la Tabla 19–1.
Tabla 19–1 Sufijos de tiempo válidos
Sufijo |
Unidades de tiempo |
---|---|
nsec o ns |
nanosegundos |
usec o us |
microsegundos |
msec o ms |
milisegundos |
sec o s |
segundos |
min o m |
minutos |
hour o h |
horas |
day o d |
días |
hz |
hercios (frecuencia por segundo) |
El siguiente ejemplo crea un sondeo que se activa a los 97 hercios para obtener muestras del proceso que se encuentra en ejecución:
#pragma D option quiet profile-97 /pid != 0/ { @proc[pid, execname] = count(); } END { printf("%-8s %-40s %s\n", "PID", "CMD", "COUNT"); printa("%-8d %-40s %@d\n", @proc); }
La ejecución del ejemplo anterior durante un breve periodo de tiempo devuelve una salida similar a la del siguiente ejemplo:
# dtrace -s ./prof.d ^C PID CMD COUNT 223887 sh 1 100360 httpd 1 100409 mibiisa 1 223887 uname 1 218848 sh 2 218984 adeptedit 2 100224 nscd 3 3 fsflush 4 2 pageout 6 100372 java 7 115279 xterm 7 100460 Xsun 7 100475 perfbar 9 223888 prstat 15 |
Es posible también utilizar el proveedor profile-n para obtener información de ejemplo acerca de los procesos en ejecución. La siguiente secuencia de comandos de ejemplo D utiliza un sondeo de perfil de 1.001 hercios para obtener ejemplos de la prioridad actual de un proceso especificado:
profile-1001 /pid == $1/ { @proc[execname] = lquantize(curlwpsinfo->pr_pri, 0, 100, 10); }
Para ver esta secuencia de comandos de ejemplo en acción, escriba los siguientes comandos en una ventana:
$ echo $$ 12345 $ while true ; do let i=0 ; done |
En otra ventana, ejecute la secuencia de comandos D durante un breve periodo de tiempo, y sustituya 12345 con el PID que haya devuelto el comando echo:
# dtrace -s ./profpri.d 12345 dtrace: script './profpri.d' matched 1 probe ^C ksh value ------------- Distribution ------------- count < 0 | 0 0 |@@@@@@@@@@@@@@@@@@@@@ 7443 10 |@@@@@@ 2235 20 |@@@@ 1679 30 |@@@ 1119 40 |@ 560 50 |@ 554 60 | 0 |
Esta salida muestra el margen de error de la clase de planificación de utilización compartida de tiempo. Debido a que el proceso shell está girando en la CPU, el sistema reduce constantemente su prioridad. Si el proceso shell se ejecutara con menor frecuencia, su prioridad sería más alta. Para ver este resultado, pulse Control-C en la shell que se encuentra en ciclo y vuelva a ejecutar la secuencia de comandos:
# dtrace -s ./profpri.d 494621 dtrace: script './profpri.d' matched 1 probe |
Escriba algunos caracteres en la shell. Cuando finalice la secuencia de comandos DTrace, aparecerá una salida similar a la del siguiente ejemplo:
ksh value ------------- Distribution ------------- count 40 | 0 50 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 14 60 | 0 |
Dado que el proceso shell se encontraba inactivo esperando una acción por parte del usuario en lugar de estar girando en la CPU, cuando se ejecutó, lo hizo a una prioridad mucho más alta.