strace
LVEE 2016
Немного цифр
На LVEE 2013 три года назад был представлен обзор проекта strace с 1991 года до середины 2013 года1. Нынешний обзор охватывает значительно более короткий период с середины 2013 года по настоящее время, что позволяет рассказать о некоторых значимых событиях более подробно.
За минувшие три года было выпущено пять версий strace.
Периодичность выпусков постепенно сокращалась с одного раза в год
до одного раза в два-три месяца, одновременно с выпусками ядра Linux.
Интенсивность разработки за эти три года по сравнению с предыдущим
трехлетним периодом выросла в три раза, число авторов коммитов выросло в полтора раза, а число авторов 80% коммитов уменьшилось в два раза. Более подробно статистическая информация о коммитах и их авторах представлена в таблице.
Число коммитов и их авторов по версиям:
дата выпуска | номер версии | число коммитов | число авторов | число авторов 80% коммитов | |||
---|---|---|---|---|---|---|---|
всего | в год | прежних | всего | в год | |||
13.04.2010 | 4.5.20 | ||||||
15.03.2011 | 4.6 | 112 | 122 | 5 | 12 | 13 | 4 |
02.05.2012 | 4.7 | 400 | 353 | 3 | 11 | 10 | 2 |
03.06.2013 | 4.8 | 237 | 218 | 4 | 17 | 16 | 3 |
всего за период | 749 | 238 | 33 | 11 | 2 | ||
15.08.2014 | 4.9 | 247 | 206 | 4 | 22 | 18 | 3 |
06.03.2015 | 4.10 | 400 | 719 | 4 | 15 | 27 | 1 |
21.12.2015 | 4.11 | 586 | 737 | 5 | 15 | 19 | 1 |
31.05.2016 | 4.12 | 799 | 1804 | 5 | 16 | 36 | 1 |
26.07.2016 | 4.13 | 182 | 1182 | 4 | 6 | 39 | 1 |
всего за период | 2214 | 703 | 8 | 51 | 16 | 1 |
Что нового
Из наиболее заметных изменений можно отметить следующие нововведения и улучшения.
Добавлены новые параметры:
- -k (экспериментальный): печать стека вызовов функций трассируемых
процессов после каждого трассируемого системного вызова; - -w сбор статистики по времени, проведенному трассируемыми процессами в системных вызовах;
- -yy печать протокола и адреса, связанных с трассируемыми сокетами.
Реализована надежная трассировка процессов, использующих различные ABI ядра Linux, в частности, процессов x86 и x32 на x86_64.
Значительно расширена поддержка системного вызова ioctl.
Реализована поддержка всех системных вызовов, поддерживаемых ядром Linux 4.7.
Обнаружены и исправлены все известные на данный момент случаи не вполне корректного декодирования системных вызовов.
Система тестирования strace, в которой три года назад было 5 тестов,
значительно доработана и на данный момент состоит из 314 тестов, покрывающих более 72% строк исходного кода.
В работе
В рамках GSoC 2016 завершается работа над следующими проектами:
- Structured output: поддержка вывода в машиночитаемом виде в формате JSON;
- Netlink socket parsers: расширяемый парсер данных, передаваемых через сокеты семейства netlink;
- Fault injection: многофункциональный инжектор ошибок в системных
вызовах.
Подробнее об этих проектах можно узнать на сайте GSoC 2016 strace
projects2.
Не strace’ом единым
В процессе доработки системы тестирования strace были обнаружены и
исправлены ошибки в других свободных проектах, в частности,
- Linux kernel:
- неправильная работа модуля unix_diag3;
- неправильный номер системного вызова fgetxattr на архитектуре sh644;
- неправильный код возврата системного вызова personality на архитектуре sparc645;
- неправильный номер системного вызова restart_syscall для x32 ABI на архитектуре x86_646;
- неправильная реализация системных вызовов preadv2 и pwritev2 для x86 ABI на архитектуре x86_647;
- kernel panic на архитектуре parisc8;
- kernel panic на ядрах OpenVZ.
- GNU libc: некорректная обработка кода возврата системного вызова
personality9; - musl libc: некорректное поведение модификатора формата %o в семействе функций printf10.
1 LVEE 2013. strace from upstream point of view
3 unix_diag: fix incorrect sign extension in
unix_lookup_by_ino
5 sparc64: fix incorrect sign extension in
sys_sparc64_personality
6 x86/signal: Fix restart_syscall number for x32 tasks
7 x86: Use compat version for preadv2 and pwritev2
8 parisc: fix a bug when syscall number of tracee is __NR_Linux_syscalls
9 Fix linux personality syscall wrapper
10 fix printf regression with alt-form octal, default precision
Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license
Back