с - замер времени выполнения

SCIF32

gcc version 3.3.5 (Debian 1:3.3.5-12)
как грамотно осуществлять замер времени выполнения процесса?
хотелось бы иметь неплохую точность (миллисекунды не устраивают - микро или нано)
сейчас использую times, но вроде получается, что он измеряет с точностью до миллисекунд.
пробовал gettimeofday --- но эта ф-я просто измеряет время. А мне хотелось бы следить только за временем процесса.

enochka1145

Это шутка?
Какое значение в многозадачной среде имеют микро- и наносекунды?
Тем не менее, может, профайлер тебе поможет?

rosali

Keywords: PAPI

SCIF32

описываю подробнее:
висит у меня сервер, значит.
запросы выполняются.
запрос выполняется на некотором количестве "УЗЛОВ". Этих "УЗЛОВ" сейчас порядка сотни.
запрос выполняется порядка секунды.
хотелось бы проанализировать --- какие "УЗЛЫ" обсчитываются больше времени, какие меньше.
но в принципе так и думал, ничего хорошего придумать тут нельзя.

rosali

Какое значение в многозадачной среде имеют микро- и наносекунды?
А в чем проблема? Во-первых можно написать модуль к ядру, который поможет считать только то что нужно, и такие модули есть. Во-вторых если ты прогонишь некоторую последовательность инструкций 1000 раз и обнаружишь, что 999 раз она исполнялась 666 тактов, а 1 раз - 66666 тактов, согласись ты догадаешься к чему бы это.
PS. возможно вместо изучения PAPI проще будет заботать RDTSC. Но PAPI все-таки значительно более ценный опыт.

enochka1145

А запросы какие? SQL-?
Под узлами понимаются, э-э..., вложенные функции?

SCIF32

НЕА, свои запросы, своя база.

sergey_m

> хотелось бы проанализировать --- какие "УЗЛЫ" обсчитываются больше времени, какие меньше.
Мне кажется, лучше был бы статистический подход. Нужно "прерывать" программу несколько сотен раз в секунду и смотреть в каком "УЗЛЕ" она сейчас работает. Потом посмотреть с какой частотой попадаем в какие "УЗЛЫ". Для userland программы можно попробовать сигналы в качестве "прерываний".

Marinavo_0507

Вроде ж профайлеры именно так делают (я юзерлэнд никогда не профилировал, точно не знаю)?
Тогда достаточно скомпилировать прогу с поддержкой профилирования.

rosali

Вроде ж профайлеры именно так делают
Да, есть такой профайлер! OProfile называецца.
Тогда достаточно скомпилировать прогу с поддержкой профилирования.
Нет, как раз перекомпилировать нужно если хочешь _полную_ информацию собирать. А статистическую OProfile собирает без перекомпиляции, хоть libc профилируй, хоть вообще ядро
Оставить комментарий
Имя или ник:
Комментарий: