Администратор тестов расширенных системных вызовов (syscallx)

Администратор тестов syscallx позволяет отследить все системные вызовы. Базовые системные вызовы - это набор системных вызовов, экспортируемый ядром и его базовыми расширениями, и доступный сразу после загрузки. Не поддерживаются системные вызовы, загружаемые уже после загрузки системы. В кортеже тестовой точки может быть указан отдельный системный вызов или же все вызовы. В отличие от администратора тестов syscall, третье поле кортежа тестовой точки для syscallx должно указывать фактическую функцию точки входа ядра. Если ИД процесса указан во втором поле кортежа тестовой точки, то администратор тестов syscallx ограничивает число активируемых тестов для данного процесса.

Примеры:

/* Кортеж тестовой точки для тестирования системного вызова read для всех процессов */
@@syscallx:*:kread:entry
/* Кортеж тестовой точки для тестирования системного вызова fork для процесса 434 */
@@syscallx:434:kfork:exit
/* Кортеж тестовой точки для тестирования точки входа всех системных вызовов */
@@syscallx:*:*:entry
/* Кортеж тестовой точки для тестирования точки входа всех системных вызовов для процесса 744 */
@@syscallx:744:*:exit

Системные вызовы, поддерживаемые администратором тестов syscall

В следующей таблице перечислены системные вызовы, поддерживаемые администратором тестов syscall, вместе с фактическими именами точек входа ядра.
Прим.: Имя точки входа ядра приводится здесь только в целях документации. Имена точек входа ядра могут отличаться в разных выпусках или даже изменяться после служебного обновления.
Табл. 1. Системные вызовы, поддерживаемые администратором тестов syscall
Имя системного вызова Имя точки входа ядра
absinterval absinterval
accept accept1
bind bind
close close
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
open kopen
pause _pause
pipe pipe
plock plock
poll _poll
read kread
reboot reboot
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
socket socket
socketpair socketpair
stat statx
waitpid kwaitpid
write kwrite

Запуск в WPAR

Разделы рабочей схемы (WPAR) - это виртуальные среды операционной системы, работающие под управлением одного экземпляра реальной операционной системы AIX. Среда WPAR некоторым образом отличается от стандартной среды операционной системы AIX.

В среде WPAR поддерживается динамическая трассировка. По умолчанию при создании WPAR этому разделу WPAR будут присвоены только привилегии PV_PROBEVUE_TRC_USER_SELF и PV_PROBEVUE_TRC_USER, причем эти права доступа будут предоставлены администратору (root) системы WPAR. Пользователь admin из глобального раздела может изменить значение набора привилегий WPAR, задаваемое по умолчанию, или может явным образом присвоить дополнительные права доступа при создании WPAR.

Привилегии в разделе WPAR обычно имеют такое же смысловое значение, как и в глобальном разделе. Следует проявлять осторожность при присвоении привилегий PV_PROBEVUE_TRC_KERNEL или PV_PROBEVUE_TRC_MANAGE разделу WPAR. Любой пользователь с правами доступа PV_PROBEVUE_TRC_KERNEL может обратиться к глобальным переменным ядра, а пользователь с правами доступа PV_PROBEVUE_TRC_MANAGE может изменить значения параметров ProbeVue или завершить работу ProbeVue. Эти изменения отразятся на всех пользователях, даже из других разделов.

При вводе команды probevue в разделе WPAR в нем будут невидимы процессы, запущенные в других WPAR или в глобальном разделе. Поэтому можно тестировать процессы только в собственном WPAR. Команда probevue не будет выполнена, если в спецификации теста содержится ИД процесса, выполняемого за пределами данного раздела. Права доступа PV_PROBEVUE_TRC_USER и PV_PROBEVUE_TRC_SYSCALL в разделе WPAR позволяют тестировать только функции пользовательского пространства или системные вызовы процессов, выполняемых в собственном WPAR. При тестировании системных вызовов необходимо во втором поле спецификации теста syscall указать допустимый ИД процесса, видимого в разделе WPAR. Использование значения * во втором поле не поддерживается.

Если сеанс ProbeVue инициирован в мобильном WPAR, то выполняется временное переключение WPAR в состояние, не допускающее использование контрольных точек. После завершения сеанса ProbeVue в разделе WPAR опять можно использовать контрольные точки.