Компания 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, по аналогии с тем, как поверх eBPF работают существующие инструменты трассировки.

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

Инженеры из Oracle также работают над созданием eBPF-бэкенда для GCC и уже опубликовали набор патчей для интеграции поддержки eBPF в GCC и добились включения кода для поддержки eBPF в GNU binutils. Изначально бэкенд для поддержки eBPF основывается на технологиях LLVM, но компания Oracle заинтересована в появлении в GCC штатной возможности генерации программ для eBPF, что позволит использовать один инструментарий как для сборки ядра Linux, так и для сборки программ для eBPF.

Кроме бэкенда для генерации байткода предложенные для GCC патчи также включают порт libgcc для eBPF и средства для формирования ELF-файлов, дающие возможность выполнить код в виртуальной машине eBPF с использованием предоставляемых ядром загрузчиков. В байткод пока может транслироваться код на языке Си (не все возможности языка доступны), но в будущем ожидается расширение доступных для применения возможностей языка Си, добавление поддержки других языков, создание симулятора и добавление поддержки GCC для отладки eBPF-программ без загрузки в ядро.