Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Flame graph: новый взгляд на привычное профилирование, Кирилл Борисов, Яндекс

Flame graph: новый взгляд на привычное профилирование, Кирилл Борисов, Яндекс

Выступление на конференции PyCon Russia 2016

IT-People

July 25, 2016
Tweet

More Decks by IT-People

Other Decks in Programming

Transcript

  1. 10 лет профессионального программирования Python, JavaScript, C/C++, Perl, Java, PHP

    В Яндексе с 2014 года Характер нордический, люблю поесть :) 4 О докладчике
  2. Позволяет найти “узкие места” в вашем коде Быстрее код -

    больше полезной работы за единицу времени Хороший повод узнать, что же происходит “под капотом” Отлично смотрится в резюме 7 Профилирование for fun & profit
  3. Форма динамического анализа программы Основной способ - замеры: ̼ CPU

    ̼ Потребляемая память ̼ Частота/продолжительность вызовов функций Методы: ̼ Статистический профайлинг (сэмплирование) ̼ Инструментирование 8 Минутка информации
  4. Сбор данных: ̼ cProfile/profile, hotshot, line_profiler ̼ guppy, Dowser, memory_profiler

    ̼ valgrind, SystemTap, DTrace, perf Визуализация: ̼ pycallgraph, gprof2dot ̼ RunSnakeRun, KCacheGrind, SnakeViz 10 Что мы имеем
  5. Огромный объем данных на реальных системах Сложность со сбором данных

    по кластеру Невозможность увидеть общую картину 12 Суровая реальность
  6. 14 Суровая реальностьПервая мысль у вас будет о средствах визуализации,

    упомянутых ранее. И это кажется логичным, однако далеко не всегда дает нужный эффект. Вот один из примеров визуализации, созданный утилитой RunSnakeRun.
  7. Метод визуализации собранных фреймов стека Введены в обиход Бренданом Греггом

    (Brendan Gregg) Помогают понять общую картину выполнения приложения Работает с разными формата результатов (perf, DTrace и т.д.) 18 Flame graph
  8. Каноничный формат вывода - SVG Ось X - число появлений

    кадра стека среди всех семплов Ось Y - глубина нахождения в стеке Есть различные варианты: CPU (Off-CPU), память, IO и т.п. 19 Технические детали
  9. Сбор данных через python-flamegraph
 https://github.com/evanhempel/python-flamegraph Сэмплирование отдельным потоком каждые 100

    мс Подключение в файле конфигурации gunicorn, 
 обработчики post_worker_init и worker_int Результаты сбрасываются при получении SIGQUIT воркером
 и объединяются 25 Case study: yandex-tinyurl
  10. Свой набор инструментов для визуализации Группы цветов для раскрашивания графика

    Попробовать SystemTap / perf “Full-stack flame graph” 31 Планы на будущее
  11. “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 Ссылки и дополнительные материалы