UNIXコマンドにソフトウェアの実行時間を測定するtime(1)コマンドがありますが、
最近timeコマンドはシェル内臓の簡易版であることを知りました。
で、何を使うかというと、システムコマンドの/usr/bin/time
。
何が違うかというと情報量が違います。
システムコマンドの方には-p
や--verbose
のオプションがあり、
-p
オプションではreal(実時間)、user(カーネル関数以外でかかったCPU時間)、
sys(カーネル関数にかかった時間)がわかるらしいです。
--verbose
だとめっちゃわかります。
手前の書きなぐりスニペットからニュートン法のプログラムを使いまして、 timeコマンドの実行例を示したいと思います。
#!/usr/bin/env python3
# coding: utf-8
def newton_sqrt(n, x=1.0, err=0.00001):
while True:
res = x - (x**2 - n) / (x*2)
if abs(res - x) < err:
return res
x = res
if __name__ == "__main__":
print(newton_sqrt(5))
$ time python3 mymath.py
2.236067977499978
python3 mymath.py 0.03s user 0.01s system 90% cpu 0.041 total
ちょっと見づらいです。
$ /usr/bin/time python3 mymath.py
2.236067977499978
0.03 real 0.02 user 0.00 sys
どうやらBSDの/usr/bin/time
はオプションなしでも3種わかるみたいです。
$ /usr/bin/time -p python3 mymath.py
2.236067977499978
real 0.03
user 0.02
sys 0.00
$ /usr/bin/time -l python3 mymath.py
2.236067977499978
0.04 real 0.03 user 0.00 sys
6750208 maximum resident set size
0 average shared memory size
0 average unshared data size
0 average unshared stack size
2115 page reclaims
0 page faults
0 swaps
0 block input operations
0 block output operations
0 messages sent
0 messages received
0 signals received
0 voluntary context switches
72 involuntary context switches
man読む限りだとBSDでは(OSXだけど)-l
オプションのようです。
longオプションですかね。
とりあえずこのように走らせたユーティリティのリソースの詳細情報がわかります。
Linuxの/usr/bin/time
コマンドは-o
オプションで出力できるらしいです。
複数回行って整合性をとることもできるものと思いますが、
そこまでのことをすることはないんじゃないかなと思います。
他ソフトから管理してプロファイルするときに使うかな?