35

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

  • Upload
    -

  • View
    758

  • Download
    12

Embed Size (px)

Citation preview

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

Здравствуйте :)

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

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

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

10 лет профессионального программирования

Python, JavaScript, C/C++, Perl, Java, PHP

В Яндексе с 2014 года

Характер нордический, люблю поесть :)

4

О докладчике

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

- О чем этот доклад?

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

- Профилирование?

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

Позволяет найти “узкие места” в вашем коде

Быстрее код - больше полезной работы за единицу времени

Хороший повод узнать, что же происходит “под капотом”

Отлично смотрится в резюме

7

Профилирование for fun & profit

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

Форма динамического анализа программы

Основной способ - замеры:

〉 CPU

〉 Потребляемая память

〉 Частота/продолжительность вызовов функций

Методы:

〉 Статистический профайлинг (сэмплирование)

〉 Инструментирование

8

Минутка информации

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

- Что-нибудь для Python?

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

Сбор данных:

〉 cProfile/profile, hotshot, line_profiler

〉 guppy, Dowser, memory_profiler

〉 valgrind, SystemTap, DTrace, perf

Визуализация:

〉 pycallgraph, gprof2dot

〉 RunSnakeRun, KCacheGrind, SnakeViz

10

Что мы имеем

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

- Так в чем проблема?

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

Огромный объем данных на реальных системах

Сложность со сбором данных по кластеру

Невозможность увидеть общую картину

12

Суровая реальность

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

13

Суровая реальность

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

14

Суровая реальность

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

- “Flame graph”?

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

Flame graph.

Кажется, здесь стоит пояснить.

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

Flame graph.

Кажется, здесь стоит пояснить.

- …Что это?

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

Метод визуализации собранных фреймов стека

Введены в обиход Бренданом Греггом (Brendan Gregg)

Помогают понять общую картину выполнения приложения

Работает с разными формата результатов (perf, DTrace и т.д.)

18

Flame graph

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

Каноничный формат вывода - SVG

Ось X - число появлений кадра стека среди всех семплов

Ось Y - глубина нахождения в стеке

Есть различные варианты: CPU (Off-CPU), память, IO и т.п.

19

Технические детали

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

20

Процесс построения

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

21

Шаг 1: сбор данных

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

22

Шаг 2: слияние стеков

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

23

Шаг 3: построение графика

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

- Примеры?

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

Сбор данных через python-flamegraphhttps://github.com/evanhempel/python-flamegraph

Сэмплирование отдельным потоком каждые 100 мс

Подключение в файле конфигурации gunicorn, обработчики post_worker_init и worker_int

Результаты сбрасываются при получении SIGQUIT воркером и объединяются

25

Case study: yandex-tinyurl

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

26

Получившийся график

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

27

Получившийся график

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

28

Получившийся график

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

- А в динамике?

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

- Планы на будущее?

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

Свой набор инструментов для визуализации

Группы цветов для раскрашивания графика

Попробовать SystemTap / perf

“Full-stack flame graph”

31

Планы на будущее

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

- Есть вопрос!

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

Спасибо :)

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

Борисов Кирилл

Разработчик ПО

Контакты

@lensvol [email protected]

lensvol

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

“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

Ссылки и дополнительные материалы