Мое понимание - то, что по умолчанию gprof принимает во внимание процессорное время. Существует ли способ заставить это представлять на основе тактового стеной времени?
Моя программа делает много диска i/o, таким образом, процессорное время, которое это использует только, представляет часть фактического времени выполнения. Я должен знать, какие части диска i/o поднимают большую часть времени.
gprof этого не сделает. Посмотрите на это.
В двух словах: Под gdb, запустите его и сделайте Ctrl-Break или Ctrl-C 10 раз наугад, и отобразите стек вызовов. Если ввод/вывод занимает (например) 60% времени, то (примерно) в 6 из 10 пауз вы увидите это в процедуре writebuf или readbuf, а строки кода, запрашивающие этот ввод/вывод, будут четко отображены на стеке.
Вы также можете использовать lsstack для получения той же информации.
Вы можете использовать strace или cachegrind, чтобы правильно профилировать код. strace даст вам подробную информацию о времени, потраченном на системные вызовы, а cachegrind даст подробный анализ использования ресурсов.