2019-04-20 20:24:14 +00:00
|
|
|
|
---
|
2019-04-23 16:40:55 +00:00
|
|
|
|
title: "Профилирование кода"
|
2019-04-20 20:24:14 +00:00
|
|
|
|
category: Программирование
|
2019-04-23 17:40:06 +00:00
|
|
|
|
tags: программирование, отладка, производительность, профилирование, gprof,
|
2019-04-20 20:24:14 +00:00
|
|
|
|
summary:
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
## Общее описание
|
|
|
|
|
|
|
|
|
|
Чтобы профилировать приложения, компилируемые [GCC](http://gcc.gnu.org),
|
2019-04-22 05:13:35 +00:00
|
|
|
|
необходимо добавлять флаг `-fno-omit-frame-pointer` и, желательно, `-g`.
|
2019-04-20 20:24:14 +00:00
|
|
|
|
|
|
|
|
|
## quickstack
|
|
|
|
|
|
|
|
|
|
Утилита для отслеживания стеков вызовов функций [quicktrack](https://github.com/yoshinorim/quickstack).
|
|
|
|
|
Пример использования:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
quickstack -f -p $(pidof application)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## perf
|
|
|
|
|
|
|
|
|
|
Утилита профилирования для ядра Linux (находится в дереве его исходных текстов
|
|
|
|
|
в каталоге `tools/perf`).
|
|
|
|
|
|
2019-04-21 10:05:39 +00:00
|
|
|
|
```sh
|
2019-04-22 05:13:35 +00:00
|
|
|
|
perf record --call-graph dwarf -- ./application
|
2019-04-21 10:05:39 +00:00
|
|
|
|
perf report -g graph --no-children
|
|
|
|
|
```
|
|
|
|
|
|
2019-04-20 20:24:14 +00:00
|
|
|
|
Полезные ссылки:
|
|
|
|
|
|
|
|
|
|
* [Официальная страница](https://perf.wiki.kernel.org/index.php/Main_Page)
|
|
|
|
|
* [Примеры](https://stackoverflow.com/questions/1777556/alternatives-to-gprof/10958510#10958510)
|
|
|
|
|
* [Примеры](http://www.brendangregg.com/perf.html)
|
|
|
|
|
|
2019-04-21 10:05:39 +00:00
|
|
|
|
## oprofile
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
opcontrol --setup --vmlinux=/boot/vmlinux-`uname -r`
|
|
|
|
|
```
|
2019-04-20 20:24:14 +00:00
|
|
|
|
|
|
|
|
|
## Systemtap
|
|
|
|
|
|
|
|
|
|
[Установка и простые примеры использования SystemTap](https://eax.me/systemtap/)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Valgrind
|
|
|
|
|
|
|
|
|
|
|
2019-04-22 05:13:35 +00:00
|
|
|
|
[Хорошая статья](https://eax.me/valgrind/) об использовании Valgrind для поиска
|
|
|
|
|
утечек, а также о взаимодействии с GDB.
|
|
|
|
|
|
|
|
|
|
В версии 3.15 добавление инструмент профилирования кучи DHAT (Dynamic
|
|
|
|
|
Heap Analysis Tool), позволяющий отследить все запросы на распределения
|
|
|
|
|
памяти в куче и выявить утечки ресурсов, места излишне большой активности
|
|
|
|
|
при работе с кучей, неиспользованные выделения памяти, краткосрочные
|
|
|
|
|
выделения и неэффективное размещение данных в куче.
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
valgrind --tool=dhat ./application
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2019-04-20 20:24:14 +00:00
|
|
|
|
## gperftools
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Разное
|
|
|
|
|
|
|
|
|
|
* [Профилирование кода на C/C++ в Linux и FreeBSD](https://eax.me/c-cpp-profiling/)
|
|
|
|
|
* [Примеры](http://gernotklingler.com/blog/gprof-valgrind-gperftools-evaluation-tools-application-level-cpu-profiling-linux/)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Графическое отображение
|
|
|
|
|
|
|
|
|
|
* [Flame Graphs](http://www.brendangregg.com/flamegraphs.html)
|
|
|
|
|
* [gprof2dot](https://github.com/jrfonseca/gprof2dot)
|
|
|
|
|
|