Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019)

Материал из 0x1.tv

Докладчик
Дмитрий Левин.jpg
Дмитрий Левин

strace — инструмент для отслеживания и влияния на взаимодействия пользовательских процессов и ядра Linux: системных вызовов, сигналов и изменений состояния процесса. За минувший год в strace реализовано много нового и интересного.

Видео

on youtube

Презентация

Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf

Thesis

Введение

strace как инструмент мониторинга взаимодействия пользовательских процессов с ядром существует уже почти 28 лет и широко применяется для диагностики, отладки и изучения поведения ПО. Многочисленные параметры управления фильтрацией дают возможность пользователю strace легко и гибко настраивать отображение системных вызовов и сигналов. С каждым выпуском strace таких возможностей становится больше, а точность отображения — выше.

Начиная с версии 4.13, выпущенной в июле 2016 года, расписание выпусков новых версий strace синхронизировано с расписанием выпусков новых версий ядра linux. Таким образом новые интерфейсы, добавляемые в релизы ядра linux, сопровождаются соответствующими парсерами, добавляемыми в релизы strace.

Помимо многочисленных улучшений отображения системных вызовов, за минувший год в strace было реализовано много нового и интересного.

seccomp-assisted system call filtering

В strace версии 5.3, выпущенной в сентябре 2019 года, реализована фильтрация системных вызовов с помощью интерфейса seccomp ядра linux. При указании параметра -n strace автоматически создаёт bpf-программу для фильтрации системных вызовов. Такой способ фильтрации снижает на два порядка накладные расходы обработки тех системных вызовов, которые не подлежат трассировке.

System call return status filtering

В strace версии 5.2, выпущенной в июле 2019 года, добавлена фильтрация системных вызовов по коду возврата:

  • общий случай: strace -e status=set
  • только завершившиеся успешно: strace -z
  • только завершившиеся неудачно: strace -Z

Поддержка интерфейса PTRACE_GET_SYSCALL_INFO

В strace версии 4.26, выпущенной в декабре 2018 года, реализована поддержка нового интерфейса PTRACE_GET_SYSCALL_INFO ядра linux, который позволяет надежно различать 64-битные и 32-битные системные вызовы на архитектуре x86-64. strace переключается на использование этого интерфейса автоматически, если ядро linux его поддерживает. Интерфейс PTRACE_GET_SYSCALL_INFO доступен в ядре linux начиная с версии 5.3.

Поддержка новых системных вызовов

Множество системных вызовов, для которых реализованы детальные парсеры, расширено и соответствует ядру linux версии 5.3, включая в себя новые системные вызовы:

5.3
pidfd_open, clone3
5.2
open_tree, move_mount, fsopen, fsconfig, fsmount, fspick
5.1
clock_gettime64, clock_settime64, clock_adjtime64, clock_getres_time64, clock_nanosleep_time64, timer_gettime64, timer_settime64, timerfd_gettime64, timerfd_settime64, utimensat_time64, pselect6_time64, ppoll_time64, io_pgetevents_time64, recvmmsg_time64, mq_timedsend_time64, mq_timedreceive_time64, semtimedop_time64, rt_sigtimedwait_time64, futex_time64, sched_rr_get_interval_time64, pidfd_send_signal, io_uring_setup, io_uring_enter, io_uring_register

Лицензия

Условия распространения strace изменились с permissive на copyleft.

Так, исходный код тестов strace, с помощью которого, помимо всего прочего, было найдено множество ошибок в ядре linux и других проектах, теперь распространяется на условиях GNU General Public License v2+.

Остальная часть strace распространяется на условиях GNU Lesser General Public License v2.1+.

Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019)!.jpg

Примечания и ссылки

Plays:158   Comments:0