Tracing/USDT: различия между версиями

Материал из ALT Linux Wiki
(more configure options)
Строка 10: Строка 10:
который приносит Си хедер <code><sys/sdt.h></code>, и 2) добавить соответствующую опцию <code>configure</code>, например (её название может отличаться):
который приносит Си хедер <code><sys/sdt.h></code>, и 2) добавить соответствующую опцию <code>configure</code>, например (её название может отличаться):
   %configure --enable-dtrace
   %configure --enable-dtrace
Другие варианты: <code>--with-dtrace</code>, <code>--enable-systemtap</code>, <code>--with-systemtap</code>.


В результате — в коде в точке трассировке добавляется один <code>nop</code> не влияющий на производительность при отключенной трассировке, а в ELF бинарник в секцию <code>.note.stapsdt</code> записывается описание каждого трейспоинта и его аргументов. Проверить их наличие можно командой <code>eu-readelf --notes=.note.stapsdt ''путь-к-бинарнику''</code>. Пример для трейспоинта с именем ''example:test'' (имеющим один аргумент) и находящимся в бинарнике ''./example'':
В результате — в коде в точке трассировке добавляется один <code>nop</code> не влияющий на производительность при отключенной трассировке, а в ELF бинарник в секцию <code>.note.stapsdt</code> записывается описание каждого трейспоинта и его аргументов. Проверить их наличие можно командой <code>eu-readelf --notes=.note.stapsdt ''путь-к-бинарнику''</code>. Пример для трейспоинта с именем ''example:test'' (имеющим один аргумент) и находящимся в бинарнике ''./example'':

Версия от 11:58, 14 октября 2022

Userland Statically Defined Tracing

Некоторый софт позволяет добавлять статические точки трассировки (трейспоинты) для удобства его отладки в сложных местах где трудно сделать другие виды трассировки, улучшая т.н. observability системы.

Например, такая поддержка есть у некоторых языков (java, perl, php, python, ruby, tcl, nodejs, dotnet), приложений (mariadb, postgresql, couchdb, systemd-udev, sssd, ceph), библиотек (grpc, glibc, glib, zlib). У нас эти пакеты пока собраны без такой поддержки и требуют её включения.

Сборка пакета с поддержкой

Маинтайнеру зачастую достаточно сделать два изменения spec'а: 1) добавить

 BuildRequires: systemtap-sdt-devel

который приносит Си хедер <sys/sdt.h>, и 2) добавить соответствующую опцию configure, например (её название может отличаться):

 %configure --enable-dtrace

Другие варианты: --with-dtrace, --enable-systemtap, --with-systemtap.

В результате — в коде в точке трассировке добавляется один nop не влияющий на производительность при отключенной трассировке, а в ELF бинарник в секцию .note.stapsdt записывается описание каждого трейспоинта и его аргументов. Проверить их наличие можно командой eu-readelf --notes=.note.stapsdt путь-к-бинарнику. Пример для трейспоинта с именем example:test (имеющим один аргумент) и находящимся в бинарнике ./example:

 $ eu-readelf --notes=.note.stapsdt ./example
 
 Note section [30] '.note.stapsdt' of 68 bytes at offset 0x3174:
   Owner          Data size  Type
   stapsdt               45  Version: 3
     PC: 0x1153, Base: 0x2004, Semaphore: 0
     Provider: example, Name: test, Args: '8@%rax'