アプリケーションのパフォーマンスに関する情報収集は、アプリケーションの時間測定から開始することができます。パフォーマンス解析ツールを使用することで、より高度で役立つデータを収集できます。
アプリケーションの時間測定は、パフォーマンス測定の 1 つの目安となります。次の点を考慮して行ってください。
ユーザーが誰もアクティブではないときに、プログラムの時間測定を行います。時間測定中、1 つまたは複数の CPU 集中型プロセスが起動していると、結果に影響します。
最も正確な結果を得るには、毎回、同じ条件でプログラムを実行するようにしてください。特に、同一プログラムの以前のバージョンと比較する際は注意してください。可能ならば、同じシステム (プロセッサー・モデル、メモリー、オペレーティング・システムのバージョンなど) で実行してください。
システムを変更する必要がある場合、両方のシステムでプログラムの同一バージョンの速度を測ります。こうすることによって、システムによる速度の違いを把握できます。
数秒以下で実行されるプログラムの場合は、数回測定し、正しい結果であることを確認してください。ライブラリーをロードするような一部のオーバーヘッドのある関数は、短い時間に大きな影響を与えます。
プログラムが多くのテキストを表示する場合、プログラムの出力をリダイレクトすることを考慮してください。プログラムの出力をリダイレクトすると、画面 I/O が減少するため、レポートされる時間が変わります。
システム時間が大きい場合は、I/O に多くの時間がかかっている可能性があります。この場合、調査する必要があります。
数秒以下で実行されるプログラムの場合は、数回測定し、正しい結果であることを確認してください。共有ライブラリーをロードするようなオーバーヘッドのあるプログラムは、短い時間に大きな影響を与えます。
time コマンドを使用して、実行プログラムの名前を指定すると、次の情報が得られます。
経過時間、実時間、または "ウォールクロック" 時間。これらは、合計 CPU 使用実時間よりも大きくなります。
CPU 使用実時間。システム、ユーザー実行の両方が表示されます。合計 CPU 使用実時間は、実際のユーザー CPU 時間とシステム CPU 時間の合計です。
以下のプログラムは、時間測定のモデルを示したものです。
例 |
---|
/* Sample Timing */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { clock_t start, finish; long loop; double duration, loop_calc; start = clock(); for(loop=0; loop <= 2000; loop++) { loop_calc = 123.456 * 789; //printf() included to facilitate example printf("\nThe value of loop is: %d", loop); } finish = clock(); duration = (double)(finish - start)/CLOCKS_PER_SEC; printf("\n%2.3f seconds\n", duration); } |