Tracing/USDT
Userland Statically Defined Tracing
Некоторый софт позволяет добавлять статические точки трассировки (трейспоинты) для удобства его отладки, улучшая т.н. observability системы. Например, такая поддержка есть у многих интерпретаторов скриптовых языков, MySQL, gRPC.
Сборка пакета с поддержкой
Маинтайнеру зачастую достаточно сделать два изменения spec'а: 1) добавить
BuildRequires: systemtap-sdt-devel
который приносит Си хедер <sys/sdt.h>
, и 2) добавить соответствующую опцию configure
, например (её название может отличаться):
%configure --enable-dtrace
В результате — в коде в точке трассировке добавляется один 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'