Какой профилировщик я должен использовать для измерения времени _real_ (включая ожидание Syscalls) потратить на эту функцию, а не _cpu_ One

StackOverflow https://stackoverflow.com/questions/3992587

Вопрос

Приложение не рассчитывает вещи, но вводится вводом/выводом файлов, использует сеть. Я хочу, чтобы Profiler показал это.

Я ожидаю чего -то вроде чего в Callgrind, который вызывает clock_gettime каждый Probly.

Или как Oprofile, что прерывает Мое приложение (пока оно спит или ждет сокета/файла/что угодно), чтобы увидеть, что оно делает.

Я хочу такие вещи, как «читать», «подключиться», «наноссы», «Отправить» и особенно «fsync» (И все их абоненты) быть жирным шрифтом (не такие вещи, как строка или числовые функции, которые выполняют расчеты).

Платформа: GNU/Linux @ i386

Это было полезно?

Решение

Быстро взломал тривиальную профилировку выборки для Linux: http://vi-server.org/vi/simple_sampling_profiler.html

Он добавляет backtrace(3) в файл на SIGUSR1, а затем преобразует его в аннотированный источник.

Поскольку она периодически исследует программу, мы увидим функции, которые что -то ждут.

И когда он идет в стек, мы тоже увидим абонентов.

Также люди из ответов на подобные вопросы рекомендуют Zoom.

Другие советы

Нет реального способа ответить на этот вопрос, не зная вашей платформы и немного больше о том, что вы пытаетесь сделать.

Когда я работаю на платформе Intel, мне нравится использовать Счетчик марки времени (RDTSC). Анкет Трудно победить в списке в диапазоне субмикросекунды. Я просто позвонил в него до и после куски кода и сравниваю разницу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top