Какой профилировщик я должен использовать для измерения _реального_ времени (включая ожидание системных вызовов) в этой функции, а не _CPU_ - PullRequest
3 голосов
/ 22 октября 2010

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

Я ожидаю что-то вроде что-то вроде в callgrind, который вызывает clock_gettime каждую проблему.

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

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

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

Ответы [ 2 ]

2 голосов
/ 22 октября 2010

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

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

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

И когда он будет проходить по стеку, мы также увидим вызывающих.

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

0 голосов
/ 22 октября 2010

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

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

...