Posted at

timeコマンドでプログラムの実行時間を知る

More than 5 years have passed since last update.

作ったスクリプトやプログラムの実行時間を知りたいときに使えるのが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. 総和プログラムで実行時間の比較

ここでは実例としてperlC言語(clang)で、1から1000000000まで総和を求めて出力するプログラムの実行時間をそれぞれ求めます。


2.1 perl

試したコード


cnt.pl

#!/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

試したコード


cnt.c

#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秒で計算が完了しています。