2019-06-01 21:08:41 +00:00
|
|
|
|
= Профилирование кода
|
|
|
|
|
:category: Программирование
|
|
|
|
|
:tags: программирование, отладка, производительность, профилирование, gprof,
|
|
|
|
|
|
|
|
|
|
== Общее описание
|
|
|
|
|
|
|
|
|
|
Чтобы профилировать приложения, компилируемые http://gcc.gnu.org[GCC],
|
|
|
|
|
необходимо добавлять флаг `-fno-omit-frame-pointer` и, желательно, `-g`.
|
|
|
|
|
|
|
|
|
|
== quickstack
|
|
|
|
|
|
|
|
|
|
Утилита для отслеживания стеков вызовов функций
|
|
|
|
|
https://github.com/yoshinorim/quickstack[quicktrack]. Пример
|
|
|
|
|
использования:
|
|
|
|
|
|
|
|
|
|
[source,sh]
|
|
|
|
|
----
|
|
|
|
|
quickstack -f -p $(pidof application)
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
== perf
|
|
|
|
|
|
|
|
|
|
Утилита профилирования для ядра Linux (находится в дереве его исходных
|
|
|
|
|
текстов в каталоге `tools/perf`).
|
|
|
|
|
|
|
|
|
|
[source,sh]
|
|
|
|
|
----
|
|
|
|
|
perf record --call-graph dwarf -- ./application
|
|
|
|
|
perf report -g graph --no-children
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
Полезные ссылки:
|
|
|
|
|
|
|
|
|
|
* 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[Примеры]
|
|
|
|
|
|
|
|
|
|
== oprofile
|
|
|
|
|
|
|
|
|
|
[source,sh]
|
|
|
|
|
----
|
2019-06-02 23:26:28 +00:00
|
|
|
|
opcontrol --setup --vmlinux=/boot/vmlinux-`uname -r`
|
2019-06-01 21:08:41 +00:00
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
== Systemtap
|
|
|
|
|
|
|
|
|
|
https://eax.me/systemtap/[Установка и простые примеры использования
|
|
|
|
|
SystemTap]
|
|
|
|
|
|
|
|
|
|
== Valgrind
|
|
|
|
|
|
|
|
|
|
https://eax.me/valgrind/[Хорошая статья] об использовании Valgrind для
|
|
|
|
|
поиска утечек, а также о взаимодействии с GDB.
|
|
|
|
|
|
|
|
|
|
В версии 3.15 добавление инструмент профилирования кучи DHAT (Dynamic
|
|
|
|
|
Heap Analysis Tool), позволяющий отследить все запросы на распределения
|
|
|
|
|
памяти в куче и выявить утечки ресурсов, места излишне большой
|
|
|
|
|
активности при работе с кучей, неиспользованные выделения памяти,
|
|
|
|
|
краткосрочные выделения и неэффективное размещение данных в куче.
|
|
|
|
|
|
|
|
|
|
[source,sh]
|
|
|
|
|
----
|
|
|
|
|
valgrind --tool=dhat ./application
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
== gperftools
|
|
|
|
|
|
|
|
|
|
== Разное
|
|
|
|
|
|
|
|
|
|
* https://eax.me/c-cpp-profiling/[Профилирование кода на C/C++ в Linux и
|
|
|
|
|
FreeBSD]
|
|
|
|
|
* http://gernotklingler.com/blog/gprof-valgrind-gperftools-evaluation-tools-application-level-cpu-profiling-linux/[Примеры]
|
|
|
|
|
|
|
|
|
|
== Графическое отображение
|
|
|
|
|
|
|
|
|
|
* http://www.brendangregg.com/flamegraphs.html[Flame Graphs]
|
|
|
|
|
* https://github.com/jrfonseca/gprof2dot[gprof2dot]
|