Компания Oracle за работата по предаването на свързани с DTrace промени в upstream и плановете за реализиране на технологията за динамично отстраняване на грешки DTrace върху стандартната инфраструктура на ядрото на Linux, а именно с използването на такива подсистеми, като eBPF. Първоначално основният проблем с използването на DTrace в Linux беше несъвместимостта на ниво лицензии, но през 2018 година компания Oracle кода на DTrace под GPLv2.
DTrace вече се предлага в състава на разширеното ядро за дистрибуцията на Oracle Linux, но за собствената си употреба в други дистрибуции изисква прилагането на допълнителни патчи за ядрото, което ограничава използването на посочената технология. Като пример, компания Oracle предлага подробна инструкция за инсталиране и използване на DTrace в Fedora Linux. За инсталация е необходима сборка и използването на ядрото на Linux, пререконструирано с . За автоматизиране на изпълнението на сборката на ядрото с патчове на Oracle и Fedora е предложен .
eBPF представлява вграден в ядрото на Linux интерпретатор на байткод, който позволява създаването на обработчици на мрежови операции, проследяване на работата на системите, прихващане на системни повиквания, контрол на достъпа, обработка на събития с запазване на хронометраж (perf_event_open), броене на честотата и времето за изпълнение на операциите, извършване на трасировка с помощта на kprobes/uprobes/tracepoints. Чрез прилагането на JIT-компилация, байткодът в движение се трансформира в машинни инструкции и се изпълнява с производителността на нативен код. DTrace може да бъде реализиран върху eBPF, подобно на начините, по които съществуват съществуващите инструменти за трасировка.
Технология DTrace е разработена за операционната система Solaris, за да решава задачи по динамично трасиране на ядрото на системата и крайните приложения, давайки на потребителя възможност за детайлно проследяване на поведението на системата и извършване на диагностика на проблеми в реално време. В процеса на отстраняване на грешки DTrace не влияе на работата на изследваните приложения и по никакъв начин не се отразява на тяхната производителност, което позволява анализ на работещите системи в движение. Сред силните страни на DTrace е високостойностният език D, подобен на AWK, с който значително по-лесно се създават сценарии за трасиране, отколкото при използването на предоставените за eBPF средства за писане на обработчици на езици като C, Python и Lua с външни библиотеки.
Инженерите от Oracle също работят над създаването на eBPF-бекенд за GCC и вече са публикували за интеграцията на поддръжка на eBPF в GCC и включат код за поддръжка на eBPF в GNU binutils. Първоначално бекендът за поддръжка на eBPF се базира на технологии LLVM, но компанията Oracle се интересува от внедряване на стандартна функционалност за генериране на програми за eBPF в GCC, което ще позволи използването на един инструментариум както за компилиране на ядрото на Linux, така и за компилиране на програми за eBPF.
Освен бекенд за генериране на байткод, предложените за GCC пачове също включват порт на libgcc за eBPF и средства за формиране на ELF файлове, които дават възможност за изпълнение на код в виртуалната машина eBPF с използването на предоставените от ядрото заредители. В байткода засега може да се трансформира код на езика C (не всички възможности на езика са налични), но в бъдеще се очаква разширение на наличните за приложение функции на езика C, добавяне на поддръжка за други езици, създаване на симулатор и добавяне на поддръжка на GCC за отстраняване на грешки в eBPF програми без зареждане в ядрото.
Източник: opennet.ru
