Процент выполнения кода профиля C (построчная аннотация)
Мне нужно профилировать пару кодов C и получить аннотированный файл с процентом времени выполнения, взятого каждой строкой или по крайней мере для каждого блока (while/if-else/for-functions) и т. Д.
До сих пор я изучал valgrind (callgrind), gperf и некоторые другие инструменты. Пока что я получаю
- Подсчет каждой функции или строки исходного кода, например, сколько раз она выполняется.
- Или процент графа.
- Или время выполнения каждого вызова функции.
Что мне действительно нужно, однако, если процент времени выполнения не считается, и это должно быть для каждой строки исходного кода или по крайней мере для всех блоков (while/if-else/for-functions).
Может кто-нибудь сообщить мне, как я могу это сделать?
Спасибо,
2 ответа
Я верю perf(1)
(часть linux-tools-common
пакет в Ubuntu) получит то, что вы хотите. Он использует основанную на ядре подсистему, называемую Счетчики производительности для Linux, включенную в более новые ядра. Более подробную информацию можно найти здесь.
Простой пример использования ниже. Убедитесь, что скомпилированы с отладочными символами.
$ perf record ./myprogram arg1 arg2
$ perf report
Вам нужно что-то, что сэмплирует стек, как по времени процессора, так и по часам, если вы хотите включить ввод / вывод. Вам не нужна особенно высокая частота дискретизации.
Каждый образец стека представляет собой список местоположений кода, некоторые из которых можно отследить до строк в коде.
Включающая процентная стоимость строки кода - это просто количество выборок стека, которые его содержат, деленное на общее количество выборок стека (умноженное на 100).
Полезность этого в том, что он говорит вам, какой процент общего времени вы могли бы сэкономить, если бы могли избавиться от этой строки.
Исключительный процент - это доля выборок, где эта строка появляется в конце.
Если строка кода появляется более одного раза в образце стека, это все еще только один образец, содержащий ее. (Это заботится о рекурсии.)
Какие инструменты могут сделать это? Может быть oprofile
, Конечно Zoom
,