シングルCPUマルチタスクシステムのCPU時間 CPU color time for program P1
CPU時間 (CPUじかん、英 : CPU time )またはプロセス時間 (英 : process time )[ 注釈 1] は、CPU (中央処理装置)がコンピュータプログラム またはオペレーティングシステム の命令 の処理に使用された時間 である。これは、入力/出力 (I/O)操作の待機や低電力(アイドル)モードへの移行が含まれる経過時間(elapsed time )と対比される。CPU時間は、クロックティック または秒の単位で計測される。多くの場合、CPU時間をCPUキャパシティ(最大能力)のパーセンテージとして計測すると便利である。これは、CPU使用率 (CPU usage )と呼ばれる。CPU時間とCPU使用率には、主に2つの用途がある。
CPU時間 は、2つの機能的に同一のアルゴリズムの全体的な経験的効率を定量化するために使用される。たとえば、ソートアルゴリズム は、ソートされていないリストを受け取り、ソートされたリストを返す。これは、指定された入力リストに基づいて決定論的 なステップ数で行われる。ただし、バブルソート とマージソート は実行時の複雑さ が異なるため、マージソートはより少ないステップで完了する傾向がある。たとえどちらのアルゴリズムの動作についても知識がなかったとしても、バブルソートのCPU時間がより大きければ、特定の入力データに対してマージソートよりも効率が悪いということはわかる。
このタイプの計測は、複雑さが自明ではないようなアルゴリズムを比較する場合に特に役立つ。この場合、実測時間(実際の経過時間)[ 注釈 2] は関係ない。CPUの温度などの現実世界の変数や、プロセスの優先度などの他のオペレーティングシステム変数に応じて、コンピュータによるプログラムの実行速度は遅くなったり速くなったりすることがある。
CPU使用率 は、プロセッサがコンピュータプログラム間でどのように共有されているかを定量化するために使用される。単一のプログラムによるCPU使用率が高い場合は、処理能力が非常に要求されているか、誤動作している可能性がある(たとえば無限ループ に陥っているなど)。CPU時間により、単一のプログラムが必要とする処理能力を計測できるため、入力を待機して実行された時間や、他のプログラムを実行できるように一時停止された時間などの干渉が排除される。
対照的に、経過実時間 (または単に実時間、ウォールクロック時間)は、通常の時計によって計測されるような、コンピュータプログラムの開始から終了までの所要時間である。経過実時間には、I/O時間、マルチタスク遅延、およびプログラムによって発生する他のすべてのタイプの待機が含まれる。
区分
CPU時間またはCPU使用率は、スレッド ごと、プロセス ごと、またはシステム全体のいずれかで報告される。さらに、CPUが正確に何をしていたかに応じて、報告される値は次のように細分化できる。
ユーザー時間 は、CPUがユーザー空間 でコードを実行するのに忙しかった時間を指す。
システム時間 は、CPUがカーネル空間 でコードを実行するのに忙しかった時間。この値がスレッドまたはプロセスについて報告されている場合は、たとえば、スレッドがシステムコール を発行した後など、実行中のコンテキスト に代わってカーネルが作業を行っていた時間を表す。
アイドル時間 (idle time 、システム全体のみ)は、CPUがビジーでない時間、またはCPUがシステムアイドルプロセスを実行した時間。アイドル時間は、実際には未使用のCPUキャパシティを計測する。
スチール時間 (steal time 、システム全体のみ)は、仮想化 ハードウェアでは、オペレーティングシステム が実行を望んでいたが、ハイパーバイザー によって実行が許可されなかった時間[ 3] 。これは、物理ハードウェアが複数のゲストオペレーティングシステムを実行していて、ハイパーバイザーがCPUタイムスロットを別のタイムスロットに割り当てることを選択した場合に発生する可能性がある。
CPU時間のUnixコマンド
Unixライクな ( GNU / Linux )システムでのさまざまなプロセスのCPU時間のtop の表示。
Unixコマンド top
Unix コマンドtop は、すべてのプロセスのCPU時間、優先度、経過リアルタイム、およびその他の情報を提供し、それをリアルタイムで更新する。
Unixコマンド time
Unix コマンドtime は、UnixプロセスのCPU時間と経過リアルタイムを出力する。
% gcc nextPrimeNumber.c -o nextPrimeNumber
% time ./nextPrimeNumber 30000007
Prime number greater than 30000007 is 30000023
0.327u 0.010s 0:01.15 28.6% 0+0k 0+0io 0pf+0w
このプロセスには合計0.337秒のCPU時間がかかり、そのうち0.327秒がユーザースペースで費やされ、最後の0.010秒がプロセスに代わってカーネルモードで費やされた。経過実時間 は1.15秒。
以下は、上記の例で使用されたアプリケーション nextPrimeNumber のソースコード(C99 以降を想定)。
// nextPrimeNumber.c
#include <stdio.h>
#include <stdlib.h>
int isPrimeNumber ( unsigned long int n ) {
for ( int i = 2 ; i <= ( n >> 1 ); ++ i )
if ( n % i == 0 ) return 0 ;
return 1 ;
}
int main ( int argc , char * argv []) {
unsigned long int argument = strtoul ( argv [ 1 ], NULL , 10 ), n = argument ;
while ( ! isPrimeNumber ( ++ n ));
printf ( "Prime number greater than %lu is %lu \n " , argument , n );
return 0 ;
}
関連項目
脚注
注釈
^ 処理時間(英 : processing time )とは異なるニュアンスを持つ。
^ 実時間、壁時計時間(wall-clock time またはwall time )とも呼ばれる[ 1] [ 2] 。
出典
外部リンク