Представлен (https://lkml.org/lkml/2013/5/20/691) первый выпуск проекта ktap (https://github.com/ktap/ktap), в рамках которого развивается новая система динамической трассировки работы ядра Linux, предоставляющая собственный скриптовый язык для создания сценариев. Сценарии могут быть использованы как для автоматизации выявления узких мест, так и для изменения параметров работы ядра. При этом возможности не ограничиваются мелким тюнингом, скрипты ktap могут использоваться для изменения поведения систем ядра и даже для реализации дополнительной функциональности.
От существующих систем, таких как SystemTap и DTrace, ktap отличается иной архитектурой и другими принципами организации выполнения скриптов трассировки. Скрипты преобразуются (https://github.com/ktap/ktap/blob/master/doc/design.txt) в байткод, загружаемый и выполняемый уже работающим центральным модулем ktap, что не требует сборки и загрузки отдельных модулей ядра из расчёта отдельный модуль для каждого из сценариев трассировки. Байткод выполняется внутри специальной регистровой виртуальной машины ktapvm (подобный подход близок к DTrace и отличается от SystemTap, в котором используется транслятор). Байткод является универсальным и может быть использован без пересборки в ядрах на системах с различной архитектурой, т.е. скрипт может быть собран и проверен на ПК разработчика и потом выполнен на встраиваемом устройстве на базе другой процессорной архитектуры.
Синтаксис (https://github.com/ktap/ktap/blob/master/doc/syntax.txt) языка сценариев напоминает язык Си и отличается в основном методом объявления переменных (в ktap используются динамические переменные, без явного объявления), поддержкой вместо массивов табличных структур (хэши ключ/значение, позволяющие указывать t["key"] = 10), отсутствием необходимости завершения строки знаком ';'. Замедление работы ядра при активации ktap не превышает 10%, после интеграции JIT в виртуальную машину ktapvm паразитную нагрузку планируется свести к 3-5%.Первый выпуск ktap пока доступен только для 32- и 64-разрядных систем x86. Среди поддерживаемых возможностей отмечается поддержка установки точек трассировки (tracepoints), анализ работы системных вызовов, использование контрольных проверок kprobes и kretprobes, отслеживание вызова обработчиков событий от таймера, оценка состояния стека. Для использования в скриптах поставляется встроенная библиотека функций (https://github.com/ktap/ktap/blob/master/doc/library.txt) для упрощения работы с различными низкоуровневыми механизмами трассировки.
Код проекта распространяется (https://github.com/ktap/ktap) под лицензией GPL и оформлен в виде модуля для ядра Linux. Система может использоваться с ядрами начиная с версии 3.4 (ядро должно быть собрано с опциями CONFIG_EVENT_TRACING, CONFIG_PERF_EVENTS, CONFIG_KPROBES и CONFIG_KALLSYMS) и не требует применения дополнительный патчей для кода ядра.Пример (https://github.com/ktap/ktap/blob/master/doc/examples.txt) простой функции трассировки системных вызовов:
<font color="#461b7e">
function eventfun (e) {
printf("%d %d\t%s\t%s", cpu(), pid(), execname(), e.tostring())
}
kdebug.probe("tp:syscalls", eventfun)kdebug.probe_end(function () {
printf("probe end\n")
})
</font>
URL: https://lkml.org/lkml/2013/5/20/691
Новость: http://www.opennet.me/opennews/art.shtml?num=36991
признавайтесь, кто тут шутил про питон в ядре?
Пока там только виртуальная машина, работающая с байткодом, а не полноценный интерпритатор.
python не слыхал, а вот про lua в ядре NetBSD слыхал
Дык это и есть Lua, только с присобаченным GPL заголовком. Сравни https://github.com/ktap/ktap/blob/master/opcode.c с http://www.lua.org/source/5.1/lopcodes.c.html и найди 10 отличий :)
Ого, прикольно, а почему в новости об этом ни слова?
Опять новый язык придумали. Могли же просто Lua/LuaJIT интергировать, как NetBSD.
> Опять новый язык придумали.Потому что логично ОС писанную на си отлаживать с использованием си-подобного ЯП :)
А почему не shell-подобного?
> А почему не shell-подобного?Наверное поттому что психов которые бы на этом рискнули написать ядро ОС пока не замечено...
>Замедление работы ядра при активации ktap не превышает 10%А как происходит активация? modprobe ktap?
сам спросил - сам ответил
>отсутствием необходимости завершения строки знаком ';'.Ну откуда в людях такая ненависть к этому символу, и почему всем так хочется нагрузить перенос смысловым значением, а не оставить просто элементом форматирования?
просто парит их постоянно ставить
Еще людей парит начинать предложение с большой буквы, ставить в конце точку и другие знаки препинания. В результате текст становится не читаемым, зато писать легко.
> Еще людей парит начинать предложение с большой буквы, ставить в конце точку
> и другие знаки препинания. В результате текст становится не читаемым, зато
> писать легко.
>не читаемымну ты понел
> Еще людей парит начинать предложение с большой буквы, ставить в конце точку
> и другие знаки препинания. В результате текст становится не читаемым, зато
> писать легко.А правильно писать частицу "не" вас не парит?
>> Еще людей парит начинать предложение с большой буквы, ставить в конце точку
>> и другие знаки препинания. В результате текст становится не читаемым, зато
>> писать легко.
> А правильно писать частицу "не" вас не парит?это должно было быть приставкой
заглавная буква в начале предложения действительно не нужна. если, конечно, хороший шрифт, и запятая визуально отличается от точки.впрочем, если кому-то без заглавных жизнь не мила, то это легко и автоматически правится элементарным скриптом, который почти никогда не ошибается. в отличие от правописания («не читаемым», ага) и знаков препинания.
А
еще
можно
вместо
пробелов
переводы
строки
использовать.Скрипт
тоже
элементарно
пишется.
(пожимает плечами) можно. используй. разрешаю.
Спасибо!
> (пожимает плечами) можно. используй. разрешаю.хорошая
однако
идея
надо
будет
взять
на
вооружение
А еЩе МоЖнО вОт ТаК!11
А какие пробы использует systemtap? Те же (kprobes) или собственные?А то ведь одного языка мало, надо еще во все подсистемы ядра пробы насовать, чтобы он заработал.
ftrace, но главное т.н. function boundary tracing - т.е. трассировка границ функции (как правило точки входа). Вокруг него построены алиасы (тапсеты)Вообще SystemTap умеет любую инструкцию/строчку кода
Т.е. kprobes к systemtap не относятся?
Да не, вроде бы самостоятельная система, к которой умеет цепляться SystemTap
Скоро на этом будут писать кроссплатформенные драйвера для железяк.
> Скоро на этом будут писать кроссплатформенные драйвера для железяк.Драйвера в лине и так кроссплатформенные. В том плане что драйвер какого-нибудь 3G свистка на usb совершенно без проблем взлетит и на ARM или MIPS каком-нибудь. Вообще совсем без переделки, приколитесь? :)
кде баг. Символично
Всегда говорил, что плазма падает из-за багов в ядре, а Аарон не виноватый :)
Плазма не падает!
Отличная новость, похоже всё-таки будет на Linux система, которую можно хотя бы и с оглядкой, но всё же использовать в production.
А Вы все еще вывариваете?
Мы не готовы ронять продакшн.
http://dtrace.org/blogs/brendan/2011/10/15/using-systemtap/
> А Вы все еще вывариваете?Он уже выварил свой череп до состояния анатомического препарата.
А какие широкие возможности для руткитописателей.Теперь и на Lua!
Про модель безопасности не слова в новости.
Легкий пересказ design.txt проектаНеожиданно узнаем, что по экспертному мнению создателей сабжа православный SystemTap сливает рассово чуждому DTrace. Но DTrace, гадина такая, совсем не встраивается в Linux. В Solaris встраивается, во FreeBSD встраивается, а в Linux - ну никак. Ясное дело - бясовкая коприрастая на дух не переносит святаго GPL-нага коду. Зато более мощный язык сабжа (внезапно) легко может быть встроен в ядро. Чудеса.
Врешь http://ru.wikipedia.org/wiki/Debian_GNU/kFreeBSD