SlideShare a Scribd company logo
1 of 39
Download to read offline
Профилирование кода
на 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
Вопросы?

More Related Content

What's hot

Sampling profiling
Sampling profilingSampling profiling
Sampling profilingSlach
 
Быстрое прототипирование алгоритмов управления
Быстрое прототипирование алгоритмов управленияБыстрое прототипирование алгоритмов управления
Быстрое прототипирование алгоритмов управленияMATLAB
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...Iosif Itkin
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxPlatonov Sergey
 
Разработка систем управления для отечественных АКПП
Разработка систем управления для отечественных АКППРазработка систем управления для отечественных АКПП
Разработка систем управления для отечественных АКППMATLAB
 
Применение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюденияПрименение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюденияcorehard_by
 
Пример fuzzy testing для поиска URL в тексте
Пример fuzzy testing для поиска URL в текстеПример fuzzy testing для поиска URL в тексте
Пример fuzzy testing для поиска URL в текстеMoscowDjango
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...corehard_by
 
Гарантированное уничтожение информации
Гарантированное уничтожение информацииГарантированное уничтожение информации
Гарантированное уничтожение информацииVitaly Balashov
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один goBadoo Development
 
Buffer overflow and other software vulnerabilities: theory and practice of pr...
Buffer overflow and other software vulnerabilities: theory and practice of pr...Buffer overflow and other software vulnerabilities: theory and practice of pr...
Buffer overflow and other software vulnerabilities: theory and practice of pr...Roman Oliynykov
 
Полунатурная модель управляемой ракеты с пассивной ГСН
Полунатурная модель управляемой ракеты с пассивной ГСНПолунатурная модель управляемой ракеты с пассивной ГСН
Полунатурная модель управляемой ракеты с пассивной ГСНMATLAB
 
Static Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformStatic Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformIosif Itkin
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...Iosif Itkin
 
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...Iosif Itkin
 
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...Iosif Itkin
 

What's hot (19)

Sampling profiling
Sampling profilingSampling profiling
Sampling profiling
 
Быстрое прототипирование алгоритмов управления
Быстрое прототипирование алгоритмов управленияБыстрое прототипирование алгоритмов управления
Быстрое прототипирование алгоритмов управления
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
 
Разработка систем управления для отечественных АКПП
Разработка систем управления для отечественных АКППРазработка систем управления для отечественных АКПП
Разработка систем управления для отечественных АКПП
 
Применение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюденияПрименение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюдения
 
Fuzz testing
Fuzz testingFuzz testing
Fuzz testing
 
Пример fuzzy testing для поиска URL в тексте
Пример fuzzy testing для поиска URL в текстеПример fuzzy testing для поиска URL в тексте
Пример fuzzy testing для поиска URL в тексте
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
 
Гарантированное уничтожение информации
Гарантированное уничтожение информацииГарантированное уничтожение информации
Гарантированное уничтожение информации
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Buffer overflow and other software vulnerabilities: theory and practice of pr...
Buffer overflow and other software vulnerabilities: theory and practice of pr...Buffer overflow and other software vulnerabilities: theory and practice of pr...
Buffer overflow and other software vulnerabilities: theory and practice of pr...
 
Полунатурная модель управляемой ракеты с пассивной ГСН
Полунатурная модель управляемой ракеты с пассивной ГСНПолунатурная модель управляемой ракеты с пассивной ГСН
Полунатурная модель управляемой ракеты с пассивной ГСН
 
Js optimization
Js optimizationJs optimization
Js optimization
 
Static Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformStatic Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE Platform
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
 
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
 
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
 

Viewers also liked

ZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSONZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSONAleksander Alekseev
 
Функциональное программирование - Александр Алексеев
Функциональное программирование - Александр АлексеевФункциональное программирование - Александр Алексеев
Функциональное программирование - Александр АлексеевAleksander Alekseev
 
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Ontico
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit TestingDmitry Vyukov
 
Работа с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевРабота с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевAleksander Alekseev
 
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевНовые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевAleksander Alekseev
 
New features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizersNew features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizersSergey Petrunya
 
Эволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDBЭволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDBSergey Petrunya
 
Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)Ontico
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Mail.ru Group
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодRoman Grebennikov
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 
How crowded is your class
How crowded is your class How crowded is your class
How crowded is your class lms030
 
Wii目錄(美版)
Wii目錄(美版)Wii目錄(美版)
Wii目錄(美版)GameShop
 
Ls flumgilleon
Ls flumgilleonLs flumgilleon
Ls flumgilleonJazDine
 
By the Numbers - Book Summit 2013 - Toronto
By the Numbers - Book Summit 2013 - TorontoBy the Numbers - Book Summit 2013 - Toronto
By the Numbers - Book Summit 2013 - TorontoPeter McCarthy
 
Engaging the workforce
Engaging the workforceEngaging the workforce
Engaging the workforceMandeep Singh
 

Viewers also liked (20)

ZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSONZSON, или прозрачное сжатие JSON
ZSON, или прозрачное сжатие JSON
 
Функциональное программирование - Александр Алексеев
Функциональное программирование - Александр АлексеевФункциональное программирование - Александр Алексеев
Функциональное программирование - Александр Алексеев
 
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
 
Fuzzing: The New Unit Testing
Fuzzing: The New Unit TestingFuzzing: The New Unit Testing
Fuzzing: The New Unit Testing
 
Работа с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевРабота с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр Алексеев
 
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевНовые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
 
New features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizersNew features-in-mariadb-and-mysql-optimizers
New features-in-mariadb-and-mysql-optimizers
 
Эволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDBЭволюция репликации в MySQL и MariaDB
Эволюция репликации в MySQL и MariaDB
 
Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)Илья Космодемьянский (PostgreSQL-Consulting.com)
Илья Космодемьянский (PostgreSQL-Consulting.com)
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный код
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
How crowded is your class
How crowded is your class How crowded is your class
How crowded is your class
 
Wii目錄(美版)
Wii目錄(美版)Wii目錄(美版)
Wii目錄(美版)
 
Ls flumgilleon
Ls flumgilleonLs flumgilleon
Ls flumgilleon
 
Netizons brand
Netizons brandNetizons brand
Netizons brand
 
By the Numbers - Book Summit 2013 - Toronto
By the Numbers - Book Summit 2013 - TorontoBy the Numbers - Book Summit 2013 - Toronto
By the Numbers - Book Summit 2013 - Toronto
 
Engaging the workforce
Engaging the workforceEngaging the workforce
Engaging the workforce
 

Similar to Профилирование кода на C/C++ в *nix системах

Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаcorehard_by
 
Антон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времениАнтон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времениCOMAQA.BY
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхNikolay Samokhvalov
 
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 practicesAlexey Andreev
 
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....
Построение и переход на новую аналитическую платформу. Цели, вызовы, решения....HOWWEDOIT
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Ontico
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Ontico
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
Петрова Ксения - Data mining на практике - dmlabs.org
Петрова Ксения - Data mining на практике - dmlabs.orgПетрова Ксения - Data mining на практике - dmlabs.org
Петрова Ксения - Data mining на практике - dmlabs.orgWG_ Events
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20DefconRussia
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)Ontico
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...e-Legion
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...Ontico
 

Similar to Профилирование кода на C/C++ в *nix системах (20)

Инструменты профайлинга С++ кода
Инструменты профайлинга С++ кодаИнструменты профайлинга С++ кода
Инструменты профайлинга С++ кода
 
Антон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времениАнтон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времени
 
Промышленный подход к тюнингу 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
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
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 worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
 
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: максимум информации при минимальных потерях
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях / Све...
 

More from Aleksander Alekseev

Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)Aleksander Alekseev
 
PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)Aleksander Alekseev
 
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)Aleksander Alekseev
 
In-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several timesIn-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several timesAleksander Alekseev
 
Haskell - это просто - Александр Алексеев
Haskell - это просто - Александр АлексеевHaskell - это просто - Александр Алексеев
Haskell - это просто - Александр АлексеевAleksander Alekseev
 

More from Aleksander Alekseev (9)

Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)Growing up new PostgreSQL developers (pgcon.org 2018)
Growing up new PostgreSQL developers (pgcon.org 2018)
 
PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)PostgreSQL and Compressed Documents (pgconf.ru 2018)
PostgreSQL and Compressed Documents (pgconf.ru 2018)
 
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
PostgreSQL Sharding and HA: Theory and Practice (PGConf.ASIA 2017)
 
Data recovery using pg_filedump
Data recovery using pg_filedumpData recovery using pg_filedump
Data recovery using pg_filedump
 
Full Text Search in PostgreSQL
Full Text Search in PostgreSQLFull Text Search in PostgreSQL
Full Text Search in PostgreSQL
 
pg_filedump
pg_filedumppg_filedump
pg_filedump
 
Quality Assurance in PostgreSQL
Quality Assurance in PostgreSQLQuality Assurance in PostgreSQL
Quality Assurance in PostgreSQL
 
In-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several timesIn-core compression: how to shrink your database size in several times
In-core compression: how to shrink your database size in several times
 
Haskell - это просто - Александр Алексеев
Haskell - это просто - Александр АлексеевHaskell - это просто - Александр Алексеев
Haskell - это просто - Александр Алексеев
 

Профилирование кода на C/C++ в *nix системах

  • 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