Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) (Batch edit: replace PCRE (\n\n)+(\n) with \2) |
||
(не показана одна промежуточная версия этого же участника) | |||
;{{SpeakerInfo}}: {{Speaker|Дмитрий Левин}}
<blockquote>
strace — инструмент для отслеживания и влияния на взаимодействия
пользовательских процессов и ядра Linux: системных вызовов, сигналов
и изменений состояния процесса. За минувший год в strace реализовано
много нового и интересного.
</blockquote>
{{VideoSection}}
{{vimeoembed|366003840|800|450}}
{{youtubelink|GlCHevCaAa0}}
{{SlidesSection}}
[[File:Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019).pdf|left|page=-|300px]]
{{----}}
== Thesis == Так, исходный код тестов strace, с помощью которого, помимо всего прочего, было найдено множество ошибок в ядре linux и других проектах, теперь распространяется на условиях GNU General Public License v2+. Остальная часть strace распространяется на условиях GNU Lesser General Public License v2.1+. * [[Modern strace (Дмитрий Левин, OSSDEVCONF-2018)]] * [[Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017)]] * [[Can strace make you fail? (Дмитрий Левин, OSSDEVCONF-2016)]] {{----}} [[File:{{#setmainimage:Strace 2019 (Дмитрий Левин, OSSDEVCONF-2019)!.jpg}}|center|640px]] {{LinksSection}} <!-- <blockquote>[©]</blockquote> --> {{vklink|1476}} {{fblink|2543714589214880}} <references/> [[Категория:OSSDEVCONF-2019]] [[Категория:Strace]] {{stats|disqus_comments=0|refresh_time=2021-08-25T01:57:3231T16:37:51.651518434585|vimeo_plays=123|youtube_comments=0|youtube_plays=14}}5}} |
Текущая версия на 12:19, 4 сентября 2021
- Докладчик
- Дмитрий Левин
strace — инструмент для отслеживания и влияния на взаимодействия пользовательских процессов и ядра Linux: системных вызовов, сигналов и изменений состояния процесса. За минувший год в strace реализовано много нового и интересного.
Содержание
Видео
Презентация
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+.
- Modern strace (Дмитрий Левин, OSSDEVCONF-2018)
- Strace — новые возможности (Дмитрий Левин, OSSDEVCONF-2017)
- Can strace make you fail? (Дмитрий Левин, OSSDEVCONF-2016)
Примечания и ссылки
Plays:158 Comments:0