The OpenNET Project / Index page

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

Релиз системы динамической отладки SystemTap 2.1

14.02.2013 16:45

Представлен релиз системы динамической трассировки SystemTap 2.1, предоставляющий для платформы Linux средства похожие на технологию DTrace. SystemTap позволяет организовать доскональное наблюдение за работающей Linux системой, производить сбор статистики о работе приложений, профилирование и контроль системных вызовов. Управление производится через интерфейс командной строки и специальный Си-подобный язык сценариев. Система протестирована с ядрами Linux начиная с версии 2.6.9 и заканчивая 3.8-rc.

В развитии проекта участвуют такие компании как Red Hat, IBM, Intel, Hitachi и Oracle. В каталоге примеров представлено более 100 скриптов на все случаи жизни, подходящие для слежения за распределением памяти, вводом/выводом, дисковыми операциями, сетевым трафиком (например, анализ работы NFS), работой планировщика задач, обработкой прерываний, использованием системных буферов, установкой блокировок, выполнением системных вызовов, обработкой сигналов и т.п.

Основные улучшения в версии 2.1:

  • Изменения во фронтэнде (утилите stap):
    • Реализованы режимы редактирования файлов сценариев systemtap, работающие в стиле EMACS и VIM;
    • Транслятор теперь исключает дубликаты tapset-файлов, встречающиеся при наличии в системе нескольких наборов правил, что позволяет избежать конфликта при использовании нескольких установленных вариантов systemtap (например, поставляемого с системой и собранного вручную);
    • В транслятор добавлена поддержка опции "--suppress-time-limits" (работает в режиме гуру "-g"), при которой перестают действовать заданные в правилах ограничения, привязанные ко времени, что позволяет протестировать работу обработчика в любой момент времени, не дожидаясь нужного периода;
    • При выводе ошибок теперь упоминается дополнительная информация о характере проблемы, которую можно получить через man-руководства error::X и warning::X (например, man warning::432);
  • Улучшения в языке сценариев:
    • Данные о событиях, доступных через подсистему ядра Perf ("perf events") теперь можно читать по требованию. Проверки состояния счётчика могут быть определены в форме counter("NAME"), например "probe perf.type(0).config(0).counter("NAME")";
    • Проверки через подсистему Perf могут быть прикреплены к определённым процессам при помощи параметра process("NAME"), например "probe perf.type(0).config(0).process("NAME") { }";
    • В циклах foreach теперь может выполняться сортировка агрегированных массивов с использованием произвольной агрегатной функции, например "foreach ([x,y] in array @sum +) { println(@sum(array[x,y])) }";
    • Начальная реализация поддержки регулярных выражений, что позволяет выполнять такие сопоставления, как "if ("aqqqqqb" =~ "q*b") { ... }" или "if ("abc" !~ "q*b") { ... }". Реализация построена с использованием инструментария re2c и близка по возможностям и синтаксису к POSIX Extended Regular Expressions, используемому в glibc. Пока не реализованы возможности выделения частей строк и субвыражений, не поддерживаются именованные классы символов ([:alpha:], [:digit:], &c и т.п.);
  • Улучшена работа бэкенда dyninst, предоставляющего возможность анализа пользовательских процессов без необходимости загрузки специфичных модулей для ядра Linux и, соответственно, не требующего root-привилегий. Обеспечена поддержка параллельной обработки при проверке многопоточных программ. Обеспечено продолжение проверки после выполнения исследуемым процессом вызова fork. Добавлена поддержка новых типов проверок, таких как таймеры, возвращаемые функциями параметры, привязки к началу/концу выполнения процесса/нити. Добавлена поддержка трассировки уже запущенного процесса через указание опции "-x PID";
  • Добавлен тапсет choose_defined.stpm с реализацией макроса @choose_defined(). Объявлены устаревшими тапсеты signal.send.return и signal.handle.return;
  • Новые примеры использования SystemTap:
    • Примеры трассировки переведены на использование ppfunc() вместо probefunc();
    • perf.stp - использование perf.counter для доступа к параметрам производительности;
    • regex.stp - проверка имён открываемых файлов в соответствии с регулярным выражением;
    • threadstacks.stp - переопределяет используемые по умолчанию значения размера стека new-pthread;
    • mutex_contention.stp - анализ конкуренции mutex-ов в pthread;
    • ltrace.stp - демонстрация ltrace на базе uprobes;
    • pingpong.stp, block.stp, eater.stp, lifegame.stp - набор демонстрационных игр.


  1. Главная ссылка к новости (https://lkml.org/lkml/2013/2/1...)
  2. OpenNews: Релиз системы динамической отладки SystemTap 2.0
  3. OpenNews: Увидела свет система динамической трассировки SystemTap 1.8
  4. OpenNews: Релиз системы динамической отладки SystemTap 1.6
  5. OpenNews: Релиз системы динамической отладки SystemTap 1.2
  6. OpenNews: Анонсирован релиз системы динамической отладки SystemTap 1.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/36111-systemtap
Ключевые слова: systemtap, dtrace, trace, debug
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (21) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 17:19, 14/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Вот знаете, что прикольно? Как же сильно СПО болеет NIH.

    Сейчас, поясню, Шигорин.

    Изначально это был DTrace, написанный для динамических ядер Solaris - системы, произросшей от AT&T SysV.

    Что крестьяне - то и обезьяне: сказано-сделано, надо воспроизвесть у себе. Берем BSD-like монолит и лепим туда горбатого.

    Ну и что вышло, в финале каторжных интеллектуальных трудов?

     
     
  • 2.2, бедный буратино (ok), 17:32, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Как же сильно аноним болеет. Вкаждойбочкезатычизмом экспертного мнения.
     
  • 2.3, all_glory_to_the_hypnotoad (ok), 17:55, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    DTrace не СПО, балбес. И никак его нельзя засунуть в линуховое ядро. Ибо кроме лицензий на код есть ещё патенты на конкретную реализацию этой технологии.
     
     
  • 3.22, Xm8230 (?), 10:43, 16/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    >DTrace не СПО

    Вполне себе СПО, но опубликованно под CDDL. CDDL с вирусом GPL несовместимо, потому и родилась SystemTap под †православной† GPL.

     
  • 2.4, кевин (?), 18:02, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +5 +/
    так нагладно показывать собственную некомпетентость не умею даже я! 1:0 в твою пользу
     
  • 2.6, qux (ok), 18:07, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Изначально это был DTrace

    Откуда инфа?

     
  • 2.13, umbr (ok), 02:11, 15/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Лицензия у DTrace: CDDL and proprietary
     

  • 1.5, qux (ok), 18:07, 14/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто знает в чем проблема (почему одни адреса, без символов)?
    При первом запуске: WARNING: missing unwind/symbol data for module 'kernel'
    В /proc/kallsyms и /boot/System.map-* символы есть. Systemtap криво собран?

    [CODE]# stap --all-modules /usr/share/doc/systemtap-client-2.0/examples/memory/hw_watch_sym.stp vm_swappiness -c "echo 50 > /proc/sys/vm/swappiness"
    vm_swappiness value is accessed
    0xffffffff81068e6f
    0xffffffff8106956a (inexact)
    0xffffffff81069a18 (inexact)
    0xffffffff81068e40 (inexact)
    0xffffffff812032d3 (inexact)
    0xffffffff81203308 (inexact)
    0xffffffff81194a9c (inexact)
    0xffffffff81194de2 (inexact)
    0xffffffff8163515e (inexact)
    0xffffffff81639799 (inexact)[/CODE]

     
     
  • 2.7, ананим (?), 19:46, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Очевидно — нет символов.
    http://sourceware.org/systemtap/SystemTap_Beginners_Guide/using-systemtap.htm
    Дебагинфо нужны.
    Системмэп это не то.
     
     
  • 3.8, qux (ok), 21:14, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Но для трейса при панике есть же. Пусть бы генерило подобный.
    С -devel/-debuginfo попробую.
     
     
  • 4.17, qux (ok), 14:39, 15/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    На kernel-debug с установленным devel то же самое. Тащить еще 300мб (пожатого) -debuginfo не впечатляет.
    Странно это.
     
     
  • 5.18, Frank Ch. Eigler (?), 20:15, 15/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Hi.  If the script is still not working for you, please send some information about your computer to systemtap@sourceware.org, we'll try to help.  On my Fedora17 machine, with systemtap 2.1, this works:

    # stap --all-modules /usr/share/doc/systemtap-*/examples/memory/hw_watch_sym.stp vm_swappiness -c "echo 50 >/proc/sys/vm/swappiness"
    vm_swappiness value is accessed
    0xffffffff810673df : do_proc_dointvec_minmax_conv+0x2f/0x80 [kernel]
    0xffffffff81067f9a : __do_proc_dointvec.isra.6+0x10a/0x360 [kernel]
    0xffffffff81068448 : proc_dointvec_minmax+0x48/0x50 [kernel]
    0xffffffff811fcbb3 : proc_sys_call_handler.isra.11+0xb3/0xd0 [kernel]
    0xffffffff811fcbe8 : proc_sys_write+0x18/0x20 [kernel]
    0xffffffff811900cc : vfs_write+0xac/0x180 [kernel]
    0xffffffff811903fa : sys_write+0x4a/0x90 [kernel]
    0xffffffff81626e69 : system_call_fastpath+0x16/0x1b [kernel]

     
     
  • 6.19, qux (ok), 21:31, 15/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Cool, thank you! But before that I'd like to ensure that your case shall be reachable without installing kernel-debuginfo package. Otherwise that's just my bad setup.

    However I'm not sure in the latter because debuginfo isn't necessary for panic() traces, for example.

    I'm using Fedora 17 x64 (RFRemix, but it shouldn't affect the subject topic).

     
  • 5.20, Stax (ok), 21:44, 15/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    kernel-debug это совсем не то: это ядро, скомпилированное в отладочном режиме.
    Вам нужны именно -debuginfo (если мы говорим про федору, то пакеты kernel-версия-debuginfo и kernel-debuginfo-common-x86_64-версия).
     
     
  • 6.21, qux (ok), 22:09, 15/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > kernel-debug это совсем не то: это ядро, скомпилированное в отладочном режиме.

    Да, debug отличается доп. проверками, а debuginfo функциональность не затрагивает, это дополнительная информация к коду в пакете kernel(-debug) в данном случае. Это просто было всё, что можно, кроме собственно debuginfo (:

    > Вам нужны именно -debuginfo

    Тут уже писал, почему тогда трейсы при панике отображаются и без -debuginfo? Здесь ведь по идее такое же, строки исходников домешивать не надо (для чего могло бы быть нужно -debuginfo).

     
  • 3.9, ip1981 (ok), 21:33, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Того гляди, додумаются до CTF и нарушения ABI [1] :-)

    [1] http://wiki.illumos.org/display/illumos/GCC+Modifications

     

  • 1.10, mine (ok), 21:58, 14/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    чем это лучше lttng
     
     
  • 2.11, Мяут (ok), 22:32, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Он динамический (не надо рекомпилять ядро)
     
  • 2.12, ip1981 (ok), 22:43, 14/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    http://www.sourceware.org/systemtap/wiki/SystemtapDtraceComparison
     

  • 1.14, анонимус (??), 03:17, 15/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    DTrace лучше
     
     
  • 2.16, Аноним (-), 11:24, 15/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > DTrace лучше

    DTrace тащетма для ядра другого типа разработан. Об чем первый аноним и сообщил. И, также, заметил, что, скорее всего, прикрутили эту шнягу "шоб було как у людей".

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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