В ответ на сожаление Линуса Торвальдса об отсутствии для Linux
удобной и понятной обычным пользователям утилиты для задействования
современных возможностей Linux-ядра по трассировке программ, Томас
Глейкснер (Thomas Gleixner) представил
на суд разработчиков утилиту "trace". В отличие от усложненных
профессиональных инструментов, подобных утилите "perf", "trace"
отличается простотой использования и пригодностью для решения
повседневных задач. Утилита пока не оформлена в отдельный репозиторий и
требует загрузки Git-репозитория с деревом ядра.
По заявлению разработчика, несмотря на то, что возможности ядра
по трассировке программ за последние годы существенно возросли, так и
не удалось создать инструмент, сравнимый по своему удобству с такими
ветеранами, как strace, за исключением появления таких мощных
специализированных инструментов, как PowerTop и LatencyTop.
Утилита trace направлена на то, чтобы переломить сложившуюся ситуацию и
совместить легкость использования и мощь инфраструктуры профилирования
"perf".
Процесс работы с trace сводится к однократной трассировке
приложения, сохранению результатов в файл и последующему анализу
результатов: от генерации общих сводных отчетов до все более и более
глубокого погружения в детали, с возможностью задания фильтров для
выделения интересующих событий (системные вызовы, связанные с работой
процесса события (fork/clone/exit), mmap-события, работа планировщика
задач и т.п.). Особенностью утилиты является поддержка одновременной
трассировки одной и той же программы разными пользователями.
Из планов на будущее отмечается поддержка возможностей
трассировки, привязанных к отслеживанию сетевой и дисковой активности
приложения, поддержка команды 'trace diff' для наглядного сравнения
нескольких трассировок, реализация возможности инициирования
трассировки на лету по PID-идентификатору уже запущенного процесса.
Наиболее типичные стадии работы с trace:
- "trace record имя_программы" - создание файла trace.data с результатами трассировки программ и всех порожденных потомков;
- "trace summary" - вывод краткого суммарного обзора результатов трассировки;
- "trace report" - формирования детального отчета;
- "trace report process|io|fs" - детализация отчета в категории "управление процессом", ввод/вывод или файловые операций;
- "trace report -d 0.5" - вывод информации о событиях, выполнение которых заняло более 0.5 миллисекунд;
- "trace check" - проверка, какие из возможностей ядра по трассировке программ доступны в данный момент.
Из существенных отличий от утилиты strace называется: низкое влияние
на трассируемую программу; отображение аргументов системных вызовов в
шестнадцатеричном представлении, за исключением таких важных
аргументов, как имена файлов (trace не выполняет полное декодирование);
отслеживание обращения к недопустимым страницам памяти (pagefault);
возможность повторного анализа с новыми фильтрами и опциями. Источник
|