Флеймграфы - удобный способ представления информации, собранной профайлером.
Видео с объяснением, зачем нужны, и примерами применения (на сайте есть более свежие версии, но в этой собрано всё сразу).
На вход тулзе подаётся текстовый файл с собранными профайлером данными. Чаще всего используются статистические профайлеры, которые генерируют сэмплы с определённой частотой и собирают информацию о стеках вызовов.
Однако текстовый вывод таких профайлеров громоздкий и малоинформативный, поэтому они преобразуются с помощью скриптов на перле в CPU Samples Flamegraph
, который позволяет визуально увидеть, чем именно был занят процессор.
Граф представляет собой SVG-файл с JavaScript-кодом, который можно рассматривать и изучать в Google Chrome интерактивно. Размер файла - ~500кб, что позволяет хранить графы различных измерений программы (например, в системе задач, для передачи между програмистами, QA и инженерами по производительности) и сравнивать их между собой.
Получить данные в нужном для построения графа виде позволяет практически любой профайлер:perf, eBPF, SystemTap, and ktap, DTrace, XCode instruments, XPerf - Linux/MacOSX/Windows
Также есть способы собрать данные для различных интерпретируемых языков и виртуальных машин.
Мобильные системы идут немного своим путём, но также можно получить данные для:
Android (онлайн-конвертер)
iOS (ещё)
Больше примеров - github, сайт автора
Автор показывает способы, как профилировать не только CPU, но и память, обращения к диску и сетевые события.
Производные от Flamegraph способы представления профилируемых данных:Facebook Icicle charts
Google Flame charts
Инструменты для Linux, которые представляют информацию в том числе в виде флеймграфов:
Hotspot - CPU сэмплы
Heaptrack - потребление памяти в куче
Для Windows:
etwprof
Применение в играх:
Profiling: Measuring and Analysis - серия статей Tony Albrecht, на основе видео Pitfalls of Object Oriented Programming, Revisited - Tony Albrecht (TGC 2017).
FlameGraphs: Understand where your program is spending time