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:

Tabla 1. Segunda tupla para analizadores
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.
Nota: La segunda tupla no puede tener un valor de asterisco (*).

Para un tipo de disco de segunda tupla, la tercera tupla puede tener los valores siguientes:

Tabla 2. Segunda tupla de disco: valores de tercera tupla
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.
Nota: Los miembros de los siguientes valores incorporados están disponibles en los analizadores mencionados para el subtipo de analizador: __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:

Tabla 3. Segunda tupla LVM: Terceros valores de tupla
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.
Nota: Los miembros de los siguientes valores incorporados están disponibles en los analizadores mencionados para LVM: __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:

Tabla 4. Segunda tupla de dispositivo de bloque genérico: Terceros valores de tupla
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 .
Nota: Los miembros de los siguientes valores incorporados están disponibles en los analizadores que se mencionan en bdev: __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:

Tabla 5. JFS2 segunda tupla: Terceros valores de tupla
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.
Nota: Los miembros de los siguientes valores incorporados están disponibles en el analizador mencionado para los analizadores del sistema de archivos JFS2 : __j2info.

Para analizadores de sistema de archivos virtual (VFS), la tercera tupla puede tener los valores siguientes:

Tabla 6. Segunda tupla de VFS: Terceros valores de tupla
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).
Nota: Los miembros de los siguientes incorporados están disponibles en el analizador que se menciona en los analizadores VFS: __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:

Tabla 7. Cuarta tupla para la operación de E/S
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:

Tabla 8. Tupla de filtro de disco
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:
  • FC: Disco de canal de fibra
  • ISCSI: disco iSCSI
  • VSCSI: Disco SCSI virtual (en cliente VIOS)
  • SAS: Discos SCSI conectados en serie
Nota: El nombre de disco y el tipo de disco se pueden combinar como filtros. Por ejemplo, el siguiente analizador se inicia para 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|FC

Para los analizadores del gestor de volúmenes lógicos (LVM), la quinta tupla puede tener los valores siguientes:

Tabla 9. Tupla de filtro LVM
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

Para analizadores de dispositivos de bloque genéricos, la quinta tupla puede tener los siguientes valores:
Tabla 10. Tupla de filtro de dispositivo de bloque genérico
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:

Tabla 11. JFS2
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:

Tabla 12. Tupla de filtro VFS
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 __iobuf

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

Nota: Siempre que no se pueda obtener el valor real, se devolverá el valor marcado como 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 probevctrl actual, 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:

Tabla 13. Los miembros de variable incorporados __iobuf
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 .

Nota: Siempre que no se pueda obtener el valor real, se devolverá el valor marcado como no válido. El valor no válido se devuelve debido a una de las razones siguientes:
  • El contexto de error de página es necesario, pero el probevctrl valor ajustable num_pagefaults actual 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:

Tabla 14. Los miembros de variable incorporados __file
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:
  • F_REG (archivo normal)
  • F_DIR (directorio)
  • F_BLK (archivo de dispositivo de bloque)
  • F_CHR (archivo de dispositivo de caracteres)
  • F_LNK (enlace de archivo)
  • F_SOCK (socket)
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:
  • FS_JFS2
  • FS_XX_ENCODE_CASE_ONE nombre
  • FS_NFS
  • FS_JFS
  • FS_CDROM
  • FS_PROCFS
  • FS_SFS
  • FS_CACHEFS
  • FS_NFS3
  • FS_AUTOFS
  • FS_POOLFS
  • FS_VXFS
  • FS_VXODM
  • FS_UDF
  • FS_NFS4
  • FS_RFS4
  • FS_CIFS
  • FS_PMEMFS
  • FS_AHAFS
  • FS_STNFS
  • FS_ASMFS

Las constantes incorporadas corresponden a los tipos de sistema de archivos AIX definidos en el archivo de cabecera sys/vmount.h exportado.

-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

Puede utilizar la variable incorporada especial __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 .
Nota: Siempre que no se pueda obtener el valor real, se devolverá el valor, que se marca como 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 probevctrl valor ajustable num_pagefaults actual 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 __lvol tiene los miembros siguientes:
Tabla 15. Los miembros de variable incorporados __lvol
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:
  • LV_RDONLY (volumen lógico de sólo lectura)
  • LV_NOMWC (sin comprobación de coherencia de grabación de duplicación)
  • LV_ACTIVE_MWC (coherencia de grabación de duplicación activa)
  • LV_PASSIVE_MWC (coherencia de grabación de duplicación pasiva)
  • LV_SERIALIZE_IO (E/S serializada)
  • LV_DMPDEV (Este LV es un dispositivo de vuelco)

Puede comprobar si uno de estos valores se ha establecido teniendo una condición como __lvol->lv_options & LV_RDONLY.

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

Puede utilizar la variable incorporada especial __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 .
Nota: Siempre que no se pueda obtener el valor real, se devolverá el valor marcado como 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 probevctrl valor ajustable num_pagefaults actual 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:

Tabla 16. Los miembros de variable incorporados __volgrp
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

Puede utilizar la variable incorporada especial __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 .
Nota: Siempre que no se pueda obtener el valor real, se devolverá el valor marcado como "Valor no válido". Puede haber las siguientes razones para obtener este valor:
  • El contexto de error de página es necesario, pero el probevctrl valor ajustable num_pagefaults actual 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 __diskinfo tiene los miembros siguientes:
Tabla 17. Los miembros de variable incorporados __diskinfo
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:
  • T_FC (Canal de fibra)
  • T_ISCSI (iSCSI)
  • T_VSCSI (SCSI virtual)
  • T_SAS (SCSI con conexión en serie)
-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:
  • DK_NO_RESERVE (no_reserve)
  • DK_SINGLE_PATH (vía_acceso_única)
  • DK_PR_EXCLUSIVE (PR_exclusivo)
  • DK_PR_SHARED (PR_compartido)

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:
  • SC_AUTOSENSE_ENABLED (En caso de error, el destino envía datos de detección en la respuesta. El iniciador no necesita enviar el mandato de detección de solicitud.)
  • SC_NACA_1_ENABLED (el ACA normal está habilitado y el destino pasa al estado ACA si devuelve la condición de comprobación.)
  • SC_64BIT_IDS (ID de SCSI de 64 bits y número de unidad lógica (LUN)
  • SC_LUN_RESET_ENABLED (se puede enviar el mandato de restablecimiento de LUN).
  • SC_PRIORITY_SUP (El dispositivo da soporte a la prioridad de E/S.)
0
   
  • SC_CACHE_HINT_SUP (El dispositivo da soporte a sugerencias de memoria caché.)
  • SC_QUEUE_UNTAGGED (El dispositivo da soporte a la colocación en cola de mandatos sin etiquetar.)
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

Puede utilizar la variable incorporada especial __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.
Nota: Siempre que no se pueda obtener el valor real, se devolverá el valor marcado como "Valor no válido". Puede haber los siguientes motivos para obtener el valor:
  • El contexto de error de página es necesario, pero el probevctrl valor ajustable num_pagefaults actual 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:

Tabla 18. Los miembros de variable incorporados __diskcmd
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:
  • DK_BUF (lectura/grabación E/S normal)
  • DK_IOCTL (ioctl)
  • DK_REQSNS (detección de petición)
  • DK_TGT_LUN_RST (destino o restablecimiento de LUN)
  • DK_TUR (Unidad de prueba preparada)
  • DK_INQUIRY (Consulta)
  • DK_RESERVE (SCSI-2 RESERVE, versión de 6 bytes)
  • DK_RELEASE (SCSI-2 RELEASE, versión de 6 bytes)
  • DK_RESERVE_10 (SCSI-2 RESERVE, versión de 10 bytes)
  • DK_RELEASE_10 (SCSI-2 RELEASE, versión de 10 bytes)
  • DK_PR_RESERVE (SCSI-3 Reserva persistente, RESERVE)
  • DK_PR_RELEASE (SCSI-3 Reserva persistente, RELEASE)
  • DK_PR_CLEAR (SCSI-3 Reserva persistente, CLEAR)
  • DK_PR_PREEMPT (SCSI-3 Reserva persistente, PREEMPT)
  • DK_PR_PREEMPT_ABORT (SCSI-3 Reserva persistente, PREEMPT Y ABORT)
  • DK_READCAP (CAPACIDAD DE LECTURA, versión de 10 bytes)
  • DK_READCAP16 (CAPACIDAD DE LECTURA, versión de 16 bytes)
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:
  • SC_GOOD_STATUS (La tarea se ha completado correctamente)
  • SC_CHECK_CONDITION (Algunos errores, los datos de detección proporcionan más información)
  • SC_BUSY_STATUS (LUN está ocupado, no se puede aceptar el mandato)
  • SC_RESERVATION_CONFLICT (Violación de la reserva SCSI existente.)
  • SC_COMMAND_TERMINADO (El dispositivo ha finalizado el mandato.)
  • SC_QUEUE_FULL (La cola de dispositivos está llena.)
  • SC_ACA_ACTIVE (El dispositivo está en estado Auto Contingente Allegiance.)
  • SC_TASK_ABORTED (El dispositivo ha detenido el mandato.)
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:
  • ADAP_HOST_IO_BUS_ERR (error de bus de E/S de host)
  • ADAP_TRANSPORT_FAULT (error de capa de transporte)
  • ADAP_CMD_TIMEOUT (se ha excedido el tiempo de espera del mandato de E/S)
  • ADAP_NO_DEVICE_RESPONSE (sin respuesta del dispositivo)
  • ADAP_HDW_FAILURE (anomalía de hardware de adaptador)
  • ADAP_SFW_FAILURE (anomalía de microcódigo de adaptador)
  • ADAP_TRANSPORT_RESET (el adaptador ha detectado un restablecimiento de bus SCSI externo)
  • ADAP_TRANSPORT_BUSY (la capa de transporte está ocupada)
  • ADAP_TRANSPORT_DEAD (la capa de transporte no está operativa)
  • ADAP_TRANSPORT_MIGRADO (se migra la capa de transporte)
  • ADAP_FUSE_OR_TERMINAL_PWR (fusible soplado por el adaptador o terminación eléctrica incorrecta)

Variable incorporada de __iopath

Puede utilizar la variable incorporada especial __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 .
Nota: Siempre que no se pueda obtener el valor real, se devolverá el valor, que se marca como 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_pagefaults actual 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:

Tabla 19. Los miembros de variable incorporados __iopath
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 .
Nota: Siempre que no se puede obtener el valor real, se devuelve el valor, que se marca como 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_pagefaults actual 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:

Tabla 20. Los miembros de variable incorporados __j2info
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

  1. 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
    
    
  2. 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]