linux time命令微秒或更好的准确性

时间:2011-12-21 07:28:23

标签: linux time

我希望知道在linux下执行程序所需的时间(以微秒为单位)(或更高的准确性)。目前我正在使用time命令,但它以最大毫秒精度给出了我。有没有办法调整time命令以提供更好的准确性,还是有其他命令吗?

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

我同意Employed Russian's answer。对于这些措施,要求微秒精度没有多大意义。所以你得到的任何额外数字都是毫无意义的(而且基本上是随机的)。

如果您有要测量的应用程序的源代码,您可以使用clockclock_gettime函数,但不要超过十几微秒的准确度。还有RDTSC机器指令。

阅读linux clock howto

并且不要忘记执行的时间,从应用程序的角度来看,非确定性和不可再现(考虑上下文切换,缓存未命中,中断等等......随机发生)。

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

如果您想测量特定功能的时间,请了解如何profile您的应用(gprofoprofile等等...) 另请参阅this question

不要忘记阅读time(7)

请注意,当前(笔记本电脑,台式机,服务器)out-of-order pipelined superscalar处理器包含复杂CPU cachesTLB以及branch predictors ,一些微小循环或机器指令序列的执行时间是不可重复的(纳秒计数将从一次运行到下一次运行)。操作系统还增加了随机性(schedulingcontext switchesinterruptspage cachecopy-on-writedemand-paging ...)所以它不会有意义的是测量一些命令的执行时间超过一毫秒 - 或者如果你是精确的话,可能是100μs。您应该多次对命令进行基准测试。

要获得重要的衡量标准,您应该将基准测试应用程序更改为在几秒钟内运行(可能在main中添加一些循环,或者使用更大的数据集运行...),并重复基准测试命令十几次。这取决于措施的平均值(或最差,或最好,取决于你所追求的)。

如果系统time(1)不够,您可以建立自己的测量设施;另见getrusage(2);我对你得到更准确的措施持怀疑态度。

在我的i3770K最近的GNU / Linux(4.2内核,Debian / Sid / x86-64)台式计算机上BTW,“系统” - 像time(2)clock_gettime(2)这样的呼叫在大约3或4纳秒内运行(感谢vdso(7),这可以避免真正的syscall ...的负担,所以你可以经常在你的程序中使用

答案 2 :(得分:2)

使用gettimeofday - 提供微秒精度

答案 3 :(得分:0)

查看current_kernel_time()是否对您的要求有帮助。 我已经使用它并发现有用,因为它给出了纳秒级别的粒度。 更多详细信息为here