Examine el siguiente resultado desde vmstat(1M):
kthr memory page disk faults cpu r b w swap free re mf pi po fr de sr cd s0 — — in sy cs us sy id 0 1 0 1341844 836720 26 311 1644 0 0 0 0 216 0 0 0 797 817 697 9 10 81 0 1 0 1341344 835300 238 934 1576 0 0 0 0 194 0 0 0 750 2795 791 7 14 79 0 1 0 1340764 833668 24 165 1149 0 0 0 0 133 0 0 0 637 813 547 5 4 91 0 1 0 1340420 833024 24 394 1002 0 0 0 0 130 0 0 0 621 2284 653 14 7 79 0 1 0 1340068 831520 14 202 380 0 0 0 0 59 0 0 0 482 5688 1434 25 7 68 |
La columna pi del resultado anterior muestra el número de páginas copiadas en disco. El proveedor vminfo le permite obtener más información acerca del origen de estas copias en memoria, tal y como se muestra en el siguiente ejemplo:
dtrace -n pgin'{@[execname] = count()}'
dtrace: description 'pgin' matched 1 probe
^C
xterm 1
ksh 1
ls 2
lpstat 7
sh 17
soffice 39
javaldx 103
soffice.bin 3065
|
La salida muestra que un proceso asociado al software de StarOfficeTM, soffice.bin, es responsable de la mayoría de las operaciones de copia en memoria. Para obtener una mejor imagen de soffice.bin en términos del comportamiento de la memoria virtual, se pueden activar todos los sondeos vminfo. El siguiente ejemplo ejecuta dtrace(1M) a la vez que se lanza el software de StarOffice:
dtrace -P vminfo'/execname == "soffice.bin"/{@[probename] = count()}'
dtrace: description 'vminfo' matched 42 probes
^C
kernel_asflt 1
fspgin 10
pgout 16
execfree 16
execpgout 16
fsfree 16
fspgout 16
anonfree 16
anonpgout 16
pgpgout 16
dfree 16
execpgin 80
prot_fault 85
maj_fault 88
pgin 90
pgpgin 90
cow_fault 859
zfod 1619
pgfrec 8811
pgrec 8827
as_fault 9495
|
La siguiente secuencia de comandos de ejemplo proporciona más información acerca del comportamiento de la memoria virtual del software de StarOffice durante su inicio:
vminfo:::maj_fault,
vminfo:::zfod,
vminfo:::as_fault
/execname == "soffice.bin" && start == 0/
{
/*
* This is the first time that a vminfo probe has been hit; record
* our initial timestamp.
*/
start = timestamp;
}
vminfo:::maj_fault,
vminfo:::zfod,
vminfo:::as_fault
/execname == "soffice.bin"/
{
/*
* Aggregate on the probename, and lquantize() the number of seconds
* since our initial timestamp. (There are 1,000,000,000 nanoseconds
* in a second.) We assume that the script will be terminated before
* 60 seconds elapses.
*/
@[probename] =
lquantize((timestamp - start) / 1000000000, 0, 60);
}
Ejecute la secuencia de comandos de nuevo iniciando el software de StarOffice. A continuación, cree un nuevo dibujo, cree una nueva presentación, cierre todos los archivos y salga de la aplicación. Pulse Control-C en la shell que está ejecutando la secuencia de comandos en D. Los resultados proporcionan una perspectiva de algunos comportamientos de la memoria virtual a lo largo del tiempo:
# dtrace -s ./soffice.d
dtrace: script './soffice.d' matched 10 probes
^C
maj_fault
value ------------- Distribution ------------- count
7 | 0
8 |@@@@@@@@@ 88
9 |@@@@@@@@@@@@@@@@@@@@ 194
10 |@ 18
11 | 0
12 | 0
13 | 2
14 | 0
15 | 1
16 |@@@@@@@@ 82
17 | 0
18 | 0
19 | 2
20 | 0
zfod
value ------------- Distribution ------------- count
< 0 | 0
0 |@@@@@@@ 525
1 |@@@@@@@@ 605
2 |@@ 208
3 |@@@ 280
4 | 4
5 | 0
6 | 0
7 | 0
8 | 44
9 |@@ 161
10 | 2
11 | 0
12 | 0
13 | 4
14 | 0
15 | 29
16 |@@@@@@@@@@@@@@ 1048
17 | 24
18 | 0
19 | 0
20 | 1
21 | 0
22 | 3
23 | 0
as_fault
value ------------- Distribution ------------- count
< 0 | 0
0 |@@@@@@@@@@@@@ 4139
1 |@@@@@@@ 2249
2 |@@@@@@@ 2402
3 |@ 594
4 | 56
5 | 0
6 | 0
7 | 0
8 | 189
9 |@@ 929
10 | 39
11 | 0
12 | 0
13 | 6
14 | 0
15 | 297
16 |@@@@ 1349
17 | 24
18 | 0
19 | 21
20 | 1
21 | 0
22 | 92
23 | 0
|
La salida muestra algunos de los comportamientos de StarOffice con respecto al sistema de memoria virtual. Por ejemplo, el sondeo maj_fault no se activó hasta que se inició una nueva instancia de la aplicación. Como era de esperar, un "inicio en caliente" de StarOffice no dio como resultado nuevos fallos importantes. La salida de as_fault muestra una ráfaga inicial de actividad, latencia mientras el usuario localizaba el menú para crear un nuevo dibujo, otro periodo de inactividad y una ráfaga final de actividad cuando el usuario hizo clic en una nueva presentación. La salida de zfod muestra que la creación de una presentación nueva genera una presión significativa en las páginas sin contenido, pero sólo durante un periodo breve de tiempo.
La siguiente iteración de la investigación de DTrace en este ejemplo dependerá de la dirección en la que desee explorar. Si desea conocer el origen de las demandas para las páginas sin contenido, puede realizar una adición en ustack() en un zfod activado. Puede que desee establecer un umbral para las páginas sin contenido y usar la acción destructiva stop() para detener el proceso ofensivo cuando se supere el umbral. Este enfoque permite usar herramientas de depuración más tradicionales, por ejemplo truss(1) o mdb(1). El proveedor vminfo permite asociar estadísticas vistas en el resultado de herramientas convencionales como vmstat(1M) con las aplicaciones que están induciendo al comportamiento sistémico.