SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
Профилирование кода
на C/C++ в *nix системах
Александр Алексеев
http://eax.me/
Два слова о себе
В этом толке
● gettimeofday
● strace, ltrace, truss
● gprof
● gdb / lldb
● perf
● pmcstat
● SystemTap
● DTrace
● HeapTrack
● BPF / bcc
● Умные книжки и красивые картинки!
● Важно: не заменяет документацию (via Роман Поборчий)
Дисклеймер
Disclaimer
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
● Взятие среднего
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
● Взятие среднего
● Кто будет бенчмаркать бенчмарки?
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
● Взятие среднего
● Кто будет бенчмаркать бенчмарки?
● Отсутствие анализа
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
● Взятие среднего
● Кто будет бенчмаркать бенчмарки?
● Отсутствие анализа
● Игнорирование ошибок
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
● Взятие среднего
● Кто будет бенчмаркать бенчмарки?
● Отсутствие анализа
● Игнорирование ошибок
● Неправильные настройки
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
● Взятие среднего
● Кто будет бенчмаркать бенчмарки?
● Отсутствие анализа
● Игнорирование ошибок
● Неправильные настройки
● Нетипичная нагрузка
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
● Взятие среднего
● Кто будет бенчмаркать бенчмарки?
● Отсутствие анализа
● Игнорирование ошибок
● Неправильные настройки
● Нетипичная нагрузка
● Маркетинг и подгон
Как не нужно делать бенчмарки
Типичные ошибки (список не полон):
● Неповторяемость
● Вы измеряете не то, что думаете
● Взятие среднего
● Кто будет бенчмаркать бенчмарки?
● Отсутствие анализа
● Игнорирование ошибок
● Неправильные настройки
● Нетипичная нагрузка
● Маркетинг и подгон
● Игнорирование других свойств (стоимости и т.д.)
gettimeofday(), пример кода
gettimeofday(), плюсы/минусы
● Не такой уж дорогой метод, спасибо VDSO
● Но со спинлоками все равно не стоит использовать
● Удобно, если что-то тормозит иногда
strace, ltrace, truss
gprof, текстовый формат
gprof, построенная картинка
gdb, lldb — получение бэктрейса (bt)
$ gdb --batch --command=gdb.batch -p 12345
$ lldb -p 62510 --batch -s lldb.batch
Полезный прием при поиске и устранении lock contention.
gdb, lldb — реальный патч (44ca4022)
http://habr.ru/p/310372/ (Примеры реальных патчей в PostgreSQL, часть 2)
perf top
perf top — реальный патч (cc988fbb)
perf record и флеймграфы [1 / 2]
perf record и флеймграфы [2 / 2]
Brendan Gregg
http://youtu.be/tDacjrSCeq4 (Shouting in the Datacenter)
pmcstat
PMC = Performance Monitoring Counters
Тоже умеет:
● Топ самых “горячих” процедур
● Флеймграфы
● Граф вызовов как у gprof
● Только FreeBSD (под MacOS нет)
http://eax.me/freebsd-pmcstat/
SystemTap, пример скрипта
SystemTap, плюсы/минусы
● Мощный и при этом безопасный скриптовый язык
● Код транслируется в C, компилируется в модуль ядра
● Автоматический вывод типов (строки, числа) при компиляции
● Стремно использовать в продакшне
● Больше вообще про трассировку-отладку, чем профайлинг ...
● … тем более учитывая, что есть perf
DTrace, пример скрипта
DTrace, плюсы/минусы
● Работает не только при наличии в приложении пробов
● MacOS, FreeBSD, Oracle Linux
● Не нужно компилировать и устанавливать, есть в системе из
коробки
● Можно использовать на продакшне (по крайней мере, во FreeBSD)
● Есть порт для остальных дистрибутивов Linux (dtrace4linux)
HeapTrack: пример отчета
PEAK MEMORY CONSUMERS
4.98MB peak memory consumed over 31111 calls from
tree_allocfunc
at /home/eax/projects/c/c-algorithms/test/struct/test_rbtree.c:37
in /home/eax/projects/c/c-algorithms/build/test/struct/test_rbtree
1.24MB consumed over 7777 calls from:
rb_insert
in /home/eax/projects/c/c-algorithms/build/test/struct/test_rbtree
left_right_walk_test
at /home/eax/projects/c/c-algorithms/test/struct/test_rbtree.c:166
in /home/eax/projects/c/c-algorithms/build/test/struct/test_rbtree
HeapTrack: Massif Visualizer
HeapTrack: плюсы/минусы
● Быстрый!
● Может цепляться к запущенным процессам
● Красивые и наглядные отчеты (есть флеймграфы)
● Умеет находить мемори лики (--print-leaks)
● Статистика по размерам выделяемой памяти
(--print-histogram)
● Не знает про выделение памяти на стеке
● Только Linux (попробуйте Valgrind Massif)
Linux 4.9: BPF / bcc
Что и когда использовать
● gettimeofday
● strace, ltrace, truss
● gprof
● gdb / lldb — в случае lock contention
● perf — если уперлись в CPU, Linux
● pmcstat — если уперлись в CPU, FreeBSD
● SystemTap
● DTrace — профайлинг на MacOS / FreeBSD + сеть, диск и т.д.
● HeapTrack — профилирование использования памяти на Linux
● Vagrant Massif — профилирование использования памяти на всем остальном
● BPF / bcc — профайлинг на Linux + сеть, диск и т.д.
Книги
● Systems Performance: Enterprise and the Cloud
by Brendan Gregg (2013)
● DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
by Brendan Gregg, Jim Mauro (2011)
Онлайн-ресурсы
● http://www.brendangregg.com/blog/index.html
● http://dtrace.org/blogs/
● https://sourceware.org/systemtap/
● https://www.freebsd.org/doc/handbook/dtrace.html
● https://wiki.freebsd.org/DTrace
● http://www.intel.com/content/www/us/en/processors/architectures-softwar
e-developer-manuals.html
Вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Alexey Lesovsky
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Ontico
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Ontico
 
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли..."Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
Ontico
 

Was ist angesagt? (20)

libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of Hell
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
Mysql vs postgresql
Mysql vs postgresqlMysql vs postgresql
Mysql vs postgresql
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
 
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли..."Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
 

Ähnlich wie Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres Professional)

Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
HOWWEDOIT
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Ontico
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
Michael Karpov
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
m2rus
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
Computer Science Club
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Ontico
 

Ähnlich wie Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres Professional) (20)

C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кода
 
Контроль качества и сопровождение программ в реальном времени
Контроль качества и сопровождение программ в реальном времениКонтроль качества и сопровождение программ в реальном времени
Контроль качества и сопровождение программ в реальном времени
 
Антон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времениАнтон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времени
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
Xp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practicesXp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practices
 
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
Петрова Ксения - Data mining на практике - dmlabs.org
Петрова Ксения - Data mining на практике - dmlabs.orgПетрова Ксения - Data mining на практике - dmlabs.org
Петрова Ксения - Data mining на практике - dmlabs.org
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
 

Mehr von Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
 
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
 

Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres Professional)

  • 1. Профилирование кода на C/C++ в *nix системах Александр Алексеев http://eax.me/
  • 3. В этом толке ● gettimeofday ● strace, ltrace, truss ● gprof ● gdb / lldb ● perf ● pmcstat ● SystemTap ● DTrace ● HeapTrack ● BPF / bcc ● Умные книжки и красивые картинки! ● Важно: не заменяет документацию (via Роман Поборчий)
  • 5. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость
  • 6. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете
  • 7. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете ● Взятие среднего
  • 8. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете ● Взятие среднего ● Кто будет бенчмаркать бенчмарки?
  • 9. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете ● Взятие среднего ● Кто будет бенчмаркать бенчмарки? ● Отсутствие анализа
  • 10. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете ● Взятие среднего ● Кто будет бенчмаркать бенчмарки? ● Отсутствие анализа ● Игнорирование ошибок
  • 11. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете ● Взятие среднего ● Кто будет бенчмаркать бенчмарки? ● Отсутствие анализа ● Игнорирование ошибок ● Неправильные настройки
  • 12. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете ● Взятие среднего ● Кто будет бенчмаркать бенчмарки? ● Отсутствие анализа ● Игнорирование ошибок ● Неправильные настройки ● Нетипичная нагрузка
  • 13. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете ● Взятие среднего ● Кто будет бенчмаркать бенчмарки? ● Отсутствие анализа ● Игнорирование ошибок ● Неправильные настройки ● Нетипичная нагрузка ● Маркетинг и подгон
  • 14. Как не нужно делать бенчмарки Типичные ошибки (список не полон): ● Неповторяемость ● Вы измеряете не то, что думаете ● Взятие среднего ● Кто будет бенчмаркать бенчмарки? ● Отсутствие анализа ● Игнорирование ошибок ● Неправильные настройки ● Нетипичная нагрузка ● Маркетинг и подгон ● Игнорирование других свойств (стоимости и т.д.)
  • 16. gettimeofday(), плюсы/минусы ● Не такой уж дорогой метод, спасибо VDSO ● Но со спинлоками все равно не стоит использовать ● Удобно, если что-то тормозит иногда
  • 20. gdb, lldb — получение бэктрейса (bt) $ gdb --batch --command=gdb.batch -p 12345 $ lldb -p 62510 --batch -s lldb.batch Полезный прием при поиске и устранении lock contention.
  • 21. gdb, lldb — реальный патч (44ca4022) http://habr.ru/p/310372/ (Примеры реальных патчей в PostgreSQL, часть 2)
  • 23. perf top — реальный патч (cc988fbb)
  • 24. perf record и флеймграфы [1 / 2]
  • 25. perf record и флеймграфы [2 / 2]
  • 27. pmcstat PMC = Performance Monitoring Counters Тоже умеет: ● Топ самых “горячих” процедур ● Флеймграфы ● Граф вызовов как у gprof ● Только FreeBSD (под MacOS нет) http://eax.me/freebsd-pmcstat/
  • 29. SystemTap, плюсы/минусы ● Мощный и при этом безопасный скриптовый язык ● Код транслируется в C, компилируется в модуль ядра ● Автоматический вывод типов (строки, числа) при компиляции ● Стремно использовать в продакшне ● Больше вообще про трассировку-отладку, чем профайлинг ... ● … тем более учитывая, что есть perf
  • 31. DTrace, плюсы/минусы ● Работает не только при наличии в приложении пробов ● MacOS, FreeBSD, Oracle Linux ● Не нужно компилировать и устанавливать, есть в системе из коробки ● Можно использовать на продакшне (по крайней мере, во FreeBSD) ● Есть порт для остальных дистрибутивов Linux (dtrace4linux)
  • 32. HeapTrack: пример отчета PEAK MEMORY CONSUMERS 4.98MB peak memory consumed over 31111 calls from tree_allocfunc at /home/eax/projects/c/c-algorithms/test/struct/test_rbtree.c:37 in /home/eax/projects/c/c-algorithms/build/test/struct/test_rbtree 1.24MB consumed over 7777 calls from: rb_insert in /home/eax/projects/c/c-algorithms/build/test/struct/test_rbtree left_right_walk_test at /home/eax/projects/c/c-algorithms/test/struct/test_rbtree.c:166 in /home/eax/projects/c/c-algorithms/build/test/struct/test_rbtree
  • 34. HeapTrack: плюсы/минусы ● Быстрый! ● Может цепляться к запущенным процессам ● Красивые и наглядные отчеты (есть флеймграфы) ● Умеет находить мемори лики (--print-leaks) ● Статистика по размерам выделяемой памяти (--print-histogram) ● Не знает про выделение памяти на стеке ● Только Linux (попробуйте Valgrind Massif)
  • 35. Linux 4.9: BPF / bcc
  • 36. Что и когда использовать ● gettimeofday ● strace, ltrace, truss ● gprof ● gdb / lldb — в случае lock contention ● perf — если уперлись в CPU, Linux ● pmcstat — если уперлись в CPU, FreeBSD ● SystemTap ● DTrace — профайлинг на MacOS / FreeBSD + сеть, диск и т.д. ● HeapTrack — профилирование использования памяти на Linux ● Vagrant Massif — профилирование использования памяти на всем остальном ● BPF / bcc — профайлинг на Linux + сеть, диск и т.д.
  • 37. Книги ● Systems Performance: Enterprise and the Cloud by Brendan Gregg (2013) ● DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD by Brendan Gregg, Jim Mauro (2011)
  • 38. Онлайн-ресурсы ● http://www.brendangregg.com/blog/index.html ● http://dtrace.org/blogs/ ● https://sourceware.org/systemtap/ ● https://www.freebsd.org/doc/handbook/dtrace.html ● https://wiki.freebsd.org/DTrace ● http://www.intel.com/content/www/us/en/processors/architectures-softwar e-developer-manuals.html