Разработчик(и) | Стивен Ростедт и другие |
---|---|
Первоначальный выпуск | 9 октября 2008 г. ( 2008-10-09 ) |
Операционная система | Линукс |
Тип | Расширение ядра |
Лицензия | GNU GPL версия 2 [1] |
Веб-сайт | www.kernel.org/doc/html/latest/trace/index.html |
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] Однако существуют дополнительные утилиты пользовательского пространства, которые предоставляют более продвинутые возможности для записи, анализа и визуализации данных; примерами таких утилит являются trace-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]