Профилирование кода на C/C++ в *nix системах
-
Upload
aleksander-alekseev -
Category
Education
-
view
444 -
download
5
Transcript of Профилирование кода на C/C++ в *nix системах
![Page 1: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/1.jpg)
Профилирование кодана C/C++ в *nix системахАлександр Алексеевhttp://eax.me/
![Page 2: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/2.jpg)
Два слова о себе
![Page 3: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/3.jpg)
В этом толке● gettimeofday● strace, ltrace, truss● gprof● gdb / lldb● perf● pmcstat● SystemTap● DTrace● HeapTrack● BPF / bcc● Умные книжки и красивые картинки!● Важно: не заменяет документацию (via Роман Поборчий)
![Page 4: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/4.jpg)
Дисклеймер
Disclaimer
![Page 5: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/5.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость
![Page 6: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/6.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете
![Page 7: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/7.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете● Взятие среднего
![Page 8: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/8.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете● Взятие среднего● Кто будет бенчмаркать бенчмарки?
![Page 9: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/9.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете● Взятие среднего● Кто будет бенчмаркать бенчмарки?● Отсутствие анализа
![Page 10: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/10.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете● Взятие среднего● Кто будет бенчмаркать бенчмарки?● Отсутствие анализа● Игнорирование ошибок
![Page 11: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/11.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете● Взятие среднего● Кто будет бенчмаркать бенчмарки?● Отсутствие анализа● Игнорирование ошибок● Неправильные настройки
![Page 12: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/12.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете● Взятие среднего● Кто будет бенчмаркать бенчмарки?● Отсутствие анализа● Игнорирование ошибок● Неправильные настройки● Нетипичная нагрузка
![Page 13: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/13.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете● Взятие среднего● Кто будет бенчмаркать бенчмарки?● Отсутствие анализа● Игнорирование ошибок● Неправильные настройки● Нетипичная нагрузка● Маркетинг и подгон
![Page 14: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/14.jpg)
Как не нужно делать бенчмаркиТипичные ошибки (список не полон):
● Неповторяемость● Вы измеряете не то, что думаете● Взятие среднего● Кто будет бенчмаркать бенчмарки?● Отсутствие анализа● Игнорирование ошибок● Неправильные настройки● Нетипичная нагрузка● Маркетинг и подгон● Игнорирование других свойств (стоимости и т.д.)
![Page 15: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/15.jpg)
gettimeofday(), пример кода
![Page 16: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/16.jpg)
gettimeofday(), плюсы/минусы
● Не такой уж дорогой метод, спасибо VDSO● Но со спинлоками все равно не стоит использовать● Удобно, если что-то тормозит иногда
![Page 17: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/17.jpg)
strace, ltrace, truss
![Page 18: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/18.jpg)
gprof, текстовый формат
![Page 19: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/19.jpg)
gprof, построенная картинка
![Page 20: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/20.jpg)
gdb, lldb — получение бэктрейса (bt)
$ gdb --batch --command=gdb.batch -p 12345
$ lldb -p 62510 --batch -s lldb.batch
Полезный прием при поиске и устранении lock contention.
![Page 21: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/21.jpg)
gdb, lldb — реальный патч (44ca4022)
http://habr.ru/p/310372/ (Примеры реальных патчей в PostgreSQL, часть 2)
![Page 22: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/22.jpg)
perf top
![Page 23: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/23.jpg)
perf top — реальный патч (cc988fbb)
![Page 24: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/24.jpg)
perf record и флеймграфы [1 / 2]
![Page 25: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/25.jpg)
perf record и флеймграфы [2 / 2]
![Page 26: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/26.jpg)
Brendan Gregg
http://youtu.be/tDacjrSCeq4 (Shouting in the Datacenter)
![Page 27: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/27.jpg)
pmcstat
PMC = Performance Monitoring Counters
Тоже умеет:
● Топ самых “горячих” процедур● Флеймграфы● Граф вызовов как у gprof● Только FreeBSD (под MacOS нет)
http://eax.me/freebsd-pmcstat/
![Page 28: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/28.jpg)
SystemTap, пример скрипта
![Page 29: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/29.jpg)
SystemTap, плюсы/минусы
● Мощный и при этом безопасный скриптовый язык● Код транслируется в C, компилируется в модуль ядра● Автоматический вывод типов (строки, числа) при компиляции● Стремно использовать в продакшне● Больше вообще про трассировку-отладку, чем профайлинг ...● … тем более учитывая, что есть perf
![Page 30: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/30.jpg)
DTrace, пример скрипта
![Page 31: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/31.jpg)
DTrace, плюсы/минусы
● Работает не только при наличии в приложении пробов● MacOS, FreeBSD, Oracle Linux● Не нужно компилировать и устанавливать, есть в системе из
коробки● Можно использовать на продакшне (по крайней мере, во FreeBSD)● Есть порт для остальных дистрибутивов Linux (dtrace4linux)
![Page 32: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/32.jpg)
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
![Page 33: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/33.jpg)
HeapTrack: Massif Visualizer
![Page 34: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/34.jpg)
HeapTrack: плюсы/минусы
● Быстрый!● Может цепляться к запущенным процессам● Красивые и наглядные отчеты (есть флеймграфы)● Умеет находить мемори лики (--print-leaks)● Статистика по размерам выделяемой памяти
(--print-histogram)● Не знает про выделение памяти на стеке● Только Linux (попробуйте Valgrind Massif)
![Page 35: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/35.jpg)
Linux 4.9: BPF / bcc
![Page 36: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/36.jpg)
Что и когда использовать● 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 + сеть, диск и т.д.
![Page 37: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/37.jpg)
Книги
● Systems Performance: Enterprise and the Cloudby Brendan Gregg (2013)
● DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSDby Brendan Gregg, Jim Mauro (2011)
![Page 38: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/38.jpg)
Онлайн-ресурсы
● 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
![Page 39: Профилирование кода на C/C++ в *nix системах](https://reader033.fdocuments.net/reader033/viewer/2022050914/587a53f61a28ab520b8b4f8f/html5/thumbnails/39.jpg)
Вопросы?