首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linux时间命令微秒或更高的精度

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

Stack Overflow用户
提问于 2011-12-21 15:28:23
回答 4查看 12.7K关注 0票数 8

我想知道在linux下执行一个程序所需的时间(以微秒为单位)(或更准确)。目前我使用的是time命令,但它给我的最大精度是毫秒。有没有办法调整time命令以提供更好的准确性,或者是否有其他命令可以做到这一点?

EN

回答 4

Stack Overflow用户

发布于 2011-12-21 15:34:33

你的问题是没有意义的:你不会得到重复的测量,即使在毫秒的时间报告。

添加更多的数字只会增加噪声。你也可以从/dev/random中提取额外的数字。

票数 9
EN

Stack Overflow用户

发布于 2011-12-21 16:42:33

我确实同意Employed Russian's answer的观点。对于这样的测量,想要微秒级的精度是没有多大意义的。所以你得到的任何额外的数字都是没有意义的(本质上是随机的)。

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

阅读linux clock howto

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

如果你想测量整个程序的性能,让它至少运行几秒钟,并测量几次(例如8次)时间,然后取平均值(可能会去掉最佳和最差的时间)。

如果你想测量特定功能的计时,学习如何profile你的应用程序(gprofoprofile等)另请参阅this question

别忘了阅读time(7)

请注意,在当前(笔记本电脑、台式机、服务器)具有复杂CPU cachesTLBbranch predictorsout-of-order pipelined superscalar处理器上,一些微循环或机器指令序列的执行时间是不可重现的(每次运行纳秒计数都会有所不同)。操作系统还增加了随机性(schedulingcontext switchesinterruptspage cachecopy-on-writedemand-paging ...)因此,用超过1毫秒的-or来测量某些命令的执行是没有任何意义的,如果幸运的话可能是100µs -精度。您应该对您的命令进行多次基准测试。

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

如果系统time(1)不够,您可以制作自己的测量工具;另请参阅getrusage(2);我对您获得更准确的测量结果持怀疑态度。

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

票数 5
EN

Stack Overflow用户

发布于 2012-03-01 14:06:06

使用gettimeofday -提供微秒精度

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8586354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档