Самая близкая вещь к профилированию без вмешательства наблюдателя - oprofile
. Но он не может напрямую измерять интервалы; он только дает вам статистическую карту того, где вся программа (или вся система) тратит свое время.
Если вам действительно нужен дешевый интервал, на x86 вы можете использовать инструкцию rdtsc
во встроенном asm.
static inline unsigned rdtsc()
{
unsigned x;
__asm__ __volatile__ ( "rdtsc" : "=a"(x) : : "edx" );
return x;
}
Используйте это, чтобы сохранить метку времени до и после и принять разницу. Вы можете изменить этот код, чтобы сохранить полный 64-битный результат, но я выбрал только 32-битный результат, предполагая, что вы будете использовать временные интервалы короче 4 миллиардов циклов и не хотите тратить время на 64-битное вычитание.