Linuxでプロセスの実行時間を計測するのによく使われるのはtimeコマンドだろう。
例えば、以下のようにすれば実際にコマンド実行に10秒かかり、sleepなのでプロセッサ時間をほとんど消費していないことがわかる。
伝統的なUnixのtimeコマンドは秒までしか表示しないけど、秒以下が小数点3桁まで表示されているのはtimeがBashの組み込みコマンドでPOSIXよりも機能が拡張されているからだ。
試しにtypeでtimeを調べてみると以下のように表示される。
一方、whichでtimeコマンドを探すと以下となる。
こっちのtimeはなんだろうか。
こちらはGNU版のtimeコマンドでより詳細な情報を表示してくれる。
そのままだと表示が見やすいとは言えないが、-vオプションを付けるとさらに詳細な項目を並べて表示してくれる。
これでページフォールトの回数やIOの様子もお手軽に見ることができる。
※ちなみに1回めの-vなしのIO回数が0になっているのは-v付きを先にやってしまったためにfoo.txtがキャッシュに読み込まれてしまったからだと思う。。。
別のファイルで試したら、ちゃんと8inputsとかになった。
例えば、以下のようにすれば実際にコマンド実行に10秒かかり、sleepなのでプロセッサ時間をほとんど消費していないことがわかる。
$ time sleep 10 real 0m10.003s user 0m0.002s sys 0m0.001s
伝統的なUnixのtimeコマンドは秒までしか表示しないけど、秒以下が小数点3桁まで表示されているのはtimeがBashの組み込みコマンドでPOSIXよりも機能が拡張されているからだ。
試しにtypeでtimeを調べてみると以下のように表示される。
$ type time time はシェルの予約語です
一方、whichでtimeコマンドを探すと以下となる。
$ which time /usr/bin/time※実際はLinuxのディストリビューションによってパスは違う可能性がある。
こっちのtimeはなんだろうか。
$ /usr/bin/time sort -r foo.txt 0.00user 0.00system 0:10.00elapsed 100%CPU (0avgtext+0avgdata 1028maxresident)k 0inputs+0outputs (0major+316minor)pagefaults 0swaps
こちらはGNU版のtimeコマンドでより詳細な情報を表示してくれる。
そのままだと表示が見やすいとは言えないが、-vオプションを付けるとさらに詳細な項目を並べて表示してくれる。
$ /usr/bin/time -v sort -r foo.txt Command being timed: "sort -r foo.txt" User time (seconds): 0.00 System time (seconds): 0.00 Percent of CPU this job got: 60% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 1024 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 317 Voluntary context switches: 1 Involuntary context switches: 105 Swaps: 0 File system inputs: 8 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0
これでページフォールトの回数やIOの様子もお手軽に見ることができる。
※ちなみに1回めの-vなしのIO回数が0になっているのは-v付きを先にやってしまったためにfoo.txtがキャッシュに読み込まれてしまったからだと思う。。。
別のファイルで試したら、ちゃんと8inputsとかになった。
0 件のコメント:
コメントを投稿