Ftrace — śledzenie funkcji jądra Linux krok po kroku
ftrace (Function Tracer) to wbudowany w jądro mechanizm śledzenia. Pozwala monitorować wywołania funkcji wewnątrz jądra, śledzić opóźnienia (latency), przełączenia kontekstu i inne zdarzenia systemowe z mikrosekundową dokładnością.
Wymagania jądra
Aby korzystać z ftrace, jądro musi być skompilowane z odpowiednimi opcjami. W większości standardowych dystrybucji (Ubuntu, Fedora, Debian) są one włączone domyślnie. Jeśli jednak kompilujesz własne jądro, upewnij się, że masz ustawione:
CONFIG_FUNCTION_TRACER=y- podstawowe śledzenie funkcji.CONFIG_FUNCTION_GRAPH_TRACER=y- śledzenie grafu wywołań (wejścia i wyjścia z funkcji).CONFIG_DYNAMIC_FTRACE=y- pozwala na dynamiczne włączanie/wyłączanie śledzenia konkretnych funkcji (bez tego narzut na wydajność byłby ogromny).
Możesz sprawdzić, czy Twoje obecne jądro to wspiera, szukając pliku konfiguracyjnego w /boot/ lub sprawdzając, czy istnieje katalog /sys/kernel/debug/tracing.
Jak działa Ftrace?
W przeciwieństwie do strace, który śledzi wywołania systemowe z punktu widzenia procesu (przestrzeń użytkownika), ftrace działa wewnątrz samego jądra.
Jądro udostępnia interfejs ftrace poprzez specjalny system plików tracefs (zazwyczaj zamontowany w /sys/kernel/debug/tracing lub /sys/kernel/tracing). Możemy sterować śledzeniem, po prostu zapisując wartości do plików w tym katalogu.
Ręczne sterowanie
Możesz używać ftrace bezpośrednio z terminala:
- Przejdź do katalogu tracingu:
cd /sys/kernel/debug/tracing - Wybierz tracer (np.
function_graph, który rysuje drzewo wywołań):echo function_graph > current_tracer - Włącz śledzenie:
echo 1 > tracing_on - Wykonaj jakąś akcję w systemie.
- Wyłącz śledzenie i zobacz wynik:
echo 0 > tracing_on cat trace | head
trace-cmd: Ftrace dla ludzi
Chociaż ręczne sterowanie jest pouczające, na co dzień wszyscy używają narzędzia trace-cmd. Jest to wygodna nakładka (front-end) na ftrace, która automatyzuje ustawianie opcji i zbieranie danych.
Instalacja
Na większości dystrybucji pakiet nazywa się po prostu trace-cmd:
sudo apt install trace-cmd # Debian/Ubuntu
sudo dnf install trace-cmd # Fedora/RHEL
Podstawowe użycie
Najprostsze polecenie, aby nagrać przebieg funkcji jądra podczas wykonywania programu (np. ls):
sudo trace-cmd record -p function_graph ls
Spowoduje to utworzenie pliku trace.dat. Aby go przeanalizować, używamy:
trace-cmd report | less
Zobaczysz wtedy szczegółowy graf wywołań funkcji jądra, co pozwala dokładnie zrozumieć, jakie funkcje były wywoływane i ile czasu zajęły.
Kiedy używać Ftrace?
- Debugowanie wydajności jądra: Gdy system “muli”, a
topnie pokazuje winnego. - Analiza sterowników: Aby zobaczyć, jak sterownik komunikuje się ze sprzętem.
- Nauka: Aby zrozumieć, jak działają podsystemy jądra (np. scheduler, system plików).
Do głębszej analizy wydajności ftrace dobrze współpracuje z perf — razem pokrywają większość potrzeb profilowania i śledzenia na poziomie jądra.