Linux中用户空间的高精度计时

时间:2011-03-02 08:35:10

标签: c linux timing

现在,我正在尝试确定一种方法来衡量特定函数的时间(类似于pthread_create)。当然,现在,这些类型的功能都经过了极大的优化,以尽可能少地占用时间;事实上,我的计时器在用户空间中使用gettimeofday以微秒为单位的计量器无法充分测量任何东西。

通常,如果我可以搞乱内核,我会使用像get_cycles这样的东西来测量原始周期数作为性能指标。但是,我还没有找到在用户空间中执行此操作的方法。有没有办法使用get_cycles(或等效的)或其他更高精度的计时器,我可以在用户空间中使用它来测量极快的功能?

4 个答案:

答案 0 :(得分:6)

使用RDTSC(如果您使用的是x86)或clock_gettime

unsigned long long cycleCount() {
  asm ("rdtsc");
}

答案 1 :(得分:4)

clock_gettime允许您从线程开始,进程开始或时期获得纳秒精确的时间。

答案 2 :(得分:2)

你是否尝试过花费时间来执行你的功能,比如10000次并取平均值?这样可以省去寻找更准确的计时功能的麻烦。

话虽如此,这个答案:Is gettimeofday() guaranteed to be of microsecond resolution?似乎表明使用的函数比gettimeofday()更好。

答案 3 :(得分:1)

我的linux手册页告诉我

  

遵守

     

SVr4,4.3BSD。 POSIX.1-2001描述   gettimeofday()但不是   settimeofday()强制。 POSIX.1-2008标志   gettimeofday()已过时,   推荐使用   而不是clock_gettime(2)。