LINUX.ORG.RU

SystemTap 2.5

 , ,


1

2

SystemTap — средство, которое позволяет собирать и анализировать информацию о работающей Linux-системе, производить сбор статистики о работе приложений, профилирование и контроль системных вызовов. Управление производится через интерфейс командной строки и специальный Си-подобный язык сценариев. В разработке проекта SystemTap участвуют такие компании как Red Hat, IBM, Oracle Corporation, Hitachi.

Неполный список изменений:

  • Изменения во фронтэнде (утилите stap):
    • Поддержка работы на системах с UEFI SecureBoot с поддержанием ключей верификации силами размещённого в сети доверительного SystemTap-сервера;
    • Возможность выполнения контрольных проверок во время загрузки, благодаря подстановке проверочных модулей на раннем этапе загрузки (поддерживаются системы с dracut). Для выполнения проверок во время загрузки представлена команда onboot
    • При выполнении DWARF-проверок обеспечена возможность использования '.callee|s|' для более точного исследования функций. Например, если конструкция process(«myproc»).function(«foo»).callee(«bar») сработает только при вызове функции bar() из foo(), то process(«myproc»).function(«foo»).callees сработает для всех вызовов;
    • Новые опции для инспектирования содержимого установленных библиотек: «stap --dump-functions» выведет весь список функций и их аргументы, «stap --dump-probe-aliases» покажет все псевдонимы контрольных проверок для библиотеки;
    • Увеличена скорость и точность выполнения контрольных проверок выражений (process.statement) для развёрнутых (inline) функций;
    • Улучшены эвристические алгоритмы, используемые для поиска завершения пролога функции;
    • В случае недоступности debuginfo проверка функций в процессах теперь откатывается на использование символьных таблиц;
    • Увеличена точность и лаконичность сообщений об ошибках несоответствия типов;
    • При отсутствии указанных меток обеспечен вывод подсказок с уточнением наиболее вероятного варианта, например, при указании process(«stap»).mark(«benchmart») предлагается использовать метку 'benchmark';
  • Улучшения в языке сценариев:
    • Поддержка условного выражения «%( guru_mode == 0 %)» или «%( guru_mode == 1 %)» для организации двойного использования скриптов;
    • Во встроенных функциях на Си можно использовать STAP_RETURN(value) вместо перехода «goto out» и назначения STAP_RETVALUE;
    • Функции |s|println() теперь могут быть вызваны без аргументов, что приведёт к выводу символа новой строки;
  • Добавлена поддержка обратной трассировки (backtracing) через задействование специального модуля;
  • Добавлен новый псевдоним проверки «oneshot» для быстрого выполнения фрагмента скрипта и выхода.

>>> Подробности

★★

Проверено: mono ()

Отличная штука! Порой, пишу стаповских портянок больше, чем сишного кода.

mv ★★★★★ ()
Ответ на: комментарий от mv

А stap уже безопасный? Когда я им интересовался в последний раз, он мог завалить систему. Кстати дистр, где он используется, redhat-подобный?

Array ()
Ответ на: комментарий от anonymous

Например, сделав нативную С вставку в скрипт в которой забыть освободить или наоборот залочить необходимый ресурс.

Ну или попытаться запробить критическое место в ядре. Обработчик прерываний, например.

Собственно, список того, что не рекомендуется делать с помощью systemtap в ядре есть в доках.

MATPOCKUH ()
Ответ на: комментарий от kto_tama

Например, для анализа потребления ресурсов конкретным приложением (память, дисковое или сетевое i/o, кол-во открытых файлов и т.п.)

Большинство доступных тулзов работать с конкретными процессами или деревьями процессов не умеют.

MATPOCKUH ()
Ответ на: комментарий от mv

Для простых вещей - да. А потом все равно приходится писать модуль ядра с нуля, т.к. сишный код у stap ужасен.

MATPOCKUH ()
Ответ на: комментарий от Array

А stap уже безопасный? Когда я им интересовался в последний раз, он мог завалить систему.

Ковыряясь в ядре всегда можно это ядро завалить. Наличие безопасного скриптового языка не освобождает от ответственности понимать хотя бы основы.

Кстати дистр, где он используется, redhat-подобный?

SLES-11 и RHEL-6.

mv ★★★★★ ()
Ответ на: комментарий от kto_tama

кто и зачем им пользуются ?

Часто это выявление утечек ресурсов. Стап умеет call trace в юзерспейсе обходить, таким образом нашли, какой тред и какая функция не освобождает файловый дескриптор в жирном процессе (2 гб RSS, ~7k тредов).

Но ещё чаще с его помощью исследую поведение системы, что чем вызывается, и в какй момент, и какое состояние в этот момент. Ещё удобно прототип накидать.

mv ★★★★★ ()
Ответ на: комментарий от mv

Можно ли с помощью SystemTap делать подмену вызова одной функции другой?

Например, у меня есть функция f1, которую я хочу протестировать. Из нее делается вызов malloc и я хочу с помощью SystemTap при вызове malloc из f1 на самом деле вызывать my_alloc, который сделает что мне надо и вернет управление в f1 куда надо. Т.е. делать вызов stub'ов и mock'ов для целей тестирования, но без изменения исходников тестируемого проекта.

x_hash ()
Ответ на: комментарий от x_hash

systemtap для этого не нужен.

man ld.so на предмет LD_PRELOAD.

mv ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.