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

wib*_*arr 4 c linux timing

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

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

Eri*_*rik 7

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

unsigned long long cycleCount() {
  asm ("rdtsc");
}
Run Code Online (Sandbox Code Playgroud)

  • rdtsc在最近(最近5年)系统上是一个坏主意.CPU时钟速度可以随机变化(省电),如果内核被门控,则完全停止,并且趋于漂移.我相信Linux会努力在核心之间进行同步,但你不能依赖它.虽然......如果您只想测量一微秒的活动并且可以重复/丢弃异常值,那么它可能会有所帮助. (2认同)
  • 我发现rdtsc在OP的谈论中很短的时间间隔是非常可靠的,并且随着时间的推移完全没用. (2认同)