Gestor de analizadores de E/S
El gestor de analizadores de E/S proporciona prestaciones para rastrear sucesos de operación de E/S en varias capas de la pila de E/S de AIX® . Utilice el gestor de analizadores de syscall para rastrear la solicitud de E/S de aplicación desencadenada por una llamada de sistema de lectura/grabación. Utilice el gestor de analizadores de E/S para analizar más a fondo la capa de syscall.
Utilice el gestor de analizadores de E/S para analizar el tiempo de respuesta de las operaciones de E/S de un dispositivo de bloque que segrega el tiempo de servicio y el retardo de cola.
Se da soporte a las capas siguientes:
- sistema de archivos lógico (LFS)
- sistema de archivos virtual (VFS)
- Sistemas de archivos de diario mejorados (JFS2)
- Gestor de volúmenes lógicos (LVM)
- Controlador de disco SCSI (interfaz para pequeños sistemas)
- Dispositivos de bloque genéricos
Los casos de uso principales para el gestor de analizadores de E/S son los siguientes:
- Identifique los siguientes patrones de uso de E/S de un dispositivo. Los dispositivos válidos pueden ser un disco, un volumen lógico o un grupo de volúmenes o un sistema de archivos (tipo o vía de acceso de montaje) en un periodo de tiempo especificado:
- Recuento de operaciones de E/S
- Tamaño de las operaciones de E/S
- Tipo de operación de E/S (lectura/escritura)
- Naturaleza secuencial o aleatoria de E/S
- Obtener información de uso por proceso o por hebras de un sistema de archivos (tipo o vía de acceso de montaje), volumen lógico, grupo de volúmenes o disco.
- Obtenga una correlación de extremo a extremo del flujo de E/S entre varias capas (siempre que sea posible).
- Supervise un uso de recursos de E/S específico. Por ejemplo:
- Rastree las operaciones de grabación del archivo /etc/password .
- Operación de lectura de rastreo en el bloque 0 del dispositivo
hdisk0. - Rastrear cuando se abre un nuevo volumen lógico en el grupo de volúmenes raíz (
rootvg).
- Para discos MPIO (Multipath I/O), obtenga información específica de la vía de acceso mediante las acciones siguientes:
- Obtenga información de tiempo de respuesta y uso por vía de acceso.
- Identificar conmutación de vía de acceso o anomalía de vía de acceso.
- Para errores de E/S, obtenga más detalles sobre el error en la capa de controlador de disco.
Especificación de analizador
Los sondeos de E/S deben especificarse en el formato siguiente en el script Vue:
@@io:sub_type:io_event:operation_type:filter[|filter …]Esta especificación consta de cinco tuplas separadas por dos puntos (:). La primera tupla es siempre @@io.Subtipo de analizador
La segunda tupla indica el subtipo del analizador que indica la capa de la pila de E/S de AIX que contiene el analizador. Esta tupla puede tener uno de los valores siguientes:
| Segunda tupla (subtipo) | Descripción |
|---|---|
| disco | Este analizador se inicia para sucesos de controlador de disco. Actualmente, el gestor de analizadores de E/S sólo da soporte al controlador scsidisk . |
| lvm | Este sondeo se inicia para sucesos de gestor de volúmenes lógicos (LVM). |
| bdev | Este sondeo se inicia para cualquier dispositivo de E/S de bloque. Disco, CD-ROM, disquete son ejemplos de dispositivos de bloque. Este subtipo sólo se utiliza cuando no es aplicable ningún otro subtipo. Por ejemplo, si un dispositivo de bloque no es un disco, grupo de volúmenes o volumen lógico, este subtipo es aplicable. |
| jfs2 | Este analizador se inicia para los sucesos del sistema de archivos JFS2 . |
| Vfs | Este analizador se inicia para cualquier operación de lectura/escritura en un archivo. |
Para un tipo de disco de segunda tupla, la tercera tupla puede tener los valores siguientes:
| Subtipo (segunda tupla) | Suceso de E/S (tercera tupla) | Descripción |
|---|---|---|
| disco | entrada | Este sondeo se inicia siempre que el controlador de disco recibe una solicitud de E/S. |
| iostart | Este sondeo se inicia cuando el controlador de disco recoge una solicitud de E/S de su cola preparada y la envía a la capa inferior (por ejemplo, el controlador de adaptador). Una única solicitud de E/S original al controlador de disco puede enviar varias solicitudes de mandatos (algunas pueden ser solicitudes de mandatos de gestión de tareas relacionadas con el controlador) a una capa inferior. Sin embargo, a veces el controlador puede combinar varias solicitudes originales y enviar una sola solicitud a capa inferior. | |
| iodona | Este analizador se inicia cuando la capa inferior (por ejemplo, el controlador de adaptador) devuelve una solicitud de E/S (satisfactoria o anómala) al controlador de disco. | |
| salida | Este sondeo se inicia cuando el controlador de disco devuelve una solicitud de E/S (satisfactoria o anómala) a su capa superior. |
__iobuf, __diskinfo, __diskcmd (sólo en disk:iostart y disk:iodone), y __iopath (sólo en disk:iostart y disk:iodone).Para cada entrada, se define un analizador de salida correspondiente que tiene el mismo valor __iobuf->bufid disponible en ambos puntos del analizador. El suceso de entrada puede ir seguido de varios sucesos iostart , pero al menos uno de ellos debe tener el mismo valor __iobuf->bufid . Cada suceso iostart tiene un suceso iodone coincidente que tiene el mismo valor __iobuf->child_bufid .
Para un tipo LVM de segunda tupla, la tercera tupla puede tener los valores siguientes:
| Subtipo (segunda tupla) | Suceso de E/S (tercera tupla) | Descripción |
|---|---|---|
| lvm | entrada | Este sondeo se inicia siempre que la capa LVM recibe una solicitud de E/S para procesarla. |
| iostart | Este sondeo se inicia cuando LVM selecciona una solicitud de E/S de su cola preparada y la envía a la capa inferior (normalmente el controlador de disco). | |
| iodona | Este sondeo se inicia cuando la capa inferior (por ejemplo, el controlador de disco) devuelve una solicitud de E/S (satisfactoria o anómala) a LVM. | |
| salida | Este sondeo se inicia cuando LVM devuelve una solicitud de E/S (satisfactoria o anómala) a su capa superior. |
__iobuf, __lvoly __volgrp. Cada entrada tiene un analizador de salida correspondiente, que tiene el mismo valor __iobuf->bufid disponible en ambos puntos del analizador.El suceso de entrada puede ir seguido de varios sucesos iostart , pero al menos uno de ellos tiene el mismo valor __iobuf->bufid . Cada suceso iostart tiene un suceso iodone coincidente que tiene el mismo valor __iobuf->child_bufid .
Para analizadores de dispositivos de bloque genéricos, la tercera tupla puede tener los valores siguientes:
| Subtipo (segunda tupla) | Suceso de E/S (tercera tupla) | Descripción |
|---|---|---|
| bdev | iostart | Este sondeo se activa cuando se inicia cualquier dispositivo de E/S de bloque (por ejemplo, disco, volumen lógico, CD-ROM). Sucede cuando cualquier código llama al servicio de kernel de AIX devstrat . |
| iodona | Este analizador se activa cuando se produce una finalización de solicitud de E/S de bloque, cuando cualquier código llama al servicio de kernel de AIX iodone . |
__iobuf. Cada suceso iostart tiene un suceso iodone coincidente que tiene el mismo valor __iobuf->bufid .Para los analizadores del sistema de archivos JFS2 , la tercera tupla puede tener los valores siguientes:
| Subtipo (segunda tupla) | Suceso de E/S (tercera tupla) | Descripción |
|---|---|---|
| jfs2 | correlación de almacenamiento intermedio | Este analizador se inicia cuando una extensión de archivo lógico se correlaciona con un almacenamiento intermedio de E/S y se envía al volumen lógico subyacente. |
__j2info.Para analizadores de sistema de archivos virtual (VFS), la tercera tupla puede tener los valores siguientes:
| Subtipo (segunda tupla) | Suceso de E/S (tercera tupla) | Descripción |
|---|---|---|
| Vfs | entrada | Este analizador se inicia cuando se inicia una operación de lectura/escritura en un archivo. |
| salida | Este analizador se inicia cuando se completa una operación de lectura/grabación en un archivo (ya sea satisfactoria o anómala). |
__file.Para la misma hebra, cada entrada va seguida de un suceso de salida que tiene el mismo valor __file->inode_id .
Tipo de operación de analizador
La cuarta tupla indica el tipo de operación de E/S especificado por el analizador. La cuarta tupla puede tener uno de los valores siguientes:
| Cuarta tupla | Descripción |
|---|---|
| leído | El analizador se inicia sólo para la operación de lectura. |
| grabar | El analizador se inicia sólo para la operación de grabación. |
| * | El analizador se inicia para las operaciones de lectura y grabación. |
Filtro de sondeo
La quinta tupla es la tupla de filtro que ayuda a filtrar sondas más específicas según el requisito. Los valores posibles dependen del subtipo. Se pueden especificar varios valores separados por | carácter, y el analizador se inicia si coincide con alguno de estos filtros. Si el valor de la quinta tupla es *, no se produce ningún filtrado y el analizador se inicia si coinciden otras tuplas. Si se especifican varios selectores y uno de ellos es *, es equivalente al valor de tupla completo de *.
Para los analizadores de disco, la quinta tupla puede tener los valores siguientes:
| Filtro (quinta tupla) | Descripción |
|---|---|
Nombre de disco. Por ejemplo, hdisk0 |
La acción de sondeo sólo se ejecuta para el disco concreto. |
| Tipo de disco. Símbolos permitidos: FC, ISCSI, VSCSI, SAS | La acción de sondeo sólo se ejecuta para discos con un tipo coincidente. Los significados de los símbolos son los siguientes:
|
hdisk0 o cualquier otro disco FC (en el suceso de entrada de disco, para ambos tipos de operación de lectura/escritura)@@io:disk:entry:*:hdisk0|FCPara los analizadores del gestor de volúmenes lógicos (LVM), la quinta tupla puede tener los valores siguientes:
| Filtro (quinta tupla) | Descripción |
|---|---|
Nombre de volumen lógico, por ejemplo hd5, lg_dumplv |
La acción de sondeo sólo se ejecuta para el volumen lógico concreto. |
Nombre de grupo de volúmenes, por ejemplo rootvg |
La acción de sondeo sólo se ejecuta para los volúmenes lógicos que pertenecen a un grupo de volúmenes determinado. |
El siguiente sondeo se inicia para cualquier volumen lógico que pertenezca al grupo de volúmenes raíz (rootvg) o al grupo de volúmenes de prueba (testvg) (en el suceso iostart, sólo para la operación de grabación):
@@io:lvm:iostart:write:rootvg|testvg
| Filtro (quinta tupla) | Descripción |
|---|---|
Nombre de dispositivo de bloque, por ejemplo: hdisk0, hd5, cd0 |
La acción de sondeo sólo se ejecuta para el dispositivo de bloque determinado. |
Tenga en cuenta los ejemplos siguientes para los analizadores de dispositivos de bloque genéricos:
@@io:bdev:iostart:*:cd0
@@io:bdev:iodone:read:hdisk3|hdisk5
Para los analizadores del sistema de archivos JFS2 , la quinta tupla puede tener los valores siguientes:
| Filtro (quinta tupla) | Descripción |
|---|---|
Vía de acceso de montaje del sistema de archivos, por ejemplo: /usr |
La acción de sondeo sólo se ejecuta para el sistema de archivos con la vía de acceso de montaje concreta. Debe ser un sistema de archivos JFS2, de lo contrarioProbeVue rechaza esa especificación de sonda. |
Considere los ejemplos siguientes para los analizadores del sistema de archivos JFS2 :
@@io:jfs2:buf_map:*:/usr|/tmp
Para los analizadores del sistema de archivos virtual (VFS), la quinta tupla puede tener los valores siguientes:
| Filtro (quinta tupla) | Descripción |
|---|---|
Vía de acceso de montaje del sistema de archivos. Por ejemplo, /tmp |
La acción de sondeo se ejecuta para los archivos que pertenecen al sistema de archivos. |
Tipo de sistema de archivos. Los símbolos permitidos son JFS2, NAMEFS, NFS, JFS, CDROM, PROCFS, SFS,
CACHEFS, NFS3, AUTOFS, POOLFS, VXFS, VXODM, UDF, NFS4, RFS4, CIFS, PMEMFS, AHAFS, STNFS,
ASMFS |
La acción de sondeo se ejecuta para los archivos del sistema de archivos concreto. Los símbolos corresponden a los sistemas de archivos AIX definidos en el archivo de cabecera exportado sys/vmount.h. |
Tenga en cuenta los ejemplos siguientes para los analizadores del sistema de archivos virtual (VFS):
@@io:vfs:entry:read:JFS2
@@io:vfs:exit:*:/usr|JFS
Variables incorporadas relacionadas con el sondeo de E/S para scripts Vue
Variable incorporada__iobufPuede utilizar la variable incorporada __iobuf especial para acceder a diversa información sobre el almacenamiento intermedio de E/S que se emplea en la operación de E/S actual. Es accesible en analizadores de subtipos: disk, lvmy bdev. Se puede acceder a sus elementos de miembro utilizando la sintaxis __iobuf->member .
Invalid Value . Este valor se devuelve debido a una de las razones siguientes:- El contexto de error de página es obligatorio, pero el valor ajustable de
probevctrlactual,num_pagefaults, es 0 o no es suficiente. - La ubicación de memoria que contiene el valor se pagina.
- Cualquier otro error grave del sistema como, por ejemplo, un puntero no válido o memoria dañada.
La variable incorporada __iobuf tiene los miembros siguientes:
| Nombre de miembro | Tipo | Descripción | Valor no válido |
|---|---|---|---|
| blknum | larga no firmada | Número de bloque inicial de la solicitud de E/S. | 0xFFFFFFFFFFFFFFFF |
| recuento de bs | larga no firmada | Número solicitado de bytes en la operación de E/S. | 0xFFFFFFFFFFFFFFFF |
| bflags | larga no firmada | Los distintivos que están asociados con la operación de E/S. Están disponibles los símbolos siguientes: B_READ, B_ASYNC, B_ERROR. Los símbolos se pueden utilizar junto con el valor bflags para ver si se ha establecido. Por ejemplo, si (__iobuf->bflags & B_READ) es true, es una operación de lectura.Nota: No hay ningún distintivo
B_WRITE . Si el distintivo B_READ no está establecido, se considera que es una operación de grabación. |
0 |
| Devnum | larga no firmada | Número de dispositivo del dispositivo de destino que está asociado con la operación de E/S. Tiene el número principal del dispositivo y el número menor que está incorporado en él. | 0 |
| número_principal | int | Número principal del dispositivo de destino de la operación de E/S. | -1 |
| número_mínimo | int | Número menor del dispositivo de destino de la operación de E/S. | -1 |
| Error | int | En caso de error en la operación de E/S, este valor es el número de error. Este valor se define en el archivo de cabecera errno.h exportado. | -1 |
| Residuos | larga no firmada | El número restante de bytes de la solicitud original que es posible que no se lean o no se graben. En los sucesos de finalización de E/S, este valor es idealmente cero. Pero para la operación de lectura, un valor distinto de cero puede significar que está intentando leer más de lo que está disponible, lo cual es aceptable. Este valor sólo se tiene en cuenta cuando el valor de error es distinto de cero. | 0xFFFFFFFFFFFFFFFF |
| Bufid | larga no firmada | Número exclusivo asociado a la solicitud de E/S. Mientras la E/S está en curso, el valor bufid identifica de forma exclusiva la solicitud de E/S en todos los sucesos de un subtipo determinado. Por ejemplo, en disk: entry, disk: iostart, disk:
iodoney disk:exit. Si el __iobuf->bufid coincide, es la misma solicitud de E/S en varias etapas). |
0 |
| parent_bufid | larga no firmada | Si el valor no es 0, este valor proporciona el bufid del almacenamiento intermedio de capa superior que está asociado con esta solicitud de E/S. Ahora puede enlazar la operación de E/S actual con la solicitud de E/S de capa superior. Por ejemplo, en una solicitud de E/S de disco, se puede determinar la E/S de LVM correspondiente.Nota: El campo parent_bufid no está establecido en todas las vías de acceso de código y, por lo tanto, no siempre es útil. Utilice el campo child_bufid para enlazar solicitudes de E/S entre dos capas adyacentes.
|
0 |
| puerto_bufid | larga no firmada | Si el valor no es 0, este valor proporciona el bufid de la nueva solicitud de E/S que se envía a la capa inferior. Los mejores sucesos para registrar son disk:iostart, lvm:iostarty bdev:iostart. Puede identificar la E/S en la capa inferior adyacente haciendo coincidir el valor de __iobuf->bufid con este valor de child_bufid. Por ejemplo, en lvm:iostart, puede registrar el valor __iobuf->child_buf . A continuación, en disk:entry, puede compararlo con __iobuf->bufid para identificar la solicitud de E/S correspondiente. |
0 |
Variable incorporada de__file
Puede utilizar la variable incorporada especial __file para obtener información diversa sobre la operación de archivo. Está disponible en analizadores de subtipo VFS. Se puede acceder a sus elementos de miembro utilizando la sintaxis __file->member .
- El contexto de error de página es necesario, pero el
probevctrlvalor ajustablenum_pagefaultsactual es 0 o no es suficiente. - La ubicación de memoria, que contiene el valor, es paginada.
- Cualquier otro error grave del sistema como, por ejemplo, un puntero no válido o memoria dañada.
La variable incorporada __file tiene los miembros siguientes:
| Nombre de miembro | Tipo | Descripción | Valor no válido |
|---|---|---|---|
| tipo_f | int | Especifica el tipo del archivo. Puede coincidir con uno de los siguientes valores de constante incorporados:
Nota: Es posible que el valor no coincida con ninguna de las constantes incorporadas porque la lista no incluye todos los tipos de archivo posibles, sino sólo los más útiles.
|
-1 |
| tipo_fs | int | Especifica el tipo del sistema de archivos al que pertenece este archivo. Puede coincidir con uno de los siguientes valores de constante incorporados:
Las constantes incorporadas corresponden a los tipos de sistema de archivos AIX definidos en el archivo de cabecera |
-1 |
| vía_acceso_montaje | char * | Especifica la vía de acceso donde está montado el sistema de archivos asociado. | serie nula |
| Devnum | larga no firmada | Especifica el número de dispositivo del dispositivo de bloque asociado del archivo. Tanto los números mayores como los menores están incrustados en él. Si no hay ningún dispositivo de bloque asociado, es 0. | 0 |
| número_principal | int | Especifica el número principal del dispositivo de bloque asociado del archivo. | -1 |
| número_mínimo | int | Especifica el número menor del dispositivo de bloque asociado del archivo. | -1 |
| desplazamiento | larga no firmada | Especifica el desplazamiento de bytes de lectura/grabación actual del archivo. | 0xFFFFFFFFFFFFFFFF |
| modalidad_rw | int | Especifica la modalidad de lectura/grabación del archivo. Coincide con uno de los valores de constante incorporados: F_READ o F_WRITE. | -1 |
| recuento_bytes | larga no firmada | En el suceso de entrada vfs: , byte_count proporciona el recuento de bytes de la solicitud de lectura o grabación. En el suceso de salida vfs: , proporciona el número de bytes que no se han cumplido. Por ejemplo, la diferencia de este valor entre estos dos sucesos determina cuántos bytes se han procesado en la operación. |
0xFFFFFFFFFFFFFFFF |
| NArch | char * | Especifica el nombre del archivo (sólo nombre base, no vía de acceso). | serie nula |
| id_inodo | larga no firmada | Especifica un número exclusivo para todo el sistema que está asociado con el archivo. Nota: Es diferente del número de inodo de archivo.
|
0 |
| vía de acceso | path_t (nuevo tipo de datos en VUE) | Especifica la vía de acceso de archivo completa. Se puede imprimir utilizando printf() y el especificador de formato %p. |
serie nula como vía de acceso de archivo |
| Error | int | Si la operación de lectura/grabación ha fallado, el número de error tal como se define en el archivo de cabecera errno.h exportado. Si no hay ningún error, es 0. | -1 |
Variable incorporada de __lvol
__lvol para obtener información diversa sobre el volumen lógico en una operación LVM. Está disponible en analizadores de subtipo lvm. Se puede acceder a sus elementos de miembro utilizando la sintaxis __lvol->member .Invalid Value. Puede haber las siguientes razones para obtener este valor no válido:- El contexto de error de página es necesario, pero el
probevctrlvalor ajustablenum_pagefaultsactual es 0 o no es suficiente. - La ubicación de memoria que contiene el valor es paginada.
- Cualquier otro error grave del sistema como, por ejemplo, un puntero no válido o memoria dañada.
__lvol tiene los miembros siguientes:| Nombre de miembro | Tipo | Descripción | Valor no válido |
|---|---|---|---|
| nombre | char * | El nombre del volumen lógico. | serie nula |
| Devnum | larga no firmada | Número de dispositivo del volumen lógico. Tiene tanto el número principal como el número menor que está incluido en él. | 0 |
| número_principal | int | El número principal del volumen lógico. | -1 |
| número_mínimo | int | Número menor del volumen lógico. | -1 |
| opciones_lv_ | unsigned int | Las opciones relacionadas con el volumen lógico. Los valores siguientes se definen como constantes incorporadas:
Puede comprobar si uno de estos valores se ha establecido teniendo una condición como Nota: No se han definido todos los valores posibles y, por lo tanto, es posible que haya otras opciones disponibles en el valor.
|
0xFFFFFFFF |
Variable incorporada de__volgrp
__volgrp para obtener información diversa sobre el grupo de volúmenes en una operación LVM. Está disponible en analizadores de subtipo lvm. Se puede acceder a sus elementos de miembro utilizando la sintaxis __volgrp->member .Invalid Value . El valor podría no ser válido debido a las razones siguientes:- El contexto de error de página es necesario, pero el
probevctrlvalor ajustablenum_pagefaultsactual es 0 o no es suficiente. - La ubicación de memoria que contiene el valor es paginada.
- Cualquier otro error grave del sistema como, por ejemplo, un puntero no válido o memoria dañada.
La variable incorporada __volgrp tiene los miembros siguientes:
| Nombre de miembro | Tipo | Descripción | Valor no válido |
|---|---|---|---|
| nombre | char * | El nombre del grupo de volúmenes. | serie nula |
| Devnum | larga no firmada | Número de dispositivo del grupo de volúmenes. Tiene un número mayor y un número menor que está incluido en él. | 0 |
| número_principal | int | El número principal del grupo de volúmenes. | -1 |
| número_mínimo | int | Número menor del grupo de volúmenes. Nota: Para el grupo de volúmenes, AIX siempre asigna 0 como número menor.
|
-1 |
| núm_abrido_lvs | int | Número de volúmenes lógicos abiertos que pertenecen a este grupo de volúmenes. | -1 |
Variable incorporada de __diskinfo
__diskinfo para obtener información diversa sobre el disco en una operación de E/S de disco. Está disponible en sondeos de disco de subtipo. Se puede acceder a sus elementos de miembro utilizando la sintaxis __diskinfo->member .- El contexto de error de página es necesario, pero el
probevctrlvalor ajustablenum_pagefaultsactual es 0 o no es suficiente. - La ubicación de memoria que contiene el valor es paginada.
- Cualquier otro error grave del sistema como, por ejemplo, un puntero no válido o memoria dañada.
__diskinfo tiene los miembros siguientes:| Nombre de miembro | Tipo | Descripción | Valor no válido |
|---|---|---|---|
| nombre | char * | El nombre del disco. | serie nula. |
| Devnum | larga no firmada | Número de dispositivo del disco. Tiene un número mayor y un número menor que están incluidos en él. | 0 |
| número_principal | int | El número principal del disco. | -1 |
| número_mínimo | int | Número menor del disco. | -1 |
| id_almuerzo | larga no firmada | Número de unidad lógica (LUN) del disco. | 0xFFFFFFFFFFFFFFFF |
| tipo_transporte | int | El tipo de transporte del disco. Puede coincidir con uno de los siguientes valores de constante incorporados:
|
-1 |
| profundidad de cola | int | Profundidad de cola del disco. Indica el número máximo de solicitudes de E/S simultáneas que el controlador de disco puede pasar a la capa inferior (por ejemplo, adaptador). Si el número de solicitudes de E/S de entrada es mayor que queue_depth, la solicitud se maneja de forma diferente. La solicitud adicional la maneja el controlador de disco en su cola de espera hasta que la capa inferior responda al menos a una de las solicitudes de E/S pendientes. | -1 |
| cmds_out | int | Número de solicitudes de mandatos de E/S pendientes a la capa inferior (por ejemplo, adaptador). | -1 |
| recuento_vía_acceso | int | Número de vías de acceso MPIO del disco (sólo si el disco tiene capacidad MPIO, de lo contrario es 0). | -1 |
| política_reserva | int | La política de reserva SCSI del disco. Coincide con uno de los siguientes valores de constante incorporados:
Consulte la documentación de MPIO de AIX para obtener más información sobre las políticas de reserva. |
-1 |
| distintivos scsi_flags | int | Los distintivos SCSI del disco. Se definen los siguientes valores de distintivo incorporados:
|
0 |
Nota: Todos los valores de distintivo no están definidos, por lo que otros distintivos presentes podrían estar disponibles en el valor.
|
0 |
Variable incorporada de __diskcmd
__diskcmd para obtener información sobre el mandato de E/S SCSI para la operación actual. Está disponible en analizadores de subtipo de disco (pero sólo en sucesos iostart y iodone ). Se puede acceder a sus elementos de miembro utilizando la sintaxis __diskcmd->member.- El contexto de error de página es necesario, pero el probevctrl valor ajustable
num_pagefaultsactual es 0 o no es suficiente. - La ubicación de memoria que contiene el valor es paginada.
- Cualquier otro error grave del sistema como, por ejemplo, un puntero no válido o memoria dañada.
La variable incorporada __diskcmd tiene los siguientes miembros:
| Nombre de miembro | Tipo | Descripción |
|---|---|---|
| tipo_mandato | int | El tipo del mandato SCSI (tanto el tipo como el subtipo se fusionan). Los siguientes valores de constantes incorporadas están disponibles como tipo de mandato:
|
Nota: Las constantes incorporadas son valores de posición de bits y, por lo tanto, su presencia debe comprobarse utilizando '&' operador (no debe utilizarse el operador '=='). Por ejemplo:
__diskcmd->cmd_type & DK_IOCTL. |
||
| recuento_reintentos | int | Indica si el mandato de E/S se reintenta después de una anomalía. Nota: El valor de 1 significa que es el primer intento. Cualquier valor mayor indica recuperaciones reales.
|
| recuento de conmutaciones de vía de acceso | int | Indica cuántas veces se ha cambiado la vía de acceso para esta operación de E/S concreta (normalmente indica alguna anomalía de vía de acceso de E/S, ya sea transitoria o permanente). |
| validez de estado | int | En caso de error, este valor indica si se trata de un error de SCSI o de un error de adaptador. Puede coincidir con uno de los siguientes valores de constante incorporados: SC_SCSI_ERROR o SC_ADAPTER_ERROR. Si no hay ningún error, entonces es 0. |
| estado_scsi_estado | int | Si el campo status_validez se establece en SC_SCSI_ERROR, este campo proporciona más detalles sobre el error. Puede coincidir con uno de los valores de constante incorporados:
Nota: No se han definido todos los valores posibles. Por lo tanto, SC_SCSI_ERROR puede tener un valor que no coincida con ninguno de los valores incorporados. Puede buscar el código de respuesta de mandato SCSI correspondiente.
|
| estado_adaptador | int | Si el campo status_validez se establece en SC_ADAPTER_ERROR, este campo proporciona más información sobre el error. Puede coincidir con uno de los siguientes valores de constante incorporados:
|
Variable incorporada de __iopath
__iopath para obtener información diversa sobre la vía de acceso de E/S para la operación actual. Solo está disponible en analizadores de disco de subtipo para sucesos iostart y iodone . Se puede acceder a sus elementos de miembro utilizando la sintaxis __iopath->member .Invalid Value. Puede haber las siguientes razones para obtener este valor:- El contexto de error de página es necesario, pero el probevctrl valor ajustable
num_pagefaultsactual es 0 o no es suficiente. - La ubicación de memoria que contiene el valor es paginada.
- Cualquier otro error grave del sistema como, por ejemplo, un puntero no válido o memoria dañada.
__iopath tiene los siguientes miembros:
| Nombre de miembro | Tipo | Descripción | Valor no válido |
|---|---|---|---|
| vía_acceso | int | El ID de la vía de acceso actual (a partir de 0). | -1 |
| id_scsi | larga no firmada | El ID de SCSI del destino en esta vía de acceso. | 0xFFFFFFFFFFFFFFFF |
| id_almuerzo | larga no firmada | Número de unidad lógica (LUN) en esta vía de acceso. | 0xFFFFFFFFFFFFFFFF |
| nombre_www | larga no firmada | El nombre de ámbito mundial del puerto de destino en esta vía de acceso. | 0 |
| cmds_out | int | Número de mandatos de E/S pendientes en esta vía de acceso. | -1 |
Variable incorporada de __j2info
__j2info es una variable incorporada especial que puede utilizar para obtener información diversa sobre el funcionamiento del sistema de archivos JFS2 . Está disponible en analizadores de subtipo jfs2. Se puede acceder a sus elementos de miembro utilizando la sintaxis __j2info->member .Invalid Value . Puede haber las siguientes razones para obtener este valor:- El contexto de error de página es necesario, pero el
probevctrlvalor ajustablenum_pagefaultsactual es 0 o no es suficiente. - La ubicación de memoria que contiene el valor es paginada.
- Cualquier otro error grave del sistema como, por ejemplo, un puntero no válido o memoria dañada.
__j2info tiene los miembros siguientes:
| Nombre de miembro | Tipo | Descripción | Valor no válido |
|---|---|---|---|
| id_inodo | larga no firmada | Número exclusivo de todo el sistema que está asociado con el archivo de la operación actual. Nota: Es diferente del número de inodo de archivo.
|
0 |
| tipo_f | int | Tipo del archivo. La descripción __file->f_type proporciona valores posibles. |
-1 |
| vía_acceso_montaje | char * | La vía de acceso donde está montado el sistema de archivos. | serie nula. |
| Devnum | larga no firmada | Número de dispositivo del dispositivo de bloque subyacente del sistema de archivos. Tiene el número principal y el número secundario incorporados. | 0 |
| número_principal | int | Número principal del dispositivo de bloque subyacente del sistema de archivos. | -1 |
| número_mínimo | int | Número menor del dispositivo de bloque subyacente del sistema de archivos. | -1 |
| l_blknum | larga no firmada | Número de bloque lógico para esta operación de archivo. | 0xFFFFFFFFFFFFFFFF |
| recuento l_bcount | larga no firmada | Recuento de bytes solicitado entre los bloques lógicos de esta operación. | 0xFFFFFFFFFFFFFFFF |
| puerto_bufid | larga no firmada | El bufid del almacenamiento intermedio de solicitud de E/S que se envía a la capa inferior (por ejemplo, LVM). En esa capa, aparece como __iobuf->bufid. |
0 |
| puerto_blknum | larga no firmada | El número de bloque del almacenamiento intermedio de solicitud de E/S que se envía a la capa inferior (por ejemplo, LVM). En esa capa, aparece como __iobuf->blknum. |
0xFFFFFFFFFFFFFFFF |
| recuento_b_hijo | larga no firmada | Recuento de bytes del almacenamiento intermedio de solicitud de E/S que se envía a la capa inferior (por ejemplo, LVM). En esa capa, aparece como __iobuf->bcount. |
0xFFFFFFFFFFFFFFFF |
| child_bflags | larga no firmada | Los distintivos del almacenamiento intermedio de solicitud de E/S que se envía a la capa inferior (por ejemplo, LVM). En esa capa, aparece como __iobuf->bflags. |
0 |
Scripts de ejemplo para el gestor de analizadores de E/S
- Script para rastrear cualquier operación de grabación en el archivo
/etc/passwd:int write(int, char *, int); @@BEGIN { target_inodeid = fpath_inodeid("/etc/passwd"); } @@syscall:*:write:entry { if (fd_inodeid(__arg1) == target_inodeid) { printf("write on /etc/passwd: timestamp=%A, pid=%lld, pname=[%s], uid=%lld\n", timestamp(), __pid, __pname, __uid); } } If the scripts is in a VUE file, names etc_passwd.e. The script can be run as: # probevue etc_passwd.e In another terminal, if the user (root) runs: # mkuser user1 Then probevue displays an output similar to the following example: write on /etc/passwd: timestamp=Mar/03/15 16:10:07, pid=14221508, pname=[mkuser], uid=0 - Script para buscar el tiempo de operación de E/S máximo y mínimo para un disco (por ejemplo,
hdisk0) en un periodo. Asimismo, busque el número de bloque, el recuento de bytes solicitado, el tiempo de operación y el tipo de operación (lectura o grabación) correspondiente al tiempo máximo o mínimo.
long long min_time, max_time;
@@BEGIN {
min_time = max_time = 0;
}
@@io:disk:entry:*:hdisk0 {
ts_entry[__iobuf->bufid] = (long long)timestamp();
}
@@io:disk:exit:*:hdisk0 {
if (ts_entry[__iobuf->bufid]) { /* only if we recorded entry time */
ts_now = timestamp();
op_type = (__iobuf->bflags & B_READ) ? "READ" : "WRITE";
dt = (long long)diff_time(ts_entry[__iobuf->bufid], ts_now, MICROSECONDS);
if (min_time == 0 || dt < min_time) {
min_time = dt;
min_blknum = __iobuf->blknum;
min_bcount = __iobuf->bcount;
min_ts = ts_now;
min_optype = op_type;
}
if (max_time == 0 || dt > max_time) {
max_time = dt;
max_blknum = __iobuf->blknum;
max_bcount = __iobuf->bcount;
max_ts = ts_now;
max_optype = op_type;
}
ts_entry[__iobuf->bufid] = 0;
}
}
@@END {
printf("Maximum and minimum IO operation time for [hdisk0]:\n");
printf("Max: %lld usec, block=%lld, byte count=%lld, operation=%s, time of operation=[%A]\n",
max_time, max_blknum, max_bcount, max_optype, max_ts);
printf("Min: %lld usec, block=%lld, byte count=%lld, operation=%s, time of operation=[%A]\n",
min_time, min_blknum, min_bcount, min_optype, min_ts);
}
Let this script be in a VUE file named disk_min_max_time.e. It can be executed as:
# probevue disk_min_max_time.e
Let there be some IO activity on hdisk0 (dd command can be used).
Then after a few minutes, if the above command is terminated (by pressing CTRL-C), then it will print output similar to:
^CMaximum and minimum IO operation time for [hdisk0]:
Max: 48174 usec, block=6927976, byte count=4096, operation=READ, time of operation=[Mar/04/15 03:31:07]
Min: 133 usec, block=6843288, byte count=4096, operation=READ, time of operation=[Mar/04/15 03:31:03]