Firma Oracle o pracy nad przekazywaniem zmian związanych z DTrace do upstream oraz planach realizacji technologii dynamicznego debugowania DTrace na standardowej infrastrukturze jądra Linux, a mianowicie z wykorzystaniem takich podsystemów jak eBPF. Początkowym problemem z używaniem DTrace w Linux była niekompatybilność na poziomie licencji, jednak w 2018 roku firma Oracle kod DTrace na GPLv2.
DTrace już jest dostępny w ramach rozszerzonego jądra dla dystrybucji Oracle Linux, jednak do jego używania w innych dystrybucjach wymaga zastosowania dodatkowych patchy do jądra, co ogranicza stosowanie tej technologii. Jako przykład, firma Oracle opracowała szczegółową instrukcję instalacji i użycia DTrace w Fedora Linux. Aby zainstalować, należy zbudować i zastosować jądro Linux, przebudowane z . Aby zautomatyzować proces budowy jądra z patchami Oracle i Fedora, zaproponowano .
eBPF to wbudowany w jądro Linux interpreter bajtkodów, który pozwala na tworzenie handlerów operacji sieciowych, monitorowanie pracy systemów, przechwytywanie wywołań systemowych, kontrolowanie dostępu, obsługę zdarzeń z zachowaniem pomiaru czasowego (perf_event_open), zliczanie częstotliwości i czasu wykonywania operacji, realizację śledzenia z użyciem kprobes/uprobes/tracepoints. Dzięki zastosowaniu kompilacji JIT, bajtkod jest w locie przekształcany w instrukcje maszynowe i wykonywany z wydajnością kodu natywnego. DTrace może być realizowany na eBPF, podobnie jak istniejące narzędzia do śledzenia. Technologia DTrace została opracowana dla systemu operacyjnego Solaris w celu dynamicznego śledzenia jądra systemu oraz końcowych aplikacji, dając użytkownikowi możliwość szczegółowego monitorowania zachowania systemu i diagnostyki problemów w czasie rzeczywistym. W procesie debugowania DTrace nie wpływa na działanie badanych aplikacji i w żaden sposób nie wpływa na ich wydajność, co pozwala na przeprowadzenie analizy działających systemów w locie. Do mocnych stron DTrace należy wyspecjalizowany język D, podobny do AWK, w którym znacznie łatwiej tworzyć skrypty śledzenia niż przy użyciu proponowanych dla eBPF narzędzi do pisania handlerów w językach C, Python i Lua z zewnętrznymi bibliotekami.
Technologia DTrace została opracowana dla systemu operacyjnego Solaris w celu rozwiązywania problemów związanych z dynamicznym śledzeniem jądra systemu oraz końcowych aplikacji, dając użytkownikowi możliwość szczegółowego monitorowania zachowania systemu i diagnozowania problemów w czasie rzeczywistym. W trakcie debugowania DTrace nie wpływa na działanie badanych aplikacji ani nie wpływa na ich wydajność, co pozwala na analizę działających systemów w locie. Do mocnych stron DTrace należy wysoko poziomowy język D, przypominający AWK, który znacznie ułatwia tworzenie skryptów śledzenia w porównaniu do narzędzi oferowanych dla eBPF do pisania obsługi w językach C, Python i Lua z zewnętrznymi bibliotekami.
Inżynierowie z Oracle pracują również nad stworzeniem backendu eBPF dla GCC i już opublikowali dla integracji wsparcia eBPF w GCC i dodanie kodu wspierającego eBPF w GNU binutils. Początkowo backend dla wsparcia eBPF oparty jest na technologiach LLVM, ale firma Oracle jest zainteresowana wprowadzeniem w GCC natywnej możliwości generowania programów dla eBPF, co pozwoli na użycie jednego narzędzia zarówno do kompilacji jądra Linux, jak i programów dla eBPF.
Oprócz backendu do generowania kodu bajtowego, zaproponowane dla GCC poprawki zawierają również port libgcc dla eBPF oraz narzędzia do tworzenia plików ELF, które umożliwiają uruchamianie kodu w wirtualnej maszynie eBPF z użyciem loaderów dostarczanych przez jądro. Kod w języku C (nie wszystkie możliwości języka są dostępne) może być na razie tłumaczony na kod bajtowy, ale w przyszłości oczekiwane jest poszerzenie dostępnych funkcji języka C, dodanie wsparcia dla innych języków, stworzenie symulatora oraz dodanie wsparcia GCC dla debugowania programów eBPF bez ładowania do jądra.
Źródło: opennet.ru
