Анонсирован релиз системы динамической трассировки SystemTap 2.0, предоставляющий для платформы Linux средства похожие на технологию DTrace. SystemTap позволяет организовать доскональное наблюдение за работающей Linux системой, производить сбор статистики о работе приложений, профилирование и контроль системных вызовов. Управление производится через интерфейс командной строки и специальный Си-подобный язык сценариев. Система протестирована с ядрами Linux начиная с версии 2.6.9 и заканчивая 3.6.
В развитии проекта участвуют такие компании как Red Hat, IBM, Intel, Hitachi и Oracle. В каталоге примеров представлено более 100 скриптов на все случаи жизни, подходящие для слежения за распределением памяти, вводом/выводом, дисковыми операциями, сетевым трафиком (например, анализ работы NFS), работой планировщика задач, обработкой прерываний, использованием системных буферов, установкой блокировок, выполнением системных вызовов, обработкой сигналов и т.п.
Основные улучшения версии 2.0:
- Добавлен новый бэкенд dyninst, предоставляющий возможность анализа пользовательских процессов без необходимости загрузки специфичных модулей для ядра Linux и соответственно не требуя root-привилегий. Реализация в пространстве пользователя накладывает ряд ограничений, в частности, поддерживается только ограниченный набор контрольных вызовов (probes). Напомним, что начиная с ядра Linux 3.5 поддержка проверки приложений пространства пользователя с использованием SystemTap может осуществляться из коробки — все необходимые дополнения включены в состав ядра.
Для выбора бэкенда в утилиту stap добавлена опция «—runtime», позволяющая выбирать между использованием функциональности уровня ядра («—runtime=kernel») и реализацией «dyninst» («—runtime=dyninst»). Для разделения функциональности бэкндов kernel и dyninst реорганизовано размещение tapset-ов, которые теперь разделены на две директории: специфичные для ядра Linux tapset-ы сохранены в директории linux/, а независимые от ядра в директории dyninst/;
- Улучшения в языке сценариев:
- В препроцессор языка сценариев SystemTap добавлена подсистема для работы с макросами, определяемыми через конструкцию «@define». Использование макросов допустимо в пользовательских скриптах и в stp-файлах, при этом макрос видим только внутри файла в котором он определён. Для создания глобальных макросов реализована возможность создания библиотек макросов, хранимых в файлах «.stpm».
- Обеспечена возможность использования псевдонимов контрольных вызовов (probe alias) с указанием дополнительных суффиксов, которые формируют имена целевых контрольных вызовов, для которых был создан псевдоним. Например, псевдоним «probe foo = bar, baz { }» при обращении как «probe foo.subfoo.option(«gronk») { }» приведёт к вызову bar.subfoo.option(«gronk») и baz.subfoo.option(«gronk»). Практический пример упрощения операций профилирования за счёт использования псевдонимов представлен в файле alias_suffixes.stp;
- Добавлена поддержка условных переходов, позволяющих выбирать код для выполнения в зависимости от уровня привилегий;
- Реализована операция склеивания разделённых строк, независимо от наличия разделяющих строки пробелов и комментариев. Например, строка «foo » /* comment */ «bar» будет воспринята как «foo bar»;
- Добавлены средства для диагностики крахов ядра, базирующиеся на использовании функции panic_notifier_list для вывода состояния во время краха;
- Добавлен новый tapset «linux/panic.stp», задействующий функцию ядра panic();
- В tapset linux/netfilter.stp добавлена поддержка ARP-пакетов;
- В tapset-ы backtrace/unwind добавлена возможность произвольного доступа к отдельным элементам backtrace. Среди добавленных в tapset-ы backtrace/unwind новых функций: stack/ustack, callers/ucallers, print_syms/print_usyms и sprint_syms/sprint_usyms;