スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

timeitコマンドでアプリケーションの実行時間を測定する

解説をスキップして操作方法を読む

デジタルアドバンテージ
2004/05/08
 
対象OS
Windows XP
Windows Server 2003
プログラムの性能を解析するには、プログラムの実行時間を測定する必要がある。
リソースキット・ツールにはtimeit.exeという、アプリケーションの実行時間を測定するコマンドが用意されている。
 
解説

 プログラムのパフォーマンス(性能)を解析したり、システムの負荷などを調査したりするには、各プログラムが実行される時間を正確に測定する必要がある。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

Version Number:   Windows NT 5.1 (Build 2600) …OSバージョン
Exit Time:        11:38 am, Friday, May 7 2004 …終了時間
Elapsed Time:     0:01:00.234 …開始から終了までの経過時間
Process Time:     0:00:19.968 …処理時間
System Calls:     902230 …システム・コールの回数
Context Switches: 36798 …コンテキスト切り替えの回数
Page Faults:      84248 …ページ・フォルトの回数
Bytes Read:       481545 …ディスクからの読み出しバイト数
Bytes Written:    252408 …ディスクへの書き込みバイト数
Bytes Other:      524120 …そのほかのデータ転送バイト数

C:\>

 いくつか数値が表示されているが、一番大事なのは「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 -?で表示されるヘルプ・メッセージを参照していただきたい。End of Article

C:\>timeit -k program1 …指定したキーのデータだけを表示させる
Average for cmd key over 12 runs …12回の実行における平均値

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        9:00 am, Monday, January 1 1601
Elapsed Time:     0:00:12.072 …平均実行時間。以下すべて平均値
Process Time:     0:00:01.436
System Calls:     5316
Context Switches: 4759
Page Faults:      38357
Bytes Read:       144492271
Bytes Written:    78286947
Bytes Other:      19159
 
関連記事(Windows Server Insider)
  Windows TIPS:Windows OS向けリソースキット・ツールを入手する
  Windows TIPS:カーネル・モードとユーザー・モードの負荷状況を簡単に見分ける方法
  Windows TIPS:負荷の大きいプロセスを特定する方法
  Windows TIPS:最適なページ・ファイル・サイズを知るには
  Windows TIPS:必要メモリ・サイズを見極める
     
この記事と関連性の高い別のWindows TIPS
起動時に自動実行される不要なプログラムを「見つける」方法
これだけは覚えておきたい、コマンド・プロンプトの使い方
負荷の大きいプロセスを特定する方法
一時的にほかのユーザー権限でプログラムを実行する方法(ショートカットのプロパティを利用する方法)
ttcpでネットワーク・パフォーマンスを測定する
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「Windows TIPS」

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
@IT Sepcial
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Sepcial
ソリューションFLASH