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

Pus*_*ade 5 linux time

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

Emp*_*ian 8

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

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

  • @Guidance因为在非实时操作系统上运行的代码没有确定执行.所需要的只是操作系统处理一些IP数据包,或者运行另一个仲裁进程,或者知道它是否应该执行某些操作,或者文件系统决定它应该写出脏页等等. '时间暂停一段时间(少量),时间关闭.OS的内置时序(例如CPU时间(与挂钟时间相反))通常也计入具有一定分辨率的时间片(通常为1个内核,1个毫秒或更长) (5认同)
  • `time /bin/sleep 0.006` 的快速测试似乎表明噪音小于 1 毫秒。因此,尽管这样的测量绝对是危险的,但Guanidene 的要求本身并非毫无意义。 (2认同)

Bas*_*tch 5

我同意俄商务部的回答。想要微秒级精度用于此类措施没有多大意义。因此,您获得的任何其他数字都是没有意义的(基本上是随机的)。

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

阅读linux clock howto

并且不要忘记执行时间是从应用程序角度来看的,是不确定的和不可复制的(考虑上下文切换,高速缓存未命中,中断等……在随机时间发生)。

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

如果要衡量特定功能的时机,学习如何配置文件的应用程序(gprofoprofile等等...)又见这个问题

别忘了看时间(7)

请注意,在具有复杂CPU高速缓存以及TLB分支预测变量的当前(笔记本电脑,台式机,服务器)乱序 流水线 超标量处理器上,某些微小循环或机器指令序列的执行时间不可重现(纳秒级计数将从一次运行到下一次运行)。操作系统还增加了随机性(调度上下文切换中断页面缓存写时复制按需分页...),因此以超过一毫秒(如果您很幸运的话,也许是100µs)来测量某些命令的执行精度没有任何意义。您应该多次对命令进行基准测试。

要采取重要措施,您应该将基准测试应用程序更改为在几秒钟内运行(也许在中添加一些循环main,或者使用更大的数据集运行...),然后重复基准测试命令十次。采取平均(或最差,或最好,取决于您追求的)措施。

如果系统时间(1)不够用,您可以自己做测量工具;参见getrusage(2) ; 我对您获得更准确的衡量标准表示怀疑。

在我的i3770K最近的GNU / Linux(4.2内核,Debian / Sid / x86-64)台式计算机上,BTW,诸如time(2)clock_gettime(2)之类的“系统” 调用运行大约3或4纳秒(感谢vdso( 7)避免了真正的系统调用的负担...),因此您可以程序中经常使用它们。