アメリエフの技術ブログ

Amelieff Staff Blog

timeコマンドで計算時間とメモリを調査

東京都港区、新人OLさんからのお便りです。

こんにちは。いつも楽しくブログよんでいます。
Cufflinksというソフトウェアの、解析にかかる時間と最大メモリを調べたいのですが、簡単なコマンドはありませんか?
これからもがんばってください。

こんにちは。いつもありがとうございます。

お便りは自作自演ですが、今回は time コマンドをご紹介します。 time コマンドは、計測したいコマンドの前につけると、コマンドの実行にかかった時間を表示してくれるコマンドです。

timeコマンド

実は同名のコマンドが二つあり、シェルによって多少異なるようですが、
bash では、
組み込みコマンドの $ time (以下、無印time) と、
GNU版の $ /usr/bin/time (以下、GNUtime)が使えます。
GNUtimeは、サーバによっては入っていたりいなかったりします。(インストール方法は後述)
そして、このGNUtime を使用すると、実行時間だけでなく、メモリ使用量なども調べることができます。

実行してみましょう。

$ /usr/bin/time ls
R     bin     log     src     testdata
0.00user 0.00system 0:00.00elapsed 50%CPU (0avgtext+0avgdata 984maxresident)k
0inputs+0outputs (0major+312minor)pagefaults 0swaps

-p オプションをつけると、無印time と同じ出力になります。

$ /usr/bin/time -p ls
R     bin     log     src     testdata
real 0.00
user 0.00
sys 0.00

-f オプションで、時間、メモリなどを任意の形式で出力させることができます。
せっかくなので、お便りにあった、Cufflinks の解析にかかる時間と最大メモリを調べてみましょう。
下のコマンドで、-f " "内の%Mは最大メモリ使用量(キロバイト単位)、%E は実時間([hours:]minutes:seconds の形式)が入ります。

$ usr/bin/time -f "Memory:%M KB time:%E" cufflinks -p 4 -o result/sample -g GRCm38/genes.gtf -M GRCm38/mask.gtf  data/sample_sorted.bam
:
> Map Properties:
>       Normalized Map Mass: 32990420.77
>       Raw Map Mass: 32990420.77
>       Fragment Length Distribution: Truncated Gaussian (default)
>                     Default Mean: 200
>                  Default Std Dev: 80
[18:39:32] Assembling transcripts and estimating abundances.
> Processed 187507 loci.                       [*************************] 100%
Memory:3895128 KB time:45:54.24

メモリは約3.7GB、時間は約45分かかったようです。

他にも出力フォーマットは様々あり、
Webサイトやmanコマンド $ man /usr/bin/time で調べることができますよ。

新人OLさんも、ぜひ使ってみてくださいね。

GNUtime のインストール

ダウンロードはこちらから https://ftp.gnu.org/gnu/time/

wget https://ftp.gnu.org/gnu/time/time-1.9.tar.gz  #執筆時点で最新
tar zxvf time-1.9.tar.gz
cd time-1.9

中に INSTALL というファイルがあるので、目を通しましょう。
書いてあるとおりにINSTALLしていけばOKです。

./configure
make
make check  # 任意
make install  # sudo権限が必要な場合が多い。
make installcheck  # 任意

ln -s path/to/time-1.9/time ~/bin/   # 権限がない場合は、自分のわかりやすい場所に置きます。

参考

以下を参考にしました。ありがとうございました。

GNU Time - GNU Project - Free Software Foundation

timeコマンドにはシェルの組み込みコマンドとGNU版の2種類ある -- ぺけみさお

timeコマンドについて調べた