Flame graph: новый взгляд на старое профилирование
Transcript of Flame graph: новый взгляд на старое профилирование
![Page 1: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/1.jpg)
![Page 2: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/2.jpg)
Здравствуйте :)
![Page 3: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/3.jpg)
Flame graph: новый взгляд на старое профилирование
![Page 4: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/4.jpg)
10 лет профессионального программирования
Python, JavaScript, C/C++, Perl, Java, PHP
В Яндексе с 2014 года
Характер нордический, люблю поесть :)
4
О докладчике
![Page 5: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/5.jpg)
- О чем этот доклад?
![Page 6: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/6.jpg)
- Профилирование?
![Page 7: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/7.jpg)
Позволяет найти “узкие места” в вашем коде
Быстрее код - больше полезной работы за единицу времени
Хороший повод узнать, что же происходит “под капотом”
Отлично смотрится в резюме
7
Профилирование for fun & profit
![Page 8: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/8.jpg)
Форма динамического анализа программы
Основной способ - замеры:
〉 CPU
〉 Потребляемая память
〉 Частота/продолжительность вызовов функций
Методы:
〉 Статистический профайлинг (сэмплирование)
〉 Инструментирование
8
Минутка информации
![Page 9: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/9.jpg)
- Что-нибудь для Python?
![Page 10: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/10.jpg)
Сбор данных:
〉 cProfile/profile, hotshot, line_profiler
〉 guppy, Dowser, memory_profiler
〉 valgrind, SystemTap, DTrace, perf
Визуализация:
〉 pycallgraph, gprof2dot
〉 RunSnakeRun, KCacheGrind, SnakeViz
10
Что мы имеем
![Page 11: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/11.jpg)
- Так в чем проблема?
![Page 12: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/12.jpg)
Огромный объем данных на реальных системах
Сложность со сбором данных по кластеру
Невозможность увидеть общую картину
12
Суровая реальность
![Page 13: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/13.jpg)
13
Суровая реальность
![Page 14: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/14.jpg)
14
Суровая реальность
![Page 15: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/15.jpg)
- “Flame graph”?
![Page 16: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/16.jpg)
Flame graph.
Кажется, здесь стоит пояснить.
![Page 17: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/17.jpg)
Flame graph.
Кажется, здесь стоит пояснить.
- …Что это?
![Page 18: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/18.jpg)
Метод визуализации собранных фреймов стека
Введены в обиход Бренданом Греггом (Brendan Gregg)
Помогают понять общую картину выполнения приложения
Работает с разными формата результатов (perf, DTrace и т.д.)
18
Flame graph
![Page 19: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/19.jpg)
Каноничный формат вывода - SVG
Ось X - число появлений кадра стека среди всех семплов
Ось Y - глубина нахождения в стеке
Есть различные варианты: CPU (Off-CPU), память, IO и т.п.
19
Технические детали
![Page 20: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/20.jpg)
20
Процесс построения
![Page 21: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/21.jpg)
21
Шаг 1: сбор данных
![Page 22: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/22.jpg)
22
Шаг 2: слияние стеков
![Page 23: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/23.jpg)
23
Шаг 3: построение графика
![Page 24: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/24.jpg)
- Примеры?
![Page 25: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/25.jpg)
Сбор данных через python-flamegraphhttps://github.com/evanhempel/python-flamegraph
Сэмплирование отдельным потоком каждые 100 мс
Подключение в файле конфигурации gunicorn, обработчики post_worker_init и worker_int
Результаты сбрасываются при получении SIGQUIT воркером и объединяются
25
Case study: yandex-tinyurl
![Page 26: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/26.jpg)
26
Получившийся график
![Page 27: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/27.jpg)
27
Получившийся график
![Page 28: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/28.jpg)
28
Получившийся график
![Page 29: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/29.jpg)
- А в динамике?
![Page 30: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/30.jpg)
- Планы на будущее?
![Page 31: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/31.jpg)
Свой набор инструментов для визуализации
Группы цветов для раскрашивания графика
Попробовать SystemTap / perf
“Full-stack flame graph”
31
Планы на будущее
![Page 32: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/32.jpg)
- Есть вопрос!
![Page 33: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/33.jpg)
Спасибо :)
![Page 35: Flame graph: новый взгляд на старое профилирование](https://reader036.fdocuments.in/reader036/viewer/2022082216/58f1b2621a28abbb2f8b45d3/html5/thumbnails/35.jpg)
“The Flame Graph”
http://cacm.acm.org/magazines/2016/6/202665-the-flame-graph
“FreeBSD 2014 Flame Graphs"
http://www.slideshare.net/brendangregg/freebsd-2014-flame-graphs
“Blazing Performance with Flame Graphs”
http://www.youtube.com/watch?v=nZfNehCzGdw
BIG DATA #9 «Анализ производительности Хадуп-кластера»
https://www.youtube.com/watch?v=Yh9KxQ3fKy0
35
Ссылки и дополнительные материалы