В ответ на сожаление Линуса Торвальдса об отсутствии для 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); возможность повторного анализа с новыми фильтрами и опциями.

Источник: http://www.opennet.ru/opennews/art.shtml?num=28688