ftrace ( Function Tracer ) — это платформа трассировки для ядра Linux . Хотя его первоначальное название, Function Tracer, произошло от способности ftrace записывать информацию, связанную с различными вызовами функций , выполняемыми во время работы ядра , возможности трассировки ftrace охватывают гораздо более широкий диапазон внутренних операций ядра. [2] [3]
Благодаря различным плагинам трассировки ftrace может быть нацелен на различные статические точки трассировки , такие как события планирования , прерывания , ввод-вывод с отображением в памяти , переходы между состояниями питания процессора и операции, связанные с файловыми системами и виртуализацией . Кроме того, доступно динамическое отслеживание вызовов функций ядра, которое при необходимости можно ограничить подмножеством функций с помощью globs , а также с возможностью создания графиков вызовов и предоставления отчетов об использовании стека . В то же время ftrace можно использовать для измерения различных задержек в ядре Linux, например, для определения продолжительности отключения прерываний или вытеснения . [2] [4] [5] : 3–11, 14, 18
Ядро Linux с поддержкой ftrace создается путем включения параметра конфигурации ядра CONFIG_FUNCTION_TRACER . Все взаимодействие с ftrace во время выполнения осуществляется через доступные для чтения и записи виртуальные файлы , содержащиеся в специально смонтированной файловой системе debugfs ; в результате для работы ftrace не требуются специальные утилиты пользовательского пространства . [2] [3] [6] Однако существуют дополнительные утилиты пользовательского пространства, которые предоставляют более расширенные функции для записи, анализа и визуализации данных; примерами таких утилит являются трассировка-cmd и KernelShark . [2] [5] : 31–47 [7] [8]
Внутри себя ftrace полагается на механизм профилирования gcc для добавления машинных инструкций к скомпилированным версиям всех функций ядра уровня исходного кода , которые перенаправляют выполнение функций на батуты ftrace и плагины трассировки, которые выполняют фактическую трассировку. Эти инструкции « точки входа », созданные gcc, изменяются с помощью ftrace при загрузке ядра и изменяются позже во время выполнения с помощью ftrace между NOP и фактическими переходами к трамплинам трассировки, в зависимости от типов трассировки и опций, настроенных во время выполнения. [9] [10]
ftrace разработан главным образом Стивеном Ростедтом и был объединен с основной веткой ядра Linux в версии ядра 2.6.27, выпущенной 9 октября 2008 года. [11]