作ったスクリプトやプログラムの実行時間を知りたいときに使えるのがtime
コマンドです。timeコマンドの見方と、使い方についてメモを残しておきます。
実行例としてperlとc言語で1から1000000000の総和を計算してみました。
#0. 環境
システム | バージョン |
---|---|
Mac OS X | 10.9.4 |
perl | v5.16.2 |
clang | clang-503.0.40 |
#1. timeコマンドとは
time
コマンドはコマンド・プログラムを引数としてとり、引数として指定したコマンド・プログラムが実行されるのにどれだけ時間がかかった出力するコマンドです。
具体的にsleep 10
で試してみましょう。
$ time sleep 10
real 0m10.002s
user 0m0.001s
sys 0m0.002s
time
が出力するreal
, user
, sys
はそれぞれ次のような意味になります。
項目 | 意味 |
---|---|
real | プログラムの呼び出しから終了までにかかった実時間(秒) |
user | プログラム自体の処理時間(秒)(ユーザCPU時間) |
sys | プログラムを処理するために、OSが処理をした時間(秒)(システム時間) |
なのでsleep 10
はプログラム呼び出しから終了までに10.002秒がかかったが、sleep 10
自体の処理には全然CPUが使われていないことがわかります。
(※ここで注意ですが、ネットワークI/Oの待ち時間やディスクI/Oの待ち時間はreal
には反映されますが、sys
には反映されません。)
#2. 総和プログラムで実行時間の比較
ここでは実例としてperl
とC言語(clang)
で、1から1000000000まで総和を求めて出力するプログラムの実行時間をそれぞれ求めます。
##2.1 perl
試したコード
#!/usr/bin/perl
use strict;
use warnings;
my $sum;
foreach my $num (1..1000000000)
{
$sum += $num;
}
print $sum;
$ time ./cnt.pl
500000000500000000
real 0m59.037s
user 0m58.997s
sys 0m0.029s
約1分ほどかかっています。
##2.2 clang
試したコード
#include <stdio.h>
int main(void){
long long int sum = 0;
long int i;
for(i=1;i<=1000000000;i++){
sum +=i;
}
printf("%lld", sum);
return 0;
}
$ clang cnt.c -o cnt.out
$ time ./cnt.out
500000000500000000
real 0m2.567s
user 0m2.559s
sys 0m0.006s
約2.6秒で計算が完了しています。