扩展系统调用探针管理器 (syscallx)
换言之,syscallx 探针管理器允许跟踪所有基本系统调用。 基本系统调用是核心和基本核心扩展导出的一组系统调用,它们在引导开始以后立即可用。 不支持从可能稍后装入的核心扩展导出的系统调用。 可以通过探针点元组指定特定系统调用或全部系统调用。 但是,与 syscall 探针管理器不同,syscallx 的探针点元组的第三个字段必须标识实际核心入口点函数。 如果进程标识如探针点元组的第二个字段中所指定,那么 syscallx 探针管理器还限制调查在特定进程中触发。
下面是几个示例:
/* Probe point tuple to probe the read system call entry for all processes */
@@syscallx:*:kread:entry
/* Probe point tuple to probe the fork system call exit for process with ID 434 */
@@syscallx:434:kfork:exit
/* Probe point tuple to probe entry for all base system calls */
@@syscallx:*:*:entry
/* Probe point tuple to probe exit for all base system calls for process 744 */
@@syscallx:744:*:exit
syscall 探针管理器支持的系统调用
| 系统调用名称 | 内核入口名称 |
|---|---|
| absinterval | absinterval |
| accept | accept1 |
| 绑定 (bind) | 绑定 (bind) |
| 关闭 | 关闭 |
| creat | creat |
| execve | execve |
| exit | _exit |
| fork | kfork |
| getgidx | getgidx |
| getgroups | getgroups |
| getinterval | getinterval |
| getpeername | getpeername |
| getpid | _getpid |
| getppid | _getppid |
| getpri | _getpri |
| getpriority | _getpriority |
| getsockname | getsockname |
| getsockopt | getsockopt |
| getuidx | getuidx |
| incinterval | incinterval |
| kill | kill |
| 侦听 (listen) | 侦听 (listen) |
| lseek | klseek |
| mknod | mknod |
| mmap | mmap |
| mq_close | mq_close |
| mq_getattr | mq_getattr |
| mq_notify | mq_notify |
| mq_open | mq_open |
| mq_receive | mq_receive |
| mq_send | mq_send |
| mq_setattr | mq_setattr |
| mq_unlink | mq_unlink |
| msgctl | msgctl |
| msgget | msgget |
| msgrcv | __msgrcv |
| msgsnd | __msgsnd |
| nsleep | _nsleep |
| 打开 | kopen |
| pause | _pause |
| 管道 (pipe) | 管道 (pipe) |
| plock | plock |
| 轮询 (poll) | _poll |
| 读 | kread |
| 重新引导 | 重新引导 |
| recv | _erecv |
| recvfrom | _enrecvfrom |
| recvmsg | _erecvmsg |
| 选择 (select) | _select |
| sem_close | _sem_close |
| sem_destroy | sem_destroy |
| sem_getvalue | sem_getvalue |
| sem_init | sem_init |
| sem_open | _sem_open |
| sem_post | sem_post |
| sem_unlink | sem_unlink |
| sem_wait | _sem_wait |
| semctl | semctl |
| semget | semget |
| semop | __semop |
| semtimedop | __semtimedop |
| send | _esend |
| sendmsg | _esendmsg |
| sendto | _esendto |
| setpri | _setpri |
| setpriority | _setpriority |
| setsockopt | setsockopt |
| setuidx | setuidx |
| shmat | shmat |
| shmctl | shmctl |
| shmdt | shmdt |
| shmget | shmget |
| 关闭 | 关闭 |
| sigaction | _sigaction |
| sigpending | _sigpending |
| sigprocmask | sigprocmask |
| sigsuspend | _sigsuspend |
| 套接字 | 套接字 |
| socketpair | socketpair |
| stat | statx |
| waitpid | kwaitpid |
| 写入 | kwrite |
在 WPAR 中运行
工作负载分区或 WPAR 是AIX®操作系统单个实例中的虚拟化操作系统环境。 WPAR 环境与标准 AIX 操作系统环境略有不同。
在 WPAR 环境中支持动态跟踪。 缺省情况下,创建 WPAR 时,仅会将 PV_PROBEVUE_TRC_USER_SELF 和 PV_PROBEVUE_TRC_USER 特权指定给 WPAR,且会向 WPAR 系统上的超级用户(root 用户)授予这些特权。 全局分区的管理用户可更改缺省 WPAR 特权集的值,也可以在创建 WPAR 时显式指定其他特权。
WPAR 上的特权与全局分区上特权的含义大致相同。 将 PV_PROBEVUE_TRC_KERNEL 或 PV_PROBEVUE_TRC_MANAGE 指定给 WPAR 时须谨慎。 任何具有 PV_PROBEVUE_TRC_KERNEL 特权的用户都可以访问全局内核变量,而具有 PV_PROBEVUE_TRC_MANAGE 特权的用户可以更改 ProbeVue 参数的值或关闭 ProbeVue。 这些更改会影响所有用户,甚至是那些其他分区中的用户。
在 WPAR 中发出 probevue 命令时,WPAR 看不到其他 WPAR 或全局分区中运行的进程。 由于此原因,您只能调查同一 WPAR 中的进程。 如果调查规范包含其分区外的进程标识,那么 probevue 命令将失败。 WPAR 中的 PV_PROBEVUE_TRC_USER 和 PV_PROBEVUE_TRC_SYSCALL 特权仅允许您调查 WPAR 中进程的用户空间函数或系统调用。 调查系统调用时,syscall 调查规范的第二个字段必须设为有效的 WPAR 可视进程标识。 不支持将值 * 指定给第二个字段。
在移动 WPAR 中启动 ProbeVue 会话时,它会临时将 WPAR 切换到不可检查点状态。 在 ProbeVue 会话终止后, WPAR 可再次设置检查点。