flame graph: новый взгляд на старое профилирование
TRANSCRIPT
Здравствуйте :)
Flame graph: новый взгляд на старое профилирование
10 лет профессионального программирования
Python, JavaScript, C/C++, Perl, Java, PHP
В Яндексе с 2014 года
Характер нордический, люблю поесть :)
4
О докладчике
- О чем этот доклад?
- Профилирование?
Позволяет найти “узкие места” в вашем коде
Быстрее код - больше полезной работы за единицу времени
Хороший повод узнать, что же происходит “под капотом”
Отлично смотрится в резюме
7
Профилирование for fun & profit
Форма динамического анализа программы
Основной способ - замеры:
〉 CPU
〉 Потребляемая память
〉 Частота/продолжительность вызовов функций
Методы:
〉 Статистический профайлинг (сэмплирование)
〉 Инструментирование
8
Минутка информации
- Что-нибудь для Python?
Сбор данных:
〉 cProfile/profile, hotshot, line_profiler
〉 guppy, Dowser, memory_profiler
〉 valgrind, SystemTap, DTrace, perf
Визуализация:
〉 pycallgraph, gprof2dot
〉 RunSnakeRun, KCacheGrind, SnakeViz
10
Что мы имеем
- Так в чем проблема?
Огромный объем данных на реальных системах
Сложность со сбором данных по кластеру
Невозможность увидеть общую картину
12
Суровая реальность
13
Суровая реальность
14
Суровая реальность
- “Flame graph”?
Flame graph.
Кажется, здесь стоит пояснить.
Flame graph.
Кажется, здесь стоит пояснить.
- …Что это?
Метод визуализации собранных фреймов стека
Введены в обиход Бренданом Греггом (Brendan Gregg)
Помогают понять общую картину выполнения приложения
Работает с разными формата результатов (perf, DTrace и т.д.)
18
Flame graph
Каноничный формат вывода - SVG
Ось X - число появлений кадра стека среди всех семплов
Ось Y - глубина нахождения в стеке
Есть различные варианты: CPU (Off-CPU), память, IO и т.п.
19
Технические детали
20
Процесс построения
21
Шаг 1: сбор данных
22
Шаг 2: слияние стеков
23
Шаг 3: построение графика
- Примеры?
Сбор данных через python-flamegraphhttps://github.com/evanhempel/python-flamegraph
Сэмплирование отдельным потоком каждые 100 мс
Подключение в файле конфигурации gunicorn, обработчики post_worker_init и worker_int
Результаты сбрасываются при получении SIGQUIT воркером и объединяются
25
Case study: yandex-tinyurl
26
Получившийся график
27
Получившийся график
28
Получившийся график
- А в динамике?
- Планы на будущее?
Свой набор инструментов для визуализации
Группы цветов для раскрашивания графика
Попробовать SystemTap / perf
“Full-stack flame graph”
31
Планы на будущее
- Есть вопрос!
Спасибо :)
“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
Ссылки и дополнительные материалы