Guía de seguimiento dinámico de Solaris

Capítulo 24 Proveedor vminfo

El proveedor vminfo hace que estén disponibles sondeos que se corresponden con las estadísticas vm del núcleo. Dado que estas estadísticas proporcionan la entrada para utilidades de supervisión del sistema como vmstat(1M), el proveedor vminfo permite una exploración rápida de comportamientos inadecuados observados.

Sondeos

El proveedor vminfo hace que estén disponibles sondeos que corresponden a los campos de la estadística del núcleo denominada vm: se activa un sondeo proporcionado por vminfo inmediatamente antes de que se aumente el valor vm correspondiente. Para mostrar tanto los nombres como los valores actuales de la estadística del núcleo denominada vm named kernel statistic, use el comando kstat(1M) tal y como se muestra en el siguiente ejemplo:


$ kstat -n vm
module: cpu                             instance: 0
name:   vm                              class:    misc
        anonfree                        13
        anonpgin                        2620
        anonpgout                       13
        as_fault                        12528831
        cow_fault                       2278711
        crtime                          202.10625712
        dfree                           1328740
        execfree                        0
        execpgin                        5541
        ...

Los sondeos de vminfo se describen en la Tabla 24–1.

Tabla 24–1 Sondeos de vminfo

anonfree

Sondeo que se activa cada vez que una página anónima sin modificar se libera como parte de la actividad de paginación. Las páginas anónimas son aquellas que no están asociadas a un archivo. La memoria que alberga estas páginas incluye memoria de montón, memoria de pila o memoria obtenida mediante la asignación explícita de zero(7D).

anonpgin

Sondeo que se activa cada vez que una página anónima se copia en la memoria desde un dispositivo de intercambio. 

anonpgout

Sondeo que se activa cada vez que una página anónima se copia en disco en un dispositivo de intercambio. 

as_fault

Sondeo que se activa cada vez que se se detecta un fallo en la página y el fallo no es de protección ni de copia por escritura. 

cow_fault

Sondeo que se activa cada vez que en una página se detecta un fallo de copia por escritura. arg0 contiene el número de páginas que se crean como resultado de la copia por escritura.

dfree

Sondeo que se activa cada vez que una página se libera como resultado de la actividad de paginación. Cada vez que dfree se activa, uno de los sondeos anonfree, execfree o fsfree se activará también a continuación.

execfree

Sondeo que se activa cada vez que una página ejecutable sin modificar se libera como parte de la actividad de paginación. 

execpgin

Sondeo que se activa cada vez que una página ejecutable se copia en la memoria desde la memoria gráfica. 

execpgout

Sondeo que se activa cada vez que una página ejecutable modificada se copia en disco en la memoria gráfica. La mayor parte de la paginación de páginas ejecutables se produce en términos de execfree. execpgout sólo se puede activar si se modifica en la memoria una página ejecutable, lo que no es muy común en la mayoría de los sistemas.

fsfree

Sondeo que se activa cada vez que una página de datos del sistema de archivos sin modificar se libera como parte de la actividad de paginación. 

fspgin

Sondeo que se activa cada vez que una página del sistema de archivos se copia en la memoria desde la memoria gráfica. 

fspgout

Sondeo que se activa cada vez que una página modificada del sistema de archivos se copia en disco en la memoria gráfica. 

kernel_asflt

Sondeo que se activa cada vez que el núcleo detecta un fallo de página en una página en su propio espacio de dirección. Cada vez que se activa kernel_asflt, estará precedido de forma inmediata por la activación del sondeo as_fault.

maj_fault

Sondeo que se activa cada vez que se detecta un fallo que da como resultado una E/S desde una memoria gráfica o un dispositivo de intercambio. Cada vez que se activa maj_fault, estará inmediatamente precedido por la activación del sondeo pgin.

pgfrec

Sondeo que se activa cada vez que se reclama una página que no esté incluida en la lista de páginas libres. 

pgin

Sondeo que se activa cada vez que una página se copia en la memoria desde la memoria gráfica o desde un dispositivo de intercambio. Este sondeo es distinto de maj_fault porque maj_fault sólo se activa cuando una página se copia en la memoria como resultado de un error de página. pgin se activa cada vez que una página se copia en memoria, con independencia del motivo.

pgout

Sondeo que se activa cada vez que una página se copia en disco en la memoria gráfica o en un dispositivo de intercambio. 

pgpgin

Sondeo que se activa cada vez que una página se copia en la memoria desde la memoria gráfica o desde un dispositivo de intercambio. La única diferencia entre pgpgin y pgin es que pgpgin contiene el número de páginas copiadas en memoria como arg0. pgin siempre contiene 1 en arg0.

pgpgout

Sondeo que se activa cada vez que una página se copia en disco en la memoria gráfica o en un dispositivo de intercambio. La única diferencia entre pgpgout y pgout es que pgpgout contiene el número de páginas copiadas en disco como arg0. (pgout siempre contiene 1 en arg0.)

pgrec

Sondeo que se activa cada vez que se reclama una página. 

pgrrun

Sondeo que se activa cada vez que se programa el localizador. 

pgswapin

Sondeo que se activa cada vez que las páginas de un proceso de intercambio en disco se intercambian en memoria. El número de páginas intercambiadas en memoria se incluye en arg0.

pgswapout

Sondeo que se activa cada vez que las páginas se intercambian en disco como parte de un proceso de intercambio en disco. El número de páginas intercambiadas en disco se incluye en arg0.

prot_fault

Sondeo que se activa cada vez que se detecta un fallo de página debido a una violación de la protección. 

rev

Sondeo que se activa cada vez que el daemon de página comienza una nueva revolución en todas las páginas. 

scan

Sondeo que se activa cada vez que el daemon de página examina una página. 

softlock

Sondeo que se activa cada vez que se produce un fallo en una página como parte de la colocación de un bloqueo de software en la página. 

swapin

Sondeo que se activa cada vez que un proceso de intercambio en disco se convierte en intercambio en memoria. 

swapout

Sondeo que se activa cada vez que un proceso se intercambia en disco. 

zfod

Sondeo que se activa cada vez que una página sin contenido se crea bajo petición. 

Argumentos

arg0

El valor por el que se incrementa la estadística. Para la mayoría de los sondeos, este argumento es siempre 1, pero para algunos puede adquirir otros valores. Dichos sondeos se incluyen en la Tabla 24–1.

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 este puntero deja de hacer referencia, se permitirá a los consumidores determinar el recuento actual de la estadística correspondiente al sondeo.

Ejemplo

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.

Estabilidad

El proveedor vminfo utiliza el mecanismo de estabilidad de DTrace para describir sus estabilidades, tal y 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