Компанията Oracle публикува DTrace за Linux 2.0.0-1.14

Представен експериментален вариант инструмента за динамична отладка DTrace за Linux 2.0.0-1.14, реализиран като работещ в пространството на потребителя процес, използващ подсистемата eBPF и вградените механизми за трасировка, предоставени от ядрото на Linux. По функционалност реализацията на DTrace на базата на eBPF е близка до първата реализация на DTrace за Linux, извършена под формата на модул на ядрото. Кодът на проекта се разпространява под лицензия GPLv2.

Инструментариумът може да се използва със стандартни ядра на Linux, които поддържат BPF. За работа е необходима библиотека libctf с реализация на поддръжка на отладъчния формат CTF (Compact Type Format), която е включена в пакета binutils от версия 2.40 или библиотека libdtrace-ctf, портирована от Solaris. Офертата включва два патча за ядро 6.7, позволяващи активиране на разширени функции за получаване на допълнителни данни за модулите и ядрото.

Технологията DTrace е разработена за решаване на задачи по динамична трасировка на ядрото и крайните приложения в операционната система Solaris. DTrace дава на потребителя възможност да проследява детайлно поведението на системата и в реално време да извършва диагностика на проблеми. По време на отладката DTrace не влияе на работата на изследваните приложения и не оказва влияние на тяхната производителност, което позволява анализ на работещите системи на живо. Сред силните страни на DTrace се отличава високоуровневият език D, подобен на AWK, на който е значително по-лесно да се създават сценарии за трасировка, отколкото при използването на предлаганите за eBPF инструменти за написване на обработчици на езици C, Python и Lua с външни библиотеки.

Основни възможности:

  • Налични провайдери:
    • cpc (CPU Performance Counter) — получаване на информация за производителността.
    • dtrace — обработчици BEGIN, END и ERROR, които се стартират преди или след други проверки, както и при възникване на грешки.
    • fbt (Function Boundary Tracing) — проследяване на повиквания към функции на ядрото.
    • lockstat — проследяване на състоянието на блокировки.
    • pid — проследяване на повиквания към функции в процеси, работещи в пространството на потребителя.
    • proc — проследяване на активността, свързана с процесите, като стартиране и приключване на работа (fork, exec, exit, fault).
    • profile — запазване на статистика за производителността през определени интервали от време.
    • sdt, rawtp — статичен трасер на ядрото (SDT — Statically Defined Tracing).
    • usdt: статичен трасер на приложения (USDT — Userspace Statically Defined Tracing)
    • sched — проследяване на разпределението на ресурсите на CPU.
    • sycall — проследяване на влизането в системни повиквания и излизането от тях.
  • Агрегиране на събирани данни: възможност за прилагане на агрегатни функции (avg, count, llquantize, lquantize, max, min, quantize, stddev и sum) и агрегатни действия (clear, normalize, normalize, printa). Поддръжка за запазване на резултатите от прилагането на агрегатни функции в обикновени и асоциативни масиви.
  • Поддръжка на спекулативно трасерене, позволяващо еферно проследяване на данни, решавайки кои от тях да бъдат записани в буфера за трасерене, а кои да бъдат отхвърлени. Достъпни функции: speculation, speculate, commit и discard.
  • Поддръжка на глобални и локални променливи, TLS (Thread-Local Storage), асоциативни масиви и низове.
  • Предоставяне на вградени променливи: arg0 — arg9, args[], caller, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stackdepth, tid, timestamp, ucaller, uid, uregs[], ustackdepth, walltimestamp.
  • Поддръжка на действия: exit, freopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack и usym.
  • Наличие на вградени функции: alloca, basename, bcopy, copyin, copyinstr, copyinto, copyout, copyoutstr, dirname, getmajor, getminor, htonl, htonll, htons, index, inet_ntoa, lltostr, mutex_owned, mutex_owner, mutex_type_adaptive, mutex_type_spin, ntohl, ntohll, ntohs, progenyof, rand, rindex, rw_iswriter, rw_read_held, rw_write_held, strchr, strjoin, strlen, strrchr, strstr, strtok, substr.
  • Наличие на броячи за данни, които не попада в буферите за трасерене.
  • Поддръжка на компилиране на сценарии за трасерене на езика D в форма на BPF-програми.
  • Предкомпилация на функции BPF за библиотечни повиквания.
  • Опция bpflog за получаване на лог за верификация на заредените програми BPF.
  • Динамично генериране на код и предкомпилация на код за повторна употреба в BPF-програми.

Промени в новата версия:

  • В провайдера pid, прилаган за проследяване на процеси в пространството на потребителя, добавена е поддръжка на проследяване на изпълнението на инструкции по техните offset в кода.
  • Добавена е поддръжка на използването на функциите stack() и ustack() за агрегирането на събираните данни.
  • Възможност за премахване на елементи от асоциативни масиви с всякакви типове чрез присвояване на литерал 0.
  • Добавено действие print за изход на структурирани данни с анотации на типове.
  • Добавени нови вградени функции cleanpath(), d_path() и link_ntop().
  • Добавен параметър «-xcpu», позволяващ привързването на проверки към определени CPU.
  • Добавен параметър «-xlockmem» за ограничаване на размера на паметта.
  • Обезпечена е възможността за запазване на данни от трасировка на процеси (USDT) между перезапуски на dtprobed.
  • Подкрепа на механизма BTF (BPF Type Format), предоставящ информация за проверка на типове в псевдокодовете BPF.
  • Възможност за използване на скрипт configure за компилация.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster