Разная коллекция находящихся в разработке и неподдерживаемых инструментов анализа производительности для Linux ftrace и perf_events (также известная как команда «perf»). И ftrace, и perf — это основные инструменты трассировки Linux, включенные в исходный код ядра. В вашей системе, вероятно, уже есть ftrace, а perf зачастую просто добавляется в пакет (см. Предварительные условия).
Эти инструменты просты в установке (наименьшее количество зависимостей), обеспечивают расширенные возможности наблюдения за производительностью и просты в использовании: делайте одно дело и делайте это хорошо. Эта коллекция была создана Бренданом Греггом (автором DTraceToolkit).
Многие из этих инструментов используют обходные пути, поэтому функциональность возможна в существующих ядрах Linux. По этой причине у многих инструментов есть предостережения (см. справочные страницы), и их реализацию следует рассматривать как заполнитель до тех пор, пока не будут добавлены будущие функции ядра или новые подсистемы трассировки.
Они предназначены для Linux 3.2 и более новых ядер. Для Linux 2.6.x см. Предупреждения.
Эти инструменты были представлены в презентации USENIX LISA 2014: Анализ производительности Linux: новые инструменты и старые секреты.
Использование ftrace:
Использование perf_events:
Использование eBPF:
Показаны новые процессы и аргументы:
# ./execsnoop Отслеживание exec(). Ctrl-C для завершения. PID PPID ARGS 22898 22004 мужчина лс 22905 22898 предварительное преобразование -e UTF-8 22908 22898 пейджер -s 22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8 22906 22898 табл. 22911 22910 Карта языкового стандарта 22912 22907 groff -mtty-char -Tutf8 -mandoc -rLL=164n -rLT=164n 22913 22912 troff -mtty-char -mandoc -rLL=164n -rLT=164n -Tutf8 22914 22912 грязный
Измерение задержки ввода-вывода блочного устройства от вставки в очередь до завершения:
# ./iolatency -Q Трассировка блока ввода-вывода. Вывод каждые 1 секунду. Ctrl-C для завершения. >=(мс) .. <(мс) : Ввод-вывод |Распределение | 0 -> 1 : 1913 |####################################| 1 -> 2 : 438 |######### | 2 -> 4 : 100 |## | 4 -> 8 : 145 |### | 8 -> 16 : 43 |# | 16 -> 32 : 43 |# | 32 -> 64 : 1 |# | [...]
Отслеживание точки трассировки block:block_rq_insert с трассировкой стека ядра и только для чтения:
# ./tpoint -s блок:block_rq_insert 'rwbs ~ "*R*"' cksum-11908 [000] d... 7269839.919098:block_rq_insert: 202,1 R 0 () 736560 + 136 [cksum] cksum-11908 [000] d... 7269839.919107: => __elv_add_request => blk_flush_plug_list => blk_finish_plug => __do_page_cache_readahead => ondemand_readahead => page_cache_async_readahead => generic_file_read_iter => new_sync_read => vfs_read => SyS_read => system_call_fastpath [...]
Подсчитайте вызовы функций ядра, начинающиеся с «bio_», суммируйте каждую секунду:
# ./funccount -i 1 'bio_*' Отслеживание "bio_*"... Ctrl-C для завершения. СЧЕТ ФУНКЦИЙ bio_attempt_back_merge 26 bio_get_nr_vecs 361 био_аллок 536 bio_alloc_bioset 536 био_эндио 536 био_бесплатно 536 bio_fs_destructor 536 био_инит 536 bio_integrity_enabled 536 био_пут 729 bio_add_page 1004 [...]
В каталоге примеров есть еще много примеров. Также см. страницы руководства.
Намерений как можно меньше. Например, сервер Linux 3.2 без отладочной информации. Подробнее см. на странице руководства инструмента.
FTRACE настроен в ядре. Возможно, это уже настроено и доступно в вашей версии ядра, поскольку FTRACE впервые был добавлен в версии 2.6.27. Для этого требуется CONFIG_FTRACE и другие параметры FTRACE в зависимости от инструмента. Некоторые инструменты (например, funccount) требуют CONFIG_FUNCTION_PROFILER.
Требуется установка команды «perf». Это находится в пакете linux-tools-common. После установки perf может предложить вам установить дополнительный пакет linux-tools (linux-tools -kernel_version ). perf также можно собрать в файле Tools/perf в исходном коде ядра. Дополнительные сведения о том, как заставить perf_events работать в полную силу, см. в разделе «Предварительные условия perf_events».
Требуется ядро с включенной опцией CONFIG_DEBUG_FS. Как и в случае с FTRACE, это может быть уже включено (debugfs был добавлен в версии 2.6.10-rc3). Debugfs также необходимо смонтировать:
# mount -t debugfs none /sys/kernel/debug
Многие из этих сценариев используют awk и будут пытаться использовать либо mawk, либо gawk в зависимости от желаемого поведения: mawk для буферизованного вывода (из-за его скорости) и gawk для синхронного вывода (поскольку работает fflush(), позволяющий более эффективно группировать пишет).
Это всего лишь сценарии. Либо возьмите все:
git clone --depth 1 https://github.com/brendangregg/perf-tools
Или используйте необработанные ссылки на github для загрузки отдельных скриптов. Например:
wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop
Это сохраняет вкладки (которые копирование и вставка могут испортить).
Ftrace впервые был добавлен в Linux 2.6.27, а perf_events — в Linux 2.6.31. В этих ранних версиях были ошибки ядра, а в ядрах серии 2.6.32 сообщалось о зависаниях и паниках. Сюда входит CentOS 6.x. Если вам необходимо проанализировать старые ядра, эти инструменты могут быть полезны только в отказоустойчивой среде, например в лаборатории с моделируемыми проблемами. Эти инструменты были в основном разработаны для ядер Linux 3.2 и более поздних версий.
В зависимости от инструмента также могут возникнуть накладные расходы. См. следующий раздел.
perf_events развивается. Разработка этой коллекции началась примерно в версии Linux 3.16 с серверами Linux 3.2 в качестве основной цели, в то время, когда perf_events не хватает определенных программных возможностей (например, пользовательских агрегаций в ядре). Возможно, они будут добавлены в следующем выпуске ядра. До тех пор многие из этих инструментов используют обходные пути, приемы и хаки для своей работы. Некоторые из этих инструментов передают данные о событиях в пользовательское пространство для последующей обработки, что требует гораздо больших затрат, чем агрегирование внутри ядра. Накладные расходы каждого инструмента описаны на его странице руководства.
ВНИМАНИЕ . В крайних случаях ваше целевое приложение может работать в 5 раз медленнее при использовании этих инструментов. В зависимости от инструмента и версии ядра также может возникнуть риск паники ядра. Прочтите заголовок программы на предмет предупреждений и проверьте перед использованием.
Если накладные расходы являются проблемой, эти инструменты можно улучшить. Если инструмент еще этого не сделал, его можно переписать на C, чтобы использовать perf_events_open() и mmap() для буфера трассировки. Он также мог бы реализовать подсчет частот на C и напрямую работать с mmap() вместо использования awk/Perl/Python. Дополнительные улучшения возможны для инструментов на основе ftrace, таких как использование снимков и буферов для каждого экземпляра.
Некоторые из этих инструментов предназначены для временного обхода проблем до тех пор, пока не появятся новые возможности ядра, после чего их можно будет существенно переписать. Более старые версии этих инструментов будут храниться в этом репозитории для более старых версий ядра.
Поскольку моей основной целью является группа серверов Linux 3.2, у которых нет отладочной информации, эти инструменты стараются не требовать ее. Иногда это делает инструмент более хрупким, чем он должен быть, поскольку я использую обходные пути (которые могут зависеть от версии ядра и платформы) вместо использования информации об отладке (которая может быть общей). Подробные предварительные требования для каждого инструмента см. на странице руководства.
Я старался использовать perf_events («perf») там, где это возможно, поскольку этот интерфейс был разработан для многопользовательского использования. По разным причинам мне часто приходилось использовать вместо этого ftrace. ftrace на удивление мощный (спасибо Стивену Ростедту!), и не все его функции доступны через perf или при обычном использовании. Этот набор инструментов в некотором смысле является демонстрацией скрытых функций Linux с использованием ftrace.
Поскольку ситуация меняется, вполне возможно, что некоторые инструменты не работают в вашей версии ядра Linux. Для их устранения потребуются определенные знания и сборка.
Кейс и резюме:
Похожие статьи: