The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выход ktap 0.2, системы динамической трассировки для ядра Linux

01.08.2013 10:35

Представлен второй выпуск проекта 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, отслеживание вызова обработчиков событий от таймера, оценка состояния стека. Для использования в скриптах поставляется встроенная библиотека функций для упрощения работы с различными низкоуровневыми механизмами трассировки.

  1. Главная ссылка к новости (https://lkml.org/lkml/2013/7/3...)
  2. OpenNews: Релиз системы динамической отладки SystemTap 2.1
  3. OpenNews: Компания Oracle представила первый стабильный релиз DTrace для Linux
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/37563-ktap
Ключевые слова: ktap, trace, debug, kernel, linux
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (18) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 12:25, 01/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Какое-то жалкое подобие DTrace.
     
     
  • 2.3, Аноним (-), 14:03, 01/08/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Так оно и есть, плюсую
     
  • 2.7, Аноним (-), 16:47, 01/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А почему "жалкое"?
     
     
  • 3.11, Аноним (-), 19:04, 01/08/2013 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Нищебродское подделие наперсточников
     

  • 1.2, XVilka (ok), 13:41, 01/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Нигде почему-то не упомянуто, что байткод выполняется в виртуальной машине, 1-в-1 повторяющей виртуальную машину Lua. Сравните https://github.com/lua/lua/blob/master/src/lvm.c и https://github.com/ktap/ktap/blob/master/interpreter/vm.c
    Смотреть функции static void ktap_execute(ktap_state *ks) и void luaV_execute (lua_State *L).
     
     
  • 2.4, Прохожий (??), 14:40, 01/08/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Нигде почему-то не упомянуто, что байткод выполняется в виртуальной машине, 1-в-1
    > повторяющей виртуальную машину Lua

    Ну почему же нигде. На сайте в README.md: "simple but powerful script language(forked by lua, proven to be fast)"

     
     
  • 3.5, XVilka (ok), 16:05, 01/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Да, не заметил :(
     

  • 1.6, YetAnotherOnanym (ok), 16:10, 01/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Офигеть, куда Lua пролез...
     
     
  • 2.10, LuaSysDeveloper (?), 18:47, 01/08/2013 [^] [^^] [^^^] [ответить]  
  • +/
    (пошел менять работу, с Haskell на Lua!)
     

  • 1.8, Аноним (-), 17:15, 01/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    понятно теперь на чем вирусы для линукса будут писать.
     
     
  • 2.9, Аноним (-), 17:54, 01/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вирусы для линукса исторически пишутся на сях.
    Но, к сожалению, не работают. И это проблема вызвана не ЯП, а юниксовым механизмом разграничения доступа.
     
     
  • 3.12, анончик (?), 22:41, 01/08/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Вирусы для линукса исторически пишутся на сях.
    > Но, к сожалению, не работают. И это проблема вызвана не ЯП, а
    > юниксовым механизмом разграничения доступа.

    работают с привилегиями пользователя

     
     
  • 4.13, arisu (ok), 01:33, 02/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > работают с привилегиями пользователя

    а что, пользователям до сих пор дом и /tmp монтируют без noexec? ну, ССЗБ.

     
     
  • 5.14, Kott (??), 03:26, 02/08/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зачем дом монтировать в noexec?
     
     
  • 6.16, arisu (ok), 13:39, 02/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Зачем дом монтировать в noexec?

    а зачем «обычному юзеру» права на исполнение чего-либо в доме? «обычный юзер» даже скрипты не пишет, у него от одного вида терминала начинается синдром «немоугнеумеюнезнаюнехочудайтекнопачку!»

     
  • 3.15, Андрей (??), 05:54, 02/08/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ограничение доступа?
    Где в этом смысл? Мне, как пользователю важно не потерять свои файлы, а не файлы рута/системы.
     
     
  • 4.17, arisu (ok), 13:41, 02/08/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ограничение доступа?
    > Где в этом смысл? Мне, как пользователю важно не потерять свои файлы,
    > а не файлы рута/системы.

    но при этом ты таки скачал непонятный бинарь из непонятного источника и запустил? сам виноват. система выживет. а неосторожный пользователь… его проблемы. сколько раз говорили же: не тяни в рот что попало!

     

  • 1.18, Аноним (-), 05:43, 09/08/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    http://nginx.org/en/docs/nginx_dtrace_pid_provider.html#see_also
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру