Linux上でプログラムの実行時間を計測する場合、timeコマンドを使用します。
私の場合、CentOS上で動作させることが多いのですが、その際に使用するのがtimeコマンドなのですが、bashに組み込まれているtimeコマンドが勝手に(当然ですが・・・)使われてしまいます。
そんな愚かな私のために、メモを残しておきます。
timeコマンドは、/usr/bin/timeを使用します。
いっそのこと、aliasで切りなおしたろか!?と思うくらいwww
で、使用方法はmanページに任せるとして、詳細な計測結果を以下のオプション付きコマンドで得ることが可能です。
$ /usr/bin/time -v command
-vオプションを指定することで、詳細な計測結果を出力してくれます。
その際、気になるのが以下の項目です。
Maximum resident set size 直訳すると、最大使用実メモリサイズ?となるのでしょうか?
ps auxで得られるメモリ使用量と比較してみても、大きく値に隔たりがあります。
起動時に使用するメモリが大きいのか?そんなはずはない!・・・ということで調べてみることに・・・・
Voluntary context switches この値が影響しているみたいです。
本当かどうかは微妙ですが、コンテキストスイッチが行われると、使用メモリも移動してしまう?そのために、Voluntary context switchesの値を掛けた値がMaximum resident set sizeになっているようだ。
つまり、Maximum resident set sizeをVoluntary context switchesで割った値が実質的な最大使用メモリサイズになる。
<まとめ>
/usr/bin/time -v command
で計測された結果で実行時間の計測が可能。
実質的な使用最大メモリは、
Maximum resident set size / Voluntary context switches
となる。
ps auxやpmapsで確認すると、概ね正しい結果をえられる。
今時のPCで数キロ単位のメモリ消費が異なっていても誤差にしか過ぎないと考えて、この値を採用することにしよう!
これを見て、間違っているようでしたら、どなたかご指摘してください。
セキュリティの関係上、コメント時にはメールアドレスを入力することになっていますが、実のところ、メールアドレスは存在しないメールアドレスでもOKです。
こうしておくと、下手な人がコメントすることもないので・・・・(^^♪