繁体   English   中英

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

[英]High precision timing in userspace in Linux

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

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

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

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

clock_gettime允许您从线程启动,进程启动或纪元获得纳秒精确的时间。

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

话虽如此,这个答案: gettimeofday()保证是微秒分辨率吗? 似乎表明使用比gettimeofday()更好的函数。

我的linux手册页告诉我

符合

SVr4,4.3BSD。 POSIX.1-2001描述了gettimeofday()而不是settimeofday()。 POSIX.1-2008将gettimeofday()标记为已过时,请改为使用clock_gettime(2)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM