SlideShare a Scribd company logo
1 of 35
Download to read offline
Здравствуйте :)
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-flamegraph

https://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
Планы на будущее
- Есть вопрос!
Спасибо :)
Борисов Кирилл
Разработчик ПО
Контакты
@lensvollensvol@yandex-team.ru
lensvol
“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
Ссылки и дополнительные материалы

More Related Content

What's hot

Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Mikhail Kurnosov
 
Алексей Рагозин (Deutsche Bank)
Алексей Рагозин (Deutsche Bank)Алексей Рагозин (Deutsche Bank)
Алексей Рагозин (Deutsche Bank)
Ontico
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
Alex Tutubalin
 
Язык параллельного программирования Intel Cilk Plus
Язык параллельного программирования Intel Cilk PlusЯзык параллельного программирования Intel Cilk Plus
Язык параллельного программирования Intel Cilk Plus
Mikhail Kurnosov
 

What's hot (20)

Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk Plus
 
Полунатурная модель управляемой ракеты с пассивной ГСН
Полунатурная модель управляемой ракеты с пассивной ГСНПолунатурная модель управляемой ракеты с пассивной ГСН
Полунатурная модель управляемой ракеты с пассивной ГСН
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Алексей Рагозин (Deutsche Bank)
Алексей Рагозин (Deutsche Bank)Алексей Рагозин (Deutsche Bank)
Алексей Рагозин (Deutsche Bank)
 
о некоторых вопросах бинарной совместимости в C++
о некоторых вопросах бинарной совместимости в C++о некоторых вопросах бинарной совместимости в C++
о некоторых вопросах бинарной совместимости в C++
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Развертывание алгоритмов на ПЛИС
Развертывание алгоритмов на ПЛИСРазвертывание алгоритмов на ПЛИС
Развертывание алгоритмов на ПЛИС
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
 
Язык параллельного программирования Intel Cilk Plus
Язык параллельного программирования Intel Cilk PlusЯзык параллельного программирования Intel Cilk Plus
Язык параллельного программирования Intel Cilk Plus
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profiling
 
C++ в играх, больших и не очень
C++ в играх, больших и не оченьC++ в играх, больших и не очень
C++ в играх, больших и не очень
 

Similar to Flame graph: новый взгляд на старое профилирование

Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
Кирилл Борисов
 
Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Hpc 2.26.03.2013.
Hpc 2.26.03.2013.
Boris Kizko
 
Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...
Mikhail Kurnosov
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
qasib
 

Similar to Flame graph: новый взгляд на старое профилирование (20)

Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кода
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
 
Cuda, OpenCL
Cuda, OpenCLCuda, OpenCL
Cuda, OpenCL
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартах
 
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИССуперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
 
Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Hpc 2.26.03.2013.
Hpc 2.26.03.2013.
 
Php and frameworks
Php and frameworksPhp and frameworks
Php and frameworks
 
Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...Пространственно-распределенная мультикластерная вычислительная система: архит...
Пространственно-распределенная мультикластерная вычислительная система: архит...
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 

Flame graph: новый взгляд на старое профилирование