扩展系统调用探针管理器 (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 探针管理器支持的系统调用

下表列出了 syscall 探针管理器支持的系统调用以及内核中的实际入口名称。
注: 此处提供的内核条目名称仅用于文档目的。 不同发行版中的内核入口名称会有所不同,而且在服务更新后,此名称也会有所不同。
表 1. 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_SELFPV_PROBEVUE_TRC_USER 特权指定给 WPAR,且会向 WPAR 系统上的超级用户(root 用户)授予这些特权。 全局分区的管理用户可更改缺省 WPAR 特权集的值,也可以在创建 WPAR 时显式指定其他特权。

WPAR 上的特权与全局分区上特权的含义大致相同。 将 PV_PROBEVUE_TRC_KERNELPV_PROBEVUE_TRC_MANAGE 指定给 WPAR 时须谨慎。 任何具有 PV_PROBEVUE_TRC_KERNEL 特权的用户都可以访问全局内核变量,而具有 PV_PROBEVUE_TRC_MANAGE 特权的用户可以更改 ProbeVue 参数的值或关闭 ProbeVue。 这些更改会影响所有用户,甚至是那些其他分区中的用户。

在 WPAR 中发出 probevue 命令时,WPAR 看不到其他 WPAR 或全局分区中运行的进程。 由于此原因,您只能调查同一 WPAR 中的进程。 如果调查规范包含其分区外的进程标识,那么 probevue 命令将失败。 WPAR 中的 PV_PROBEVUE_TRC_USERPV_PROBEVUE_TRC_SYSCALL 特权仅允许您调查 WPAR 中进程的用户空间函数或系统调用。 调查系统调用时,syscall 调查规范的第二个字段必须设为有效的 WPAR 可视进程标识。 不支持将值 * 指定给第二个字段。

在移动 WPAR 中启动 ProbeVue 会话时,它会临时将 WPAR 切换到不可检查点状态。 在 ProbeVue 会话终止后, WPAR 可再次设置检查点。