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:

  1. Przejdź do katalogu tracingu:
    cd /sys/kernel/debug/tracing
    
  2. Wybierz tracer (np. function_graph, który rysuje drzewo wywołań):
    echo function_graph > current_tracer
    
  3. Włącz śledzenie:
    echo 1 > tracing_on
    
  4. Wykonaj jakąś akcję w systemie.
  5. 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 top nie 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.