| [System Environment] | |||||||||||
timeitコマンドでアプリケーションの実行時間を測定する
|
|||||||||||
|
|||||||||||
| 解説 |
プログラムのパフォーマンス(性能)を解析したり、システムの負荷などを調査したりするには、各プログラムが実行される時間を正確に測定する必要がある。Windows OSでは、タスク・マネージャを利用すればおおよその見当はつくが、プログラムごとの実行時間などの正確な情報は得られない。UNIXではこのような目的のためにtimeというツールがあり、プログラムの実行時間を測定するためによく使われている。Windows OSの場合は、リソースキット・ツールに含まれるtimeit.exeコマンドが同等の機能を持っている。ただしこれはWindows XP/Windows Server 2003のリソースキットにのみ含まれており、Windows 2000のリソースキットでは利用できない。なお、測定対象のプログラムが別のプログラムを起動するような場合は正確に測定できないことがあるので、注意して使っていただきたい。
| 操作方法 |
リソースキット・ツールの入手方法や簡単な解説については、Windows TIPS「Windows OS向けリソースキット・ツールを入手する」を参照していただきたい。ツールのダウンロード・ページではWindows Server 2003用となっているが、実際にはWindows XP上でも利用できる。
リソースキット・ツールをインストールすると、timeit.exeというコマンドが利用できるようになる。このコマンドの使い方は、コマンド・プロンプト上で「timeit -?」とすると表示されるし、リソースキット・ツールのReadme.htmファイル([スタート]メニューの[すべてのプログラム]−[Windows Resource Kit Tools]−[Windows Resource Kit Tools Read Me])中にも簡単な解説が用意されている。
timeit.exeの基本的な使い方は、パラメータに実行するプログラムのパス名を付けて起動するという方法である。
C:\>timeit notepad |
パラメータとして指定するプログラムは、PATH環境変数の指す先に存在するプログラムの場合は、このようにプログラム名だけを記述すればよい。そうでない場合は、ドライブのルートからのフルパスを指定する。
C:\>timeit C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE |
プログラムのパス名をダブル・クォート記号(")で囲むと(なぜか)エラーになるので、この例のように、(たとえ空白記号などが含まれていても)囲まずにパスを指定すればよい。プログラムに対するパラメータが必要ならば、さらに後ろに続ける。
プログラムが起動すれば、あとは通常通りに作業を行ってから終了させる(このようなコマンドは、一般的には、GUIプログラムではなく、コマンド・プロンプト上で動作するようなプログラムの性能解析に利用することが多い)。プログラムが終了すると、次のように実行したプログラムに関する統計値が表示される。
C:\>timeit C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE |
いくつか数値が表示されているが、一番大事なのは「Elapsed Time」と「Process Time」である(ただしこのコマンドに関する詳細なドキュメントは用意されていないので、以下に述べる解説は一部推定を含む)。
「Elapsed Time(経過時間)」は、プログラムを起動してから終了するまでの実際の経過時間である。この例では約1分かかっていることが分かる。
「Process Time(処理時間)」は、プログラムの実際の処理時間である。つまり実際にCPUを占有して、動作していた時間の総計を表す。ただしシステム・コール(OSのサービス)を呼び出している間の時間は含まないようである。そのため例えばシステム・コールを呼び出しているばかりで、ユーザー・モードではほとんど処理を行わないようなプログラムでは、このProcess Timeの時間は限りなく0に近づく。この値は、UNIXのtimeコマンドでいうと「user時間」として表示されている値に相当する(UNIXのtimeコマンドにおけるsys時間に相当する値は表示されない)。
これら2つの値を見ると、実際のCPU時間の消費具合や、システムの負荷状況を知ることができる。例えば上の例では、Elapsed Timeが約60秒、Process Timeが約20秒なので、CPUの使用率は平均すると20÷60=約33%ということになる。ただしこれにはシステム・コールの処理時間(呼び出し時間)は含まれていないので、実際のCPU使用率は、33%よりも高くなる可能性がある。そのため、これを利用する場合はタスク・マネージャと併用するのがよいだろう。タスク・マネージャを使ったシステムの負荷状態の判断については、Windows TIPSの「カーネル・モードとユーザー・モードの負荷状況を簡単に見分ける方法」や「負荷の大きいプロセスを特定する方法」も参照していただきたい。
「System Call(システム・コール)」「Context Switches(コンテキスト切り替え)」「Page Faults(ページ・フォルト)」は、それぞれOSカーネルに関するパラメータであり、システム・コールやコンテキスト切り替え、ページ・フォルトの回数を表す。最初の2つはあまり気にしなくてもよいが、ページ・フォルトの回数が多い場合は物理的なメモリ量が不足している可能性がある(ページ・フォルトは、メモリ不足のためにディスクにスワップ・アウトされてしまっているページ領域へアクセスしようとすると発生する)。必要なメモリ・サイズの見積もり方については、Windows TIPSの「最適なページ・ファイル・サイズを知るには」や「必要メモリ・サイズを見極める」も参考にしてほしい。
最後の3つの値(「Bytes Read」「Bytes Written」「Bytes Other」)は、それぞれファイルやディスクとの入出力が行われたバイト数を表しているようであるが、これはプログラムの処理内容によって大きく変わるので、あまり気にしなくてもよいだろう(「Bytes Read」の値はディスク・キャッシュが有効に機能していると少なくなることがある)。
実行時間の平均を求める
このtimeit.exeコマンドでは、実行した結果をログ・ファイルに記録し、その平均値を計算して表示するという機能を持っている。timeit.exeを実行すると、その結果が(デフォルトでは)カレント・ディレクトリにあるtimeit.datというファイルに記録される。そして何もパラメータを付けずにtimeit.exeを実行すると、現在timeit.datファイルに記録されているデータに基づいて、プログラムごとの平均値が表示される。また、キー名を指定すれば、そのキーに属するデータだけを表示することもできる(「キー」とは実行したプログラムの名称のこと)。詳しくはtimeit -?で表示されるヘルプ・メッセージを参照していただきたい。![]()
C:\>timeit -k program1 …指定したキーのデータだけを表示させる |
| 「Windows TIPS」 |
TechTargetジャパン
- フォルダの名前が変更できない不具合を解消する (2012/5/25)
Windows 7のエクスプローラで画像ファイルやPDFが含まれるフォルダの名前が変更できなかったり、削除できなかったりする不具合の解消方法を解説する - 通信相手のMACアドレスを調べる近隣探索プロトコル (2012/5/24)
イーサネットで通信する場合、相手のMACアドレスが分からないとパケットを送信できない。ARPに代わるIPv6の近隣探索機能とは? - 第316話 ネット対応トイレ (2012/5/22)
毎日用をたすだけで、体温に体重、血圧、体脂肪率も計測して、尿検査、便検査も自動で実施、データはネット経由で医師に送られます - 私物のスマートフォンを業務に活用、「BYOD」って何? (2012/5/21)
私物のスマホやノートPCを組織的に業務に活用する「BYOD」が新たなトレンドとして注目されている。なぜいまBYODなのか? BYODのメリットとデメリットは?
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

