我正在使用 GNU 时间进行基准测试,并希望测量实际时间、用户时间和系统时间,精确到毫秒。也就是说,我想测量秒到小数点后 3 位,而不是默认的 2 位。GNU 时间提供这样的选项吗?
答案1
看起来你不能,手册页确实列出了许多格式选项,但没有提供设置准确性的规定。例如,%e
、%S
和%U
似乎总是给出带有两位小数的输出。
另一方面,Bash 的内置函数time
确实支持设置小数点后的位数,最多 3 位,因此您也许可以使用它来获得您想要的结果。环境TIMEFORMAT
变量控制输出格式:
$ TIMEFORMAT='real: %3R user: %3U sys: %3S cpu: %P' bash -c 'time sleep 1.233'
real: 1.234 user: 0.000 sys: 0.000 cpu: 0.00
或者只是不设置TIMEFORMAT
,因为默认输出也显示三位数字。但它确实分开了分钟:
$ bash -c 'time sleep 1.233'
real 0m1.234s
user 0m0.000s
sys 0m0.000s
这getrusage()
系统调用给出的时间为struct timeval
,因此最多为微秒,所以我想您可以自己实现 以time
获得更高的准确性。另一件事是这些数字实际上有多准确。