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

  • View
    758

  • Download
    12

  • Category

    Software

Preview:

Citation preview

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

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

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

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

Спасибо :)

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

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

Контакты

@lensvol lensvol@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

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

Recommended