Выход ktap 0.2, системы динамической трассировки для ядра Linux
1 августа 2013 года
Представлен второй выпуск проекта ktap, в рамках которого развивается новая система динамической трассировки работы ядра Linux, предоставляющая собственный скриптовый язык для создания сценариев. Сценарии могут быть использованы как для автоматизации выявления узких мест, так и для изменения параметров работы ядра. В том числе, скрипты ktap могут использоваться для изменения поведения систем ядра и даже для реализации дополнительной функциональности. Код проекта распространяется под лицензией GPL и оформлен в виде модуля для ядра Linux (поддерживаются ядра начиная с ветки 3.1), не требующего применения дополнительный патчей.
От существующих систем, таких как SystemTap и DTrace, ktap отличается иной архитектурой и другими принципами организации выполнения скриптов трассировки. Скрипты преобразуются в байткод, загружаемый и выполняемый уже работающим центральным модулем ktap, что не требует сборки и загрузки отдельных модулей ядра из расчёта отдельный модуль для каждого из сценариев трассировки. Байткод выполняется внутри специальной регистровой виртуальной машины ktapvm, которая является форком быстрой и эффективной виртуальной машины Lua. Байткод является универсальным и может быть использован без пересборки в ядрах на системах с различной архитектурой, т.е. скрипт может быть собран и проверен на ПК разработчика и потом выполнен на встраиваемом устройстве на базе другой процессорной архитектуры. Применение виртуальной машины для выполнения байткода напоминает подход DTrace и отличается от SystemTap, в котором используется транслятор.
Синтаксис языка сценариев напоминает язык Си и отличается в основном методом объявления переменных (в ktap используются динамические переменные, без явного объявления), поддержкой вместо массивов табличных структур (хэши ключ/значение, позволяющие указывать t["key"] = 10), отсутствием необходимости завершения строки знаком ';'. Замедление работы ядра при активации ktap не превышает 10%, после интеграции JIT в виртуальную машину ktapvm паразитную нагрузку планируется свести к 3-5%.
В новой версии расширены возможности скриптового языка, добавлен новый синтаксис для определения блоков трассировки (ключевые слова trace и trace_end), задания фильтров трассировки, трассировки функций и использования uprobe/uretprobe. В утилиту ktap добавлены средства для написания однострочников, например, "ktap -e 'trace "syscalls:*" function (e) { print(e) }'". Унифицирован интерфейс для взаимодействия с подсистемой ядра perf. Проведена оптимизация производительности. В дополнение к ранее поддерживаемым 32- и 64-разрядным системам x86, в новом выпуске появилась поддержка архитектур ARM и PowerPC, а также обеспечена возможность работы совместно с ядром preempt-rt.
Из возможностей также отмечается поддержка установки точек трассировки (tracepoints), анализ работы системных вызовов, использование контрольных проверок kprobes, uprobe и kretprobes, отслеживание вызова обработчиков событий от таймера, оценка состояния стека. Для использования в скриптах поставляется встроенная библиотека функций для упрощения работы с различными низкоуровневыми механизмами трассировки.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.