linux的时间命令微秒或更好的精度

我希望知道在linux下以微妙(或更好的准确性)执行程序的时间。 目前我使用的是time命令,但它给了我最大的毫秒精度。 有什么办法来调整time命令,以提供更好的准确性,还是有一些其他的命令相同?

Solutions Collecting From Web of "linux的时间命令微秒或更好的精度"

你的问题是毫无意义的:即使在几毫秒的时间内,你也不会重复测量。

增加更多数字只会增加噪音。 你也可以从/dev/random取出额外的数字。

我同意俄罗斯就业的答案 。 这种措施要求微秒精度没有多大意义。 所以你得到的任何额外的数字是没有意义的(和基本上是随机的)。

如果你有测量应用程序的源代码,你可以使用clock或clock_gettime函数,但是不要期望超过十几微妙的精度。 还有RDTSC机器指令。

阅读linux时钟howto 。

不要忘记,从应用程序的角度来看,执行的时机是非确定性和不可复制的(考虑关于上下文切换,缓存未命中,中断等等随机发生的事情)。

如果要测量整个程序的性能,使其运行至少几秒钟,然后测量几次(例如8次)的时间,并取平均值(可能下降最佳和最差的时间)。

如果你想测量特定功能的时间,学习如何分析你的应用程序( gprofoprofile等等)。另见这个问题

不要忘了读时间(7)

请注意,在目前的(笔记本电脑,台式机,服务器) 乱序 流水线 超标量处理器具有复杂的CPU缓存和TLB和分支预测器 ,一些微小的循环或机器指令序列的执行时间不可重现(纳秒计数将从一次跑到下一次跑)。 操作系统还增加了随机性( 调度 , 上下文切换 , 中断 , 页面缓存 , 写入时拷贝 , 请求分页 …),因此测量一个命令执行超过一毫秒毫无意义 -或者如果你很幸运的话,精度可能是100μs。 你应该多次测试你的命令。

为了获得重要的措施,您应该将基准测试的应用程序更改为在几秒钟之内运行(可能会在main添加一些循环,或者使用更大的数据集运行…),并重复基准测试命令十几次。 采取措施的意思是(或者最糟糕的,或者最好的,取决于你以后的情况)。

如果系统时间(1)不够用,你可以建立自己的测量设备; 另见getrusage(2) ; 我怀疑你采取了更准确的措施。

顺便说一下,在我的i3770K最近的GNU / Linux(4.2内核,Debian / Sid / x86-64)台式电脑上,系统像time(2)或clock_gettime(2)这样的调用运行在大约3或4纳秒(感谢vdso 7)避免真正的系统调用的负担…),所以你可以你的程序中经常使用它们。

使用gettimeofday – 提供微秒精度

查看current_kernel_time()是否对您有所帮助。 我已经使用它,发现有用的,因为它提供粒度纳秒级别..更多细节在这里 。