Oracle zamierza przerobić DTrace dla systemu Linux przy użyciu eBPF

Firma Oral zgłoszone o pracach nad przeniesieniem zmian związanych z DTrace do upstream i planach wdrożenia technologii dynamicznego debugowania DTrace na bazie standardowej infrastruktury jądra Linuksa, a mianowicie z wykorzystaniem podsystemów takich jak eBPF. Początkowo głównym problemem związanym z używaniem DTrace na Linuksie była niekompatybilność na poziomie licencji, ale w 2018 roku Oracle ponownie licencjonowany Kod DTrace na licencji GPLv2.

Już DTrace długi czas oferowany jest jako część rozszerzonego jądra dla dystrybucji Oracle Linux, jednak do wykorzystania w innych dystrybucjach wymaga użycia dodatkowych łatek jądra, co ogranicza wykorzystanie tej technologii. Na przykład Oracle przygotowany szczegółowe instrukcje dotyczące instalacji i używania DTrace w Fedorze Linux. Do instalacji wymagany jest montaż narzędzia oraz użycie jądra Linuksa przebudowanego z łaty. Proponuje się zautomatyzowanie wykonywania budowania jądra za pomocą poprawek Oracle i Fedora scenariusz.

eBPF to interpreter kodu bajtowego wbudowany w jądro Linuksa, który pozwala tworzyć procedury obsługi operacji sieciowych, monitorować działanie systemu, przechwytywać wywołania systemowe, kontrolować dostęp, przetwarzać zdarzenia z pomiarem czasu (perf_event_open), zliczać częstotliwość i czas wykonywania operacji, wykonywać śledzenie za pomocą kprobes /uprobes /tracepoints. Dzięki zastosowaniu kompilacji JIT kod bajtowy jest na bieżąco tłumaczony na instrukcje maszynowe i wykonywany z wydajnością kodu natywnego. DTrace można zaimplementować na eBPF, podobnie jak jest to implementowane na eBPF działają istniejące narzędzia śledzenia.

Technologia DTrace została opracowana dla systemu operacyjnego Solaris w celu rozwiązania problemu dynamicznego śledzenia jądra systemu i aplikacji końcowych, dając użytkownikowi możliwość szczegółowego monitorowania zachowania systemu i diagnozowania problemów w czasie rzeczywistym. Podczas procesu debugowania DTrace nie wpływa na działanie badanych aplikacji i w żaden sposób nie wpływa na ich wydajność, co pozwala na organizowanie analizy działających systemów na bieżąco. Jedną z mocnych stron DTrace jest wysoki poziom języka D, podobny do AWK, w którym znacznie łatwiej jest tworzyć skrypty śledzące niż korzystać z narzędzi oferowanych do pisania handlerów eBPF w C, Python i Lua z zewnętrznymi bibliotekami.

Inżynierowie z Oracle pracują również nad stworzeniem backendu eBPF dla GCC i już opublikowali zestaw łatek zintegrować wsparcie eBPF z GCC i osiągnięty łącznie z kodem obsługującym eBPF w binutilach GNU. Początkowo backend do obsługi eBPF opiera się na technologiach LLVM, jednak Oracle jest zainteresowane pojawieniem się w GCC standardowej możliwości generowania programów dla eBPF, co pozwoli na wykorzystanie jednego zestawu narzędzi zarówno do budowy jądra Linuksa, jak i do budowania programów dla eBPF.

Oprócz backendu generowania kodu bajtowego, proponowane łatki dla GCC zawierają także port libgcc dla eBPF i narzędzia do generowania plików ELF, umożliwiające wykonanie kodu na maszynie wirtualnej eBPF przy użyciu programów ładujących dostarczanych przez jądro. Na razie kod w języku C można przetłumaczyć na kod bajtowy (nie wszystkie funkcje języka są dostępne), ale w przyszłości oczekuje się rozszerzenia dostępnych możliwości języka C, dodania obsługi innych języków, stworzenia symulatora i dodaj obsługę GCC do debugowania programów eBPF bez ładowania do jądra.

Źródło: opennet.ru

Dodaj komentarz