我想知道在微秒(或更好的精度)linux下一个程序的执行所花费的时间量。目前我正在使用time
命令,但它以最大毫秒精度给出了我。有什么方法可以调整time
命令来提高精度,还是有其他一些命令吗?linux的时间命令微秒或更好的精度
回答
你的问题没有意义:即使在几毫秒的时间内报告,你也不会得到重复的测量结果。
添加更多数字只会增加噪音。您不妨从/dev/random
中拉出额外的数字。
看看current_kernel_time()是对你有帮助在您的要求。 我用了一下,发现有用的,因为它使粒度毫微秒级.. 更多细节here。
我与Employed Russian's answer同意。对于这些措施而言微妙的准确度没有多大意义。所以你得到的任何额外数字都是没有意义的(并且基本上是随机的)。
如果您有要测量的应用程序的源代码,您可以使用clock或clock_gettime函数,但不希望超过十几微妙的准确度。还有RDTSC机器指令。
不要忘记,从应用程序的角度来看,执行时间是非确定性和不可复制的(考虑上下文切换,缓存未命中,中断等等......随机发生)。如果要测量整个程序的性能,使其运行至少几秒钟,然后测量几次(例如8次)的时间,并取平均值(可能会丢弃最好的最差时间)。
如果要衡量特定功能的时机,学习如何profile您的应用程序(gprof
,oprofile
等等...) 参见this question
不要忘记阅读time(7)
要意识到目前的(笔记本电脑,台式机,服务器)out-of-orderpipelinedsuperscalar处理器与复杂CPU caches和TLB和branch predictors,一些微小的循环或机器指令序列的执行时间s不可重现(纳秒计数将随着运行而变化)。和OS还增加了随机性(scheduling,context switches,interrupts,page cache,copy-on-write,demand-paging ...),所以它没有任何意义,如果你是lucky-超过一毫秒来衡量一些命令的执行 - 或者也许100μS的精度。你应该多次测试你的命令。要获得重要的措施,您应该将基准测试应用程序更改为在几秒钟内运行(也许在main
中添加一些循环,或者运行更大的数据集...),然后重复基准测试命令倍。采取措施的意思是(或者最糟糕的,或者最好的,这取决于你在做什么)。
如果系统time(1)是不够的,你可能会建立自己的测量工具;另见getrusage(2);我对你采取更准确的措施表示怀疑。
BTW我i3770K最近的GNU/Linux(4.2内核的Debian/SID/x86-64的)台式电脑, “系统” -calls像 time(2)或 clock_gettime(2)运行在约3或4纳秒(感谢 vdso(7)这避免了一个真正的syscall ......)的负担,所以你可以使用它们你的程序很频繁。
使用gettimeofday - 给出微秒精度
- 1. 微秒准确(或更好)的Linux进程时序
- 2. 如何以微秒精度计算操作时间
- 3. Actionscript 3高精度时间方法(微秒)?
- 4. QT解析时间戳与微秒级精度
- 5. Linux命令获取以毫秒为单位的时间
- 6. 窗口微秒计算精度
- 7. 经过时间20毫秒精度
- 8. 配置Windows时间高(亚秒)精度
- 9. linux时间格式命令
- 10. 减少时间序列毫秒的时间精度
- 11. Linux时间命令输出的差异
- 12. PHP日期时间由负UNIX时间戳与微秒毫秒/微秒
- 13. 为什么MySQL不支持毫秒/微秒精度?
- 14. Boost - 使用时间戳格式化子秒精度时间
- 15. 如何获得毫秒或微秒加载时间在MySQL
- 16. 在微秒或毫秒中获取时间差在PHP中
- 17. 秒和微秒(Unix时间)到DateTimeOffset
- 18. 转换秒至日期时间,不丢弃微秒的精度,使用利用大熊猫to_datetime
- 19. sybase上的日期时间列上的纳秒级精度
- 20. 要从ps命令中获取Linux中的进程时间或已用时间
- 21. 使用Oracle,从微秒到6秒的时间间隔
- 22. C中的当前微秒时间?
- 23. 微秒中的时间日期差异
- 24. 构建日期时间的一种更好的方法,其精度高于毫秒
- 25. 更好的Windows命令?
- 26. 的Java毫秒精度
- 27. 格式时间从秒到毫秒:秒:毫秒:微秒
- 28. 比较R中的纳秒精度时间戳
- 29. 如何以纳秒精度获得PHP的时间?
- 30. 在Google App Engine中以1秒的精度跟踪时间
我不明白你的观点。我说我想要的精度要好于毫秒,这在今天的处理器上不是不可能的,我们甚至可以达到几纳秒的精度。如何添加更多数字会增加更多噪音? – 2011-12-21 08:31:02
@指导因为在非实时操作系统上运行的代码没有确定性执行。所需要的只是操作系统处理一些IP数据包,或运行另一个仲裁进程,或者crond唤醒以检查它是否应该执行某些操作,或者文件系统决定它应该写出脏页等,重新计时暂停了一段时间(少量),计时结束。操作系统的内置时序(例如CPU时间(与挂钟时间相对))通常也以具有一定分辨率的时间片计数(通常为1个内核刻度,1毫秒或更多) – nos 2011-12-21 08:53:19
快速测试时间/ bin/sleep 0.006'似乎表明噪声小于1毫秒。所以虽然这样的测量确实是危险的,但Guanidene的要求本身并不是毫无意义的。 – 2015-09-28 13:29:59