Gestor de analizadores de sysproc
El gestor de analizadores sysproc proporciona una infraestructura a los usuarios y administradores para rastrear dinámicamente los datos relacionados con procesos o hebras sin conocer los aspectos internos del subsistema sysproc .
Los aspectos del subsistema sysproc para un usuario o administrador se dividen en las siguientes categorías principales:
- Creación o terminación de procesos (o hebras)
- Generación y entrega de señales
- Sucesos de planificador y asignador
- Sucesos de enlace de DR y CPU
Creación o terminación de procesos (o hebras)
- ¿Ha salido un proceso de forma natural o debido a un error?
- ¿Cuándo se creó o terminó o se excedió un proceso o una hebra?
- ¿Cuánto tiempo se ha ejecutado un proceso?
- Realiza un seguimiento de los sucesos cuando una hebra recibe o devuelve una excepción.
Generación y entrega de señales
- Fuente de señal e información de señal para un objetivo específico.
- Entrega de señal de señales asíncronas.
- La señal de rastreo se borra.
- Rastrear sucesos cuando se instala un manejador de señales que no es el predeterminado.
- Información de señal y destino de señal para una fuente específica.
- Entrada o salida del manejador de señales de rastreo.
Sucesos de planificador y asignador
El planificador y el asignador dictan cómo se ejecuta un proceso o hebra en el sistema. El administrador analiza el rendimiento del sistema utilizando el planificador de rastreo dinámico o el subsistema asignador.
El planificador de rastreo dinámico o el subsistema asignador ayuda a descubrir las razones de la retención de hebras.
- Hebra o hebras de rastreo que están en cola o en cola de la cola de ejecución.
- Rastrear sucesos cuando cualquier hebra del sistema tiene preferencia.
- Rastrear cuando una hebra se está poniendo en suspensión sobre un suceso.
- Rastrear cuando se está despertando una hebra inactiva.
- Realiza un seguimiento de la latencia de los envíos de una hebra.
- Realice un seguimiento de los sucesos de repliegue del procesador virtual.
- Rastrear cambios en cualquier prioridad de hebra de kernel.
Sucesos de reconfiguración dinámica (DR) y de enlace de CPU
Esta clase de analizadores ofrece prestaciones de rastreo dinámico a un usuario que realiza un seguimiento de los recursos enlazados a un proceso.
- Realizar un seguimiento cuando un enlace de hebra cambia de una CPU a otra.
- Realice un seguimiento cuando los recursos estén conectados o desconectados a un proceso.
- Realizar un seguimiento de los sucesos de enlace de CPU.
- Realizar un seguimiento del inicio o finalización de un suceso de recuperación tras desastre.
Especificación de analizador
Se debe utilizar el formato siguiente en un script Vue para sondear sucesos sysproc:
@@sysproc:<sysproc_event>:<pid/tid/*>
La primera tupla @@sysproc indica que este analizador es específico de los sucesos sysproc.
La segunda tupla especifica el suceso que se va a sondear.
Suceso de envío de señal, donde el proceso que envía la señal o el que la recibe, puede ser útil. La información siguiente especifica los filtros adecuados para dichos sucesos de analizador.
Puntos de sonda (sucesos de interés)
En la tabla siguiente se menciona una breve descripción de todos los sucesos que se pueden sondear a través del gestor de analizadores sysproc:
| Analizador (sysproc_event) | Descripción |
|---|---|
| forkfail | Realizar un seguimiento de las anomalías en la interfaz de bifurcación. |
| error de ejecución | Realizar el seguimiento de las anomalías en la interfaz exec. |
| Execpass | Realice un seguimiento del éxito de la ejecución. |
| salida | Realizar un seguimiento de la salida de un proceso. |
| creación de hebras | Realice un seguimiento de la creación de una hebra de kernel. |
| terminación de hebra | Realice un seguimiento de la terminación de una hebra de kernel. |
| treadexcept | Realizar un seguimiento de las excepciones de proceso. |
| Sendsig | Señal de seguimiento enviada a un proceso por fuentes externas. |
| cola de firma | Realiza un seguimiento de las señales en cola para un proceso |
| sigdispose | Realiza un seguimiento de las eliminaciones de señal. |
| sigaction | Realizar un seguimiento de las instalaciones y reinstalaciones del manejador de señales |
| sighandlestart | Realice un seguimiento cuando esté a punto de llamarse a un manejador de señales. |
| acabado de sighandle; | Realizar un seguimiento cuando finaliza un manejador de señales |
| prioridad de cambio | Realizar un seguimiento cuando cambia la prioridad de un proceso |
| onreadyq | Realiza un seguimiento cuando una hebra de kernel se pone en una cola preparada. |
| Offreadyq | Realiza un seguimiento cuando una hebra de kernel se mueve fuera de la cola preparada. |
| asignar | Realizar un seguimiento cuando se llama al asignador del sistema para planificar una hebra |
| oncpu | Realiza un seguimiento cuando una hebra de kernel adquiere CPU. |
| Offcpu | Realiza un seguimiento cuando una hebra de kernel renuncia a la CPU. |
| hebra de bloque | Realizar un seguimiento cuando se bloquea una hebra para que no obtenga CPU. |
| foldcpu | Realice un seguimiento del plegado de un núcleo de CPU. |
| bindprocessor | Suceso de seguimiento cuando un proceso/hebra está enlazado a una CPU |
| Changecpu | Realizar un seguimiento de los sucesos cuando una hebra de kernel cambia la CPU temporalmente |
| adjunción de recursos | Realizar un seguimiento de los sucesos cuando un recurso está conectado a otro |
| desconexión de recursos | Realizar un seguimiento de los sucesos cuando un recurso se desconecta de otro |
| drphasestart | Realizar un seguimiento cuando se está iniciando un drphase |
| drphasefinish | Realizar un seguimiento cuando se completa una drphase |
Método para acceder a los datos en un punto de sondeo
ProbeVue permite el acceso a los datos a través de variables incorporadas.
- Accesible en cualquier punto de analizador, independientemente del gestor de analizadores. Por ejemplo:
__curthread. - Accesible a través de analizadores de un gestor de analizadores específico.
- Accesible sólo en analizadores definidos (sucesos de interés)
A continuación se muestra la lista de valores compilados de tipo (1).
- __trcid
- __errno__modalidad_kernel
- __arg1 a __arg7
- __subproceso
- __curproc
- __mst
- __tid
- __pid
- __ppid
- __pgid
- __uid
- __euid
- __ubbloqueo
- __execname
- __pnombre
Las variables incorporadas también se clasifican como específicas de contexto e independientes de contexto. Las incorporaciones específicas de contexto proporcionan datos basados en el contexto de ejecución del analizador.
El kernel de AIX® opera en un contexto de hebra o interrupción. Los analizadores específicos de contexto producen un resultado correcto cuando el analizador se inicia en el contexto de proceso o hebra.
Los resultados que se obtienen de las incorporaciones específicas de contexto en el contexto de ejecución de interrupción pueden ser inesperados. Las incorporaciones independientes del contexto no dependen del contexto de ejecución y se puede acceder a ellas de forma segura independientemente del entorno de ejecución del analizador.
| Variables incorporadas específicas de contexto | Variables incorporadas independientes del contexto |
|---|---|
| __subproceso | __trcid |
| __curproc | __errno |
| __tid | __kernelmode |
| __pid | __arg1 a __arg7 |
| __ppid | __mst |
| __pgid | |
| __uid | |
| __euid | |
| __ubbloqueo | |
| __pnombre | |
| __execname |
Puntos de sondeo
Los puntos de analizador son los sucesos específicos para los que se activa un analizador. A continuación se muestra la lista de puntos de analizador.
- forkfail
El analizador
forkfailse inicia cuando falla la bifurcación. Este analizador determina las razones del error de bifurcación.Sintaxis:
@@sysproc:forkfail:<pid/tid/*>Soporte incorporado especial
__forkfailinfo { fail_reason; }La variable
fail_reasontiene uno de los valores siguientes:Tabla 3. fail_reason probe: Razones de anomalía Razón Descripción LÍMITE_FALLIDO_RLIMIT Ha fallado debido a limitaciones de rlimit ASIGNACIONES ANÓMALAS_ASIGNACIONES Ha fallado debido a asignaciones de recursos internos FAILED_LOADER Ha fallado en una etapa de cargador FAILED_PROCDUP Error en procdup Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid,__ublock,__execname,__pname.Entorno de ejecución
Se ejecuta en un entorno de proceso.
Ejemplo
El ejemplo siguiente muestra cómo supervisar todas las anomalías de bifurcación debido a rlimit en el sistema.
@@BEGIN { x = 0; } @@sysproc:forkfail:* when (__forkfailinfo->fail_reason == FAILED_RLIMIT) { printf ("process %s with pid %llu failed to fork a child\n",__pname,__pid); x++; } @@END { printf ("Found %d failures during this vue session\n",x); }- error de ejecución
El analizador
execfailse inicia cuando falla una llamada de funciónexec. Utilice el analizadorexecfailpara determinar las razones de la anomalía.Sintaxis:
@@sysproc:execfail:<pid/tid/*>Tabla 4. execfail probe: Razones de error Razón Descripción PRIVILEGIOS ANÓMALOS_PRIVILEGIOS El nuevo proceso no ha podido adquirir o heredar privilegios FAILED_COPYINSTR El nuevo proceso no ha podido copiar la instrucción FAILED_V_USERACC El nuevo proceso no ha podido descartar las regiones v_useracc FAILED_CLEARDATA Ha fallado durante el borrado de datos para el nuevo proceso FAILED_PROCSEG No se ha podido establecer el segmento privado de proceso FAILED_CH64 No se ha podido convertir a un proceso de 64 bits FAILED_MEMATT No se ha podido conectar a un conjunto de recursos de memoria FAILED_SRAD No se ha podido conectar a un srad FAILED_MSGBUF La longitud del almacenamiento intermedio de mensajes de error es cero ERRBUF_ANÓMALOS No se ha podido asignar el almacenamiento intermedio de mensajes de error ENVIAR_ANÓMALO No se han podido asignar variables de entorno FAILED_CPYSTR Error de serie de copia FAILED_ERRBUFCPY No se han podido copiar los mensajes de error de errmsg_buf FAILED_TOOLNGENV Env demasiado largo para memoria asignada FAILED_USRSTK No se ha podido configurar la pila de usuarios FAILED_CPYARG No se ha podido copiar arglist en la pila RASTREO_INITPFALLIDO_INITPTRACE No se ha podido inicializar ptrace Nota: 64 se añade al valor de error si se encuentra un error de cargador.Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid,__ublock,__execname,__pname.Entorno de ejecución
Se ejecuta en un entorno de proceso.
- salida
Este analizador se inicia cuando se cierra un proceso. La salida también es un gestor de llamadas del sistema y se rastrea a través del gestor de analizadores de llamadas del sistema. El sondeo de la llamada al sistema de salida a través del gestor de analizadores de
sysprocexplica la naturaleza y las razones de la salida. También explica las razones de una terminación de hebra de usuario en el espacio de kernel y no se devuelve al espacio de usuario.Sintaxis:
@@sysproc:forkfail:<pid/tid/*>Un programa puede salir por las siguientes razones:
- Al alcanzar una condición de terminal cuando un programa de espacio de usuario no puede continuar.
- Al recibir una señal de terminal.
Soporte incorporado especial
__exitinfo{ signo; returnval; iscore; }Donde, el valor de signo signo indica el número de señal que ha causado la terminación del proceso, returnval es el valor devuelto por la salida. Signo distinto de cero sólo es válido si el programa se detiene mediante una señal.
La variable
iscorese establece cuando se genera un núcleo como resultado de la salida de proceso.Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid,__ublock,__execname,__pname.Entorno de ejecución
Se ejecuta en un entorno de proceso.
Ejemplo
En el ejemplo siguiente se explica cómo sondear el suceso
exitecho '@@sysproc:exit:* { printf (" %s %llu %llu\n", __pname, __pid,__exitinfo->returnval);}' | probevueWhich will produce an output similar to the following. ksh 5833042 0 telnetd 7405958 1 dumpctrl 7405960 0 setmaps 7275006 0 termdef 7274752 0 hostname 7274754 0 id 8257976 0 id 8257978 0 uname 8257980 0 expr 8257982 1- creación de hebras
El analizador
threadcreatese inicia cuando una hebra se crea correctamente.Sintaxis:
@@sysproc:threadcreate:<pid/tid/*>Nota: Elpidotidespecificado debe ser el ID de proceso o hebra del proceso o hebra que ha creado la hebra.Soporte incorporado especial
__threadcreateinfo { tid; pri; policy; }donde
tidindica el ID de hebra de la nueva hebra que se crea y la prioridad es la prioridad de la hebra. La política indica la política de planificación de hebras de la hebra.Tabla 5. Valores de política para el analizador threadcreate Política Descripción SCHED_OTHER política de planificación AIX predeterminada SCHED_FIFO política de planificación primero en entrar, primero en salir SCHED_RR política de planificación por turno circular PLANIFICACIÓN_LOCAL política de planificación de ámbito de hebra local PLANIFICACIÓN_GLOBAL política de planificación de ámbito de hebra global SCHED_FIFO2 FIFO con RQHEAD después de una suspensión corta SCHED_FIFO3 FIFO con RQHEAD todo el tiempo SCHED_FIFO4 FIFO con preferencia débil Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid,__ublock,__execname,__pname.Entorno de ejecución
Se ejecuta en un entorno de proceso (usuario o kproc).
Ejemplo
Para imprimir continuamente todos los procesos del sistema creando un nombre de proceso de impresión de hebras, creando el ID de proceso, el ID de la hebra recién creada y la indicación de fecha y hora de creación.
echo '@@sysproc:threadcreate:* { printf ("%s %llu %llu %A\n",__pname,__pid,__threadcreateinfo->tid,timestamp());}' | probevueSe muestra una salida similar a la del ejemplo siguiente.
nfssync_kproc 5439964 23921151 Feb/22/15 09:22:38 nfssync_kproc 5439964 24052201 Feb/22/15 09:22:38 nfssync_kproc 5439964 23920897 Feb/22/15 09:22:38 nfssync_kproc 5439964 22479285 Feb/22/15 09:22:55 nfssync_kproc 5439964 23920899 Feb/22/15 09:22:55 nfssync_kproc 5439964 22479287 Feb/22/15 09:22:55- terminación de hebra
El analizador se muestra para una hebra que ha terminado.
Sintaxis:
@@sysproc:threadterminate:<pid/tid/*>Nota: El ID de proceso o ID de hebra especificado debe corresponder al proceso o hebra que se está deteniendo actualmente.Incorporados especiales soportados
Ninguna.
Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Se ejecuta en un entorno de proceso (usuario o kproc).
Ejemplo
Para imprimir de forma continua todos los procesos del sistema terminando un nombre de proceso de impresión de hebras, creando el ID de proceso, el ID de la hebra recién creada y la indicación de fecha y hora de creación.
Se muestra una salida similar al ejemplo siguiente:# echo '@@sysproc:threadterminate:* { printf ("%s %llu %llu %A\n",__pname,__pid,__tid,timestamp());}' | probevuenfssync_kproc 5439964 23855555 Feb/22/15 09:59:30 nfssync_kproc 5439964 21758249 Feb/22/15 09:59:30 nfssync_kproc 5439964 23855557 Feb/22/15 09:59:30- treadexcept
Este analizador se inicia cuando se produce una excepción de programa. Se genera una excepción de programa cuando el sistema detecta una condición en la que un programa no puede continuar normalmente. Algunas excepciones son muy graves (instrucción no permitida) mientras que algunas se pueden recuperar (cambio de espacio de direcciones).
Sintaxis:
@@sysproc:threadexcept:<pid/tid/*>Incorporados especiales soportados
__threadexceptinfo { pid; tid; exception; excpt_address }donde
pidindica el ID de proceso del proceso que ha recibido la excepción, tid es el ID de hebra de la hebra de kernel que ha recibido la excepción,excpt_addresses la dirección que ha causado esta excepción, mientras que la excepción puede asumir uno de los valores indicados en la tabla.Tabla 6. Valores de excepción para el analizador threadexcept Excepción Descripción EXCEPTO_FLOTANTE Excepción de coma flotante EXCEPT_INV_OP Código de operación no válido EXCEPT_PRIV_OP Operación privilegiada en modalidad de usuario EXCEPT_TRAP Instrucción de condición de excepción EXCEPT_ALIGN Alineación de código o datos DIRECCIÓN_INV_EXCEPCIÓN Dirección no válida PROTO_EXCEPCIÓN Protección EXCEPTO_IO E/S síncrona EXCEPT_IO_IOCC Excepción de E/S de IOCC EXCEPT_IO_SGA excepción de E/S de SGA EXCEPT_IO_SLA Excepción de E/S de SLA EXCEPT_IO_SCU excepción de E/S de SCU EXCEPT_EOF Referencia más allá del fin de archivo (mmap) EXCEPT_FLOAT_IMPRECISO Excepción de coma flotante imprecisa EXCEPT_ESTALE_I Excepción de segmento de texto obsoleto EXCEPTO_ESTALE_D Excepción de segmento de datos obsoletos EXCEPT_PT_WATCHP Punto de observación de rastreo de hit Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Se ejecuta en un entorno de proceso o interrupción.
Nota: Puesto que este analizador puede iniciarse en un contexto de interrupción, las variables incorporadas como__pid,__tidque dependen del contexto de ejecución podrían no indicar el ID de proceso o hebra. Los miembros incorporados especiales para este analizador garantizan un proceso correcto o un ID de hebra destinado al proceso o hebra.Ejemplo
El ejemplo siguiente muestra las excepciones de programa de rastreo generadas por un suceso de prueba rastreado por un depurador.
Se muestra una salida similar al ejemplo siguiente:# cat threadexcept.e @@sysproc:threadexcept:* { printf ("PID = %llu TID= %llu EXCEPTION=%llu ADDRESS = %llu\n ",__threadexceptinfo->pid,__threadexceptinfo->tid,__threadexceptinfo- >exception,__threadexceptinfo->excpt_address); } Run a debugging session on a program compiled with debugging support # dbx a.out Type 'help' for help. Core file "core" is older than current program (ignored) reading symbolic information ... (dbx) stop in main [1] stop in main (dbx) r [1] stopped in main at line 5 5 int a=5;PID = 6816134 TID= 24052015 EXCEPTION=131 ADDRESS = 268436372- Sendsig
Este analizador se inicia cuando se envía una señal a un proceso a través de fuentes externas (otro proceso, proceso desde el espacio de usuario, desde corrientes de kernel o contexto de interrupción)
Sintaxis:
@@sysproc:sendsig:<pid/*>__dispatchinfo{ cpuid; <- cpu id oldpid; <- pid of the thread currently running oldtid; <- thread id of the thread currently running oldpriority; <- priority of the thread currenly running newpid; <- pid of the new process process selected for running newtid; <- thread id of the thread selected for running newpriority; <-priority of the thread selected for running }donde pid id el identificador de proceso del proceso objetivo que recibe la señal. Este analizador no permite especificar un identificador de hebra para filtrar resultados específicos de una hebra.
Incorporados especiales
_sigsendinfo{ tpid; ← target pid spid; ← source pid signo; ← signal sent }donde
tpides el identificador de proceso de origen de destino,spididentifica el origen de la señal.spides distinto de cero cuando se envía la señal desde el espacio de usuario o el contexto de proceso. El identificador de proceso de origen es 0 si la señal se envía desde un contexto de excepción o interrupción. La información de número de señal está contenida ensigno.Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Se ejecuta en un entorno de proceso o interrupción.
Nota: Puesto que este analizador puede iniciarse en un contexto de interrupción, es posible que las incorporaciones como__pid,__tid, que dependen del contexto de ejecución de hebras no indiquen el proceso o el ID de hebra de interés. Los miembros incorporados especiales para este analizador garantizan un proceso correcto o un ID de hebra destinado al proceso o hebra.Cuando este analizador se inicia en el contexto de proceso, los miembros incorporados que dependen del contexto de ejecución apuntan al proceso de origen. miembros incorporados como
.__pid,__tidy__curthreadproporcionan información sobre el proceso de origen.Ejemplo
Se muestra una salida similar al ejemplo siguiente:To continuously print signal source signal target and signal number of all signals. echo '@@sysproc:sendsig:* {printf ("Source=%llu Target=%llu sig=%llu\n",__sigsendinfo->spid,__sigsendinfo->tpid,__sigsendinfo->signo);}' | probevueSource=0 Target=6619618 sig=14 Source=0 Target=8257944 sig=20 Source=0 Target=8257944 sig=20- cola de firma
Este analizador se inicia cuando se envía una señal en cola al proceso.
Sintaxis:
@@sysproc:sigqueue:<pid/*>Incorporados especiales
_sigsendinfo{ tpid; ← target pid spid; ← source pid preprocess.cp signo; ← signal sent }Puesto que las señales posix se ponen en cola en un proceso, no se permite especificar el identificador de hebra en este analizador.
Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Este analizador se inicia en el contexto del proceso de envío. Por lo tanto, las incorporaciones basadas en contexto hacen referencia al proceso de envío en este suceso de analizador.
Entorno de ejecución
Este analizador se ejecuta en contexto de proceso.
Ejemplo
Se muestra una salida similar al ejemplo siguiente:echo '@@sysproc:sigqueue:*{printf ("%llu %llu %llu\n",__sigsendinfo->spid,__sigsendinfo->tpid,__sigsendinfo->signo);}' | probevue8258004 6095294 31 sigdispose Syntax : @@sysproc:sigdispose:<pid/tid/*>La sonda se inicia cuando se coloca una señal en un proceso de destino. Especifique el ID de proceso del proceso que ha recibido esta señal en la especificación de sysprobe para filtrar este analizador.
Incorporados especiales
__sigdisposeinfo{ tpid; ← target pid ttid; ← target tid signo; ← signal whose action is being taken. fatal; ← will be set if the process is going to be killed as part of signal action }Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Este sondeo se puede iniciar desde el contexto de proceso o interrupción. Si se inicia desde el contexto de interrupción, es posible que este analizador no proporcione el valor necesario para las incorporaciones basadas en contexto.
Ejemplo
Imprima continuamente el identificador de proceso, el identificador de hebra, el número de señal e indique si esta eliminación de señal dará como resultado la terminación del proceso para todos los procesos del sistema.
Se muestra una salida similar al ejemplo siguiente:cat sigdispose.e @@sysproc:sigdispose:* { printf ("%llu %llu %llu %llu\n",__sigdisposeinfo->tpid,__sigdisposeinfo->ttid, __sigdisposeinfo->signo,__sigdisposeinfo->fatal); }5964064 20840935 14 0 1 65539 14 0 4719084 19530213 14 0- sigaction
Sintaxis:
@@sysproc:sigaction:<pid/tid/*>Este analizador se inicia cuando se instala o se sustituye un manejador de señales.
Incorporados especiales
__sigactioninfo{ old_sighandle; ← old signal handler function address new_sighandle; ←new signal handler function address signo; ← Signal number rpid; ← requester's pid }old_sighandleserá 0 si se instala un manejador de señales por primera vez.Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Este analizador se inicia en el entorno de proceso.
Nota: El kernel de AIX garantiza que solo se entregue una señal a un proceso o hebra a la vez. Sólo se envía otra señal a ese proceso o hebra cuando finaliza la entrega de la señal.Ejemplo
Para rastrear el inicio y el final de todas las señales en un sistema:
Se puede visualizar una salida similar a la del ejemplo siguiente:@@sysproc:sighandlestart:* { signal[__tid] = __sighandlestartinfo->signo; printf ("Signal handler at address 0x%x invoked for thread id %llu to handle signal %llu\n",__sighandlestartinfo- >sighandle,__curthread->tid,__sighandlestartinfo->signo); } @@sysproc:sighandlefinish:* { printf ("Signal handler completed for thread id %llu for signal %llu\n",__curthread->tid,signal[__tid]); delete (signal,__tid); }Signal handler at address 0x20001d58 invoked for thread id 19923365 to handle signal 20 Signal handler completed for thread id 19923365 for signal 20 Signal handler at address 0x10003400 invoked for thread id 20840935 to handle signal 14 Signal handler completed for thread id 20840935 for signal 14 Signal handler at address 0x10002930 invoked for thread id 19530213 to handle signal 14 Signal handler completed for thread id 19530213 for signal 14 Signal handler at address 0x300275d8 invoked for thread id 22348227 to handle signal 14 Signal handler completed for thread id 22348227 for signal 14 Signal handler at address 0x20001a3c invoked for thread id 65539 to handle signal 14 Signal handler completed for thread id 65539 for signal 14- acabado de sighandle;
Este analizador se inicia al finalizar el manejador de señales.
Sintaxis:
@@sysproc:sighandlestart:<pid/tid/*>Incorporados especiales soportados: Ninguno.
Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Se ejecuta en un entorno de proceso. Protegido, la conmutación de contexto no está permitida en la ejecución de CPU.
- prioridad de cambio
Este analizador se inicia cuando se cambia la prioridad de un proceso. Este suceso no es un planificador ni un asignador.
Sintaxis:
@@sysproc:changepriority:<pid/tid/*>Nota: El cambio de prioridad también puede no ser satisfactorio; no se garantiza el éxito del cambio de prioridad.Incorporados especiales soportados
__chpriorityinfo{ pid; old_priority; <- current priority new_priority; <- new scheduling priority of the thread. }Entorno de ejecución
Este analizador se ejecuta en un entorno de proceso.
Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid,__ublock,__execname,__pname.Ejemplo
Para realizar un seguimiento de todos los procesos cuya prioridad se está cambiando:
Se muestra una salida similar al ejemplo siguiente:echo '@@sysproc:changepriority:* { printf ("%s priority changing from %llu to %llu\n",__pname,__chpriorityinfo->old_priority,__chpriorityinfo- >new_priority);}' | probevuexmgc priority changing from 60 to 17 xmgc priority changing from 17 to 60 xmgc priority changing from 60 to 17 xmgc priority changing from 17 to 60 xmgc priority changing from 60 to 17- Offreadyq
Este sondeo se inicia cuando se elimina una hebra de una cola de ejecución del sistema.
Sintaxis:
@@sysproc:offreadyq:<pid/tid/*>Special built-ins supported __readyprocinfo{ pid; <- process id of thread becoming ready tid; <- Thread id. priority; <- priority of the thread }Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Se ejecuta en un entorno de proceso o interrupción.
Caso de uso: Tiempo de rastreo que tarda una hebra que está realizando una operación de E/S para volver a la cola preparada.
Se muestra una salida similar al ejemplo siguiente:@@BEGIN { printf (" Pid Tid Time Delta\n"); } @@sysproc:offreadyq :* { ready[__tid] = timestamp(); printf ("offreadyq: %llu %llu %W\n",__readyprocinfo->pid,__readyprocinfo->tid,ready[__tid]); } @@sysproc:onreadyq :* { if (diff_time(ready[__tid],0,MICROSECONDS)) { auto:diff = diff_time (ready[__tid],timestamp(),MICROSECONDS); printf ("onreadyq : %llu %llu %W %llu\n",__readyprocinfo->pid,__readyprocinfo->tid,ready[__tid],diff); delete (ready,__tid); } }Pid Tid Time Delta offreadyq: 7799280 20709717 5s 679697µs onreadyq : 7799280 20709717 5s 679697µs 6 offreadyq: 7799280 20709717 5s 908716µs onreadyq : 7799280 20709717 5s 908716µs 3 offreadyq: 7799280 20709717 6s 680186µs onreadyq : 7799280 20709717 6s 680186µs 5 offreadyq: 7799280 20709717 6s 710720µs onreadyq : 7799280 20709717 6s 710720µs 4 offreadyq: 7799280 20709717 6s 800720µs onreadyq : 7799280 20709717 6s 800720µs 2 offreadyq: 7799280 20709717 6s 882231µs onreadyq : 7799280 20709717 6s 882231µs 2 offreadyq: 7799280 20709717 6s 962313µs onreadyq : 7799280 20709717 6s 962313µs 2 offreadyq: 7799280 20709717 6s 980311µs onreadyq : 7799280 20709717 6s 980311µs 2- onreadyq
Este sondeo se inicia cuando una hebra se pone en cola en la cola preparada del sistema o cuando se modifica su posición en la cola preparada.
Sintaxis:
@@sysproc:offreadyq:<pid/tid/*>Incorporados especiales soportados
__readyprocinfo{ pid; <- process id of thread becoming ready tid; <- Thread id. priority; <- priority of the thread }Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Se ejecuta en un entorno de proceso o interrupción.
- asignar
Este sondeo se inicia cuando se llama al asignador del sistema para seleccionar una hebra para que se ejecute en una CPU específica.
Sintaxis:
@@sysproc:dispatch:<pid/tid/*>Soporte incorporado especial
__dispatchinfo{ cpuid; <- CPU where selected thread will run. oldpid; <- pid of the thread currently running oldtid; <- thread id of the thread currently running oldpriority; <- priority of the thread currenly running newpid; <- pid of the new process process selected for running newtid; <- thread id of the thread selected for running newpriority; <-priority of the thread selected for running }Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Sólo se ejecuta en un entorno de interrupción.
Ejemplo
Se mostrará un resultado similar al ejemplo siguiente:print process thread id of old and selected thread on CPU '0' with dispatch time relative to start of the script echo '@@sysproc:dispatch:* when (__cpuid == 0){printf ("%llu %llu %W\n",__dispatchinfo->oldtid,__dispatchinfo->newtid,timestamp());}' | probevue24641983 20709717 0s 48126µs 20709717 23593357 0s 48164µs 23593357 20709717 0s 48185µs 20709717 23593357 0s 48214µs 23593357 20709717 0s 48230µs 20709717 23593357 0s 48288µs 23593357 261 0s 48303µs 261 20709717 0s 48399µs Example II Time spent on CPU '0' by threads in between dispatch event. @@BEGIN { printf ("Thread cpu Time-Spent\n"); } @@sysproc:dispatch:* when (__cpuid == $1) { if (savetime[__cpuid] != 0) auto:diff = diff_time (savetime[__cpuid],timestamp(),MICROSECONDS); else diff = 0; savetime[__cpuid] = timestamp(); printf ("%llu %llu %llu\n",__dispatchinfo->oldtid,__dispatchinfo->cpuid,diff); } # probevue cputime.e 6 Thread cpu Time-Spent 3146085 6 0 3146085 6 9995 3146085 6 10002 3146085 6 10008 3146085 6 99988 3146085 6 100006 3146085 6 99995 3146085 6 99989 3146085 6 100010 3146085 6 100001 3146085 6 100000 3146085 6 99998Como se puede observar, la hebra 3146085 se está reasignando en la CPU en un intervalo de 1sec en ausencia de cualquier otra hebra que compita por esta CPU.
- oncpu
Este analizador se inicia cuando un nuevo proceso o hebra adquiere CPU.
Sintaxis:
@@sysproc:oncpu:<pid/tid/*>Donde
pides el identificador de proceso ytides el identificador de hebra del proceso o hebra que está adquiriendo la CPU.Incorporados especiales soportados
__dispatchinfo{ cpuid; <- CPU where selected thread will run. newpid; <- pid of the new process process selected for running newtid; <- thread id of the thread selected for running newpriority; <-priority of the thread selected for running }Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Sólo se ejecuta en un entorno de interrupción.
Ejemplo
Se mostrará un resultado similar al ejemplo siguiente:To print time spent by threads of sysncd on all CPU's #!/usr/bin/probevue @@BEGIN { printf ("PROCESSID THREADID CPU TIME\n"); } @@sysproc:oncpu:$1 { savetime[__cpuid] = timestamp(); } @@sysproc:offcpu:$1 { if (savetime[__cpuid] != 0) auto:diff = diff_time (savetime[__cpuid],timestamp(),MICROSECONDS); else diff = 0; printf ("%llu %llu %llu %llu\n", __dispatchinfo->oldpid, __dispatchinfo->oldtid, __dispatchinfo->cpuid, diff); } # cputime.e `ps aux|grep syncd| grep -v grep| cut -f 6 -d " "`3735998 18612541 0 2 3735998 15663427 0 1 3735998 15073557 0 1 3735998 18743617 0 1 3735998 18874693 0 1 3735998 18809155 0 15 3735998 18940231 0 20 3735998 18547003 0 1 3735998 19267921 0 1 3735998 19071307 0 17 3735998 18678079 0 1 3735998 18481465 0 1 3735998 19202383 0 15 3735998 19005769 0 1 3735998 19136845 0 19 3735998 6160689 0 190- Offcpu
Este analizador se inicia cuando se asigna un proceso o hebra desde una CPU.
Sintaxis:
@@sysproc:dispatch:<pid/tid/*>Incorporados especiales soportados
__dispatchinfo{ cpuid; <- CPU where selected thread will run. newpid; <- pid of the new process process selected for running newtid; <- thread id of the thread selected for running newpriority; <-priority of the thread selected for running }Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Sólo se ejecuta en un entorno de interrupción.
hebra de bloque
Este analizador se inicia cuando se bloquea la ejecución de una hebra en una CPU. El bloqueo es una forma de dormir cuando una hebra duerme sin retener ningún recurso.
Sintaxis:
@@sysproc:blockthread:*Incorporados especiales soportados
__sleepinfo{ pid; tid; waitchan; <-- wait channel of this sleep. }Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Sólo se ejecuta en un entorno de interrupción.
- foldcpu
Este analizador se inicia cuando un núcleo de CPU está a punto de plegarse. Este sondeo no se produce en el contexto de proceso y no debe filtrarse con un pid o tid.
Sintaxis:
@@sysproc:foldcpu:*Incorporados especiales soportados
__foldcpuinfo{ cpuid; <- logical cpu id which triggers core folding gpcores; <- general purpose (unfolded, non-exclusive) cores available. }Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7.Ejemplo:
Para realizar un seguimiento de todos los sucesos de repliegue de CPU en el sistema:
__foldcpuinfo{ cpuid; <- logical cpu id which triggers core folding gpcores; <- general purpose (unfolded, non-exclusive) cores available. }- bindprocessor
Sintaxis:
@@sysproc:bindprocessor:<pid/tid/*>Este sondeo se inicia cuando una hebra o proceso está enlazado a una CPU. Bindprocessor es un suceso permanente y no debe confundirse con conmutadores de CPU temporales.
Incorporados especiales soportados
__bindprocessorinfo{ ispid <- 1 if cpu is bound to process; 0 for a thread id; <- thread or process id. cpuid; };Otras incorporaciones soportadas
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Se ejecuta en un entorno de proceso.
- Changecpu
Este analizador se inicia cuando una hebra cambia la CPU temporalmente. Es más probable que este suceso se capture durante sucesos de canalización de CPU o saltos intencionados de algunos sucesos de
kprocpara realizar tareas relacionadas con CPU (el procesoxmgcsalta a todas las CPU para gestionar almacenamientos dinámicos de kernel) incorporadas especiales.Sintaxis:
@@sysproc:changecpu:*>Incorporados especiales soportados
__changecpuinfo { oldcpuid; <-source CPU newcpuid; <- target CPU pid; tid; <-Thread id }Otros constructores soportados
__errno__kernelmode,__arg1 to __arg7,__curthread,__curproc,__mst,__tid,__pid,__ppid,__pgid,__uid,__euid.Entorno de ejecución
Se ejecuta en un entorno de proceso.
Ejemplo
Se mostrará un resultado similar al ejemplo siguiente:@@sysproc:changecpu:* { printf ("changecpu PID=%llu TID=%llu old_cpuid=%d new_cpuid= %d \n", __changecpuinfo->pid,__changecpuinfo->tid,__changecpuinfo->oldcpuid,__changecpuinfo->newcpuid); }changecpu PID=852254 TID=1769787 old_cpuid=26 new_cpuid= 27 changecpu PID=852254 TID=1769787 old_cpuid=-1 new_cpuid= 0 changecpu PID=852254 TID=1769787 old_cpuid=0 new_cpuid= 1 changecpu PID=852254 TID=1769787 old_cpuid=1 new_cpuid= 2- adjunción de recursos
Este sondeo se activa cuando un recurso está conectado a otro recurso del sistema.
Sintaxis:
@@sysproc:resourceattach:*>Incorporados especiales soportados
__srcresourceinfo{ type; subtype; id; <- resource type identifier offset; <-offset if a memory resource length; <- length if a memory resource policy; } __tgtresourceinfo{ type; subtype; id; <- resource type identifier offset; <-offset if a memory resource length; <- length if a memory resource policy; }Donde el tipo y el subtipo pueden tener uno de los valores siguientes.Tabla 7. El analizador resourceattach: valores de tipo y subtipo Tipo de recurso Descripción R_NADA Nada-especificación no válida R_PROCESO Proceso R_RSET Grupo de recursos RANGO_R_SUBREGLA Intervalo de memoria R_SHM Memoria Compartida R_FILDES Archivo identificado por un archivo abierto HEBRA Hebra R_IDSRAD Identificador SRAD R_PROCMEM Memoria de proceso Otros constructores soportados
__errno__kernelmode,__arg1 to __arg7,__mst.Entorno de ejecución
Se ejecuta en un entorno de proceso.
- desconexión de recursos
Este sondeo se activa cuando se desconecta un recurso de otro recurso del sistema.
Sintaxis:
@@sysproc:resourcedetach:*>Incorporados especiales soportados
__srcresourceinfo{ type; subtype; id; <- resource type identifier offset; <-offset if a memory resource length; <- length if a memory resource policy; } __tgtresourceinfo{ type; subtype; id; <- resource type identifier offset; <-offset if a memory resource length; <- length if a memory resource policy; }Donde el tipo y el subtipo pueden tener uno de los valores siguientes.Tabla 8. El analizador resourcedetach: valores de tipo y subtipo Tipo de recurso Descripción R_NADA Nada-especificación no válida R_PROCESO Proceso R_RSET Grupo de recursos RANGO_R_SUBREGLA Intervalo de memoria R_SHM Memoria Compartida R_FILDES Archivo identificado por un archivo abierto HEBRA Hebra R_IDSRAD Identificador SRAD R_PROCMEM Memoria de proceso Otros constructores soportados
__errno__kernelmode,__arg1 to __arg7,__mst,__tid,__pname.Entorno de ejecución
Se ejecuta en un entorno de proceso.
- drphasestart
Este analizador se activa cuando se está a punto de llamar a un manejador dr.
Sintaxis:
@@sysproc:drphasestart:*Incorporados especiales soportados
__drphaseinfo{ dr_operation; ← dr operation dr_flags; dr_phase; handler_rc; ← always 0 in drphasestart }dr_operation puede tener uno de los valores siguientes:
- Operación DR
- DR_RM_MEM_OPER
- DR_ADD_MEM_OPER
- DR_RM_CPU_OPER
- DR_ADD_CPU_OPER
- DR_CPU_SPARE_OPER
- DR_RM_CAP_OPER
- DR_ADD_CAP_OPER
- DR_RM_RESMEM_OPER
- DR_PMIG_OPER
- DR_WMIG_OPER
- DR_WMIG_CHECKPOINT_OPER
- DR_WMIG_RESTART_OPER
- DR_SOFT_RES_CHANGES_OPER
- DR_ADD_MEM_CAP_OPER
- DR_RM_MEM_CAP_OPER
- DR_CPU_AFFINITY_REFRESH_OPER
- DR_AME_FACTOR_OPER
- DR_PHIB_OPER
- DR_ACC_OPER
- DR_CHLMB_OPER
- DR_ADD_RESMEM_OPER
Los distintivos dr pueden ser una combinación de los valores siguientes:- Distintivo
- DRP_FORCE
- DRP_RPDP
- DRP_DOIT_SUCCESS
- PRE_DRP_REGISTRADO
- DRP_CPU DRP_MEM DRP_SPARE
- DRP_ENT_CAP
- DRP_VAR_WGT
- RESERVA_DRP
- DRP_PMIG DRP_WMIG
- DRP_WMIG_CHECKPOINT
- REINICIO_WMIG_DRP_
- Cambios de DRP_SOFT_RES_CHANGES
- DRP_MEM_ENT_CAP
- DRP_MEM_VAR_WGT
- DRP_CPU_AFFINITY_REFRESH
- FACTOR_NOMBRE_DRP
- DRP_PHIB
- DRP_ACC_UPDATE
- DRP_CHLMB
Otros constructores soportados
__errno__kernelmode,__arg1 to __arg7,__tidEntorno de ejecución
Se ejecuta en un entorno de proceso o interrupción.
Ejemplo