Firma Oral
Już DTrace
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
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
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