Анонсирован релиз системы динамической трассировки 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-привилегий. Напомним, что начиная с ядра Linux 3.5 поддержка проверки приложений пространства пользователя с использованием SystemTap может осуществляться из коробки - все необходимые дополнения включены в состав ядра. Реализация в пространстве пользователя накладывает ряд ограничений на dyninst, в частности, поддерживается только ограниченный набор контрольных вызовов (probes).
Для выбора бэкенда во фронтэнде 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-ы новых функций: stack/ustack, callers/ucallers, print_syms/print_usyms и sprint_syms/sprint_usyms;