Брендан Д. Грегг (автор книги DTrace) имеет интересный вариант профилирования: "Off-CPU" профилирование (и График пламени вне процессора; слайды 2013, p112-137), чтобы увидеть, где поток или приложение были заблокированы (не были выполнены процессором, но ожидали ввода/вывода, обработчика страницы или отказались из-за нехватки ресурсов ЦП):
На этот раз показано, какие кодовые пути заблокированы и ждут во время работы вне CPU, и как долго точно. Это отличается от традиционного профилирования, которое часто отображает активность потоков в заданный интервал и (обычно) рассматривает только потоки, если они выполняют работу с процессором.
Он также может объединять данные профиля вне CPU и профиль On-CPU вместе: http://www.brendangregg.com/FlameGraphs/hotcoldflamegraphs.html
Примеры, приведенные Греггом, выполняются с помощью dtrace
, который обычно не доступен в ОС Linux. Но есть некоторые аналогичные инструменты (ktap, systemtap, perf) и perf
, как я думаю, имеет самую широкую установленную базу. Обычно perf
генерируются профили On-CPU (какие функции выполнялись чаще всего на CPU).
- Как перевести примеры Gregg Off-CPU в инструмент
perf
для профилирования в Linux?
PS: Существует ссылка на вариант systemtap плагинов вне CPU на слайдах из LISA13, p124: "Ичунь Чжан создал их и использует их в Linux с помощью SystemTap для сбора профильных данных. См.: http://agentzh.org/misc/slides/off-cpu-flame-graphs.pdf" "(Встреча с пивом CloudFlare 23 августа 2013 года)