我有一个脚本,使用bash builtin命令测量程序的执行时间time.
我试图理解这个命令的精度:据我所知它以毫秒为单位返回精度,但它使用的getrusage()函数返回一个以微秒为单位的值.但是阅读本文,实际精度仅为10毫秒,因为getrusage采样时间取决于刻度(= 100Hz).这篇论文真的很老了(它提到Linux 2.2.14在Pentium 166Mhz上运行,内存为96Mb).
是time仍然使用getrusage()100赫兹蜱或者是在现代系统更精确?
测试机器正在运行Linux 2.6.32.
编辑:这是一个稍微修改过的版本(也应该在老版本的GCC上编译)的muru代码:修改变量'v'的值也改变度量之间的延迟以便发现最小粒度.大约500,000的值应该在相对较新的cpu上触发1ms的更改(第一版i5/i7 @~2.5Ghz)
#include <sys/time.h>
#include <sys/resource.h>
#include <stdio.h>
void dosomething(){
long v = 1000000;
while (v > 0)
v--;
}
int main()
{
struct rusage r1, r2;
long t1, t2, min, max;
int i;
printf("t1\tt2\tdiff\n");
for (i = 0; i<5; i++){
getrusage(RUSAGE_SELF, &r1);
dosomething();
getrusage(RUSAGE_SELF, &r2);
t1 = r1.ru_stime.tv_usec + r1.ru_stime.tv_sec*1000000 + r1.ru_utime.tv_usec + r1.ru_utime.tv_sec*1000000;
t2 …Run Code Online (Sandbox Code Playgroud)