CPU時間

または処理時間は、入出力の待機などの経過時間とは対照的に、中央処理装置（CPU）がコンピュータープログラムまたはオペレーティング・システムの命令の処理に使用された時間。これは、たとえば、入力/出力（I / O）操作の待機や低電力（アイドル）モードへの移行が含まれる。CPU時間は、クロックティックまたは秒で測定される。多くの場合、CPU時間をCPUの容量のパーセンテージとして測定すると便利である。これは、CPU使用率と呼ばれる。CPU時間とCPU使用率には、主に2つの用途がある。

CPU時間は、2つの機能的に同一のアルゴリズムの全体的な経験的効率を定量化するために使用される。たとえば、ソートアルゴリズムは、ソートされていないリストを受け取り、ソートされたリストを返す。これは、指定された入力リストに基づいて決定論的なステップ数で行われる。ただし、バブルソートとマージソートは実行時の複雑さが異なるため、マージソートはより少ないステップで完了する傾向がある。どちらのアルゴリズムの動作についても知識がない場合、バブルソートのCPU時間が長くなると、特定の入力データに対してマージソートよりも効率が低下することがわかる。

このタイプの測定は、複雑さが簡単ではないようなアルゴリズムを比較する場合に特に役立つ。この場合、壁時間（実際の経過時間）は関係ない。コンピュータは、CPUの温度などの実際の変数や、プロセスの優先度などの他のオペレーティングシステム変数に応じて、プログラムの実行速度を遅くしたり速くしたりする場合がある。

CPU使用率は、プロセッサがコンピュータプログラム間でどのように共有されているかを定量化するために使用される。単一のプログラムによるCPU使用率が高い場合は、処理能力が非常に要求されているか、誤動作している可能性がある。たとえば、無限ループに入っている。 CPU時間により、単一のプログラムが必要とする処理能力を測定できるため、入力を待機して実行された時間や、他のプログラムを実行できるように一時停止された時間などの干渉が排除される。

対照的に、（または単に実時間、ウォールクロック時間）通常のクロックによって測定されるように終了するまでコンピュータプログラムの開始からの所要時間。経過リアルタイムには、I / O時間、マルチタスク遅延、およびプログラムによって発生する他のすべてのタイプの待機が含まれる。

サブディビジョン 
CPU時間またはCPU使用率は、スレッドごと、プロセスごと、またはシステム全体のいずれかで報告される。さらに、CPUが正確に何をしていたかに応じて、報告される値は次のように細分化できる。

 ユーザー時間は、CPUがでコードを実行するのに忙しかった時間を指す。
 システム時間は、CPUがでコードを実行するのに忙しかった時間。この値がスレッドまたはプロセスについて報告されている場合は、たとえば、スレッドがシステムコールを発行した後など、実行中のコンテキストに代わってカーネルが作業を行っていた時間を表す。
 アイドル時間（システム全体のみ）は、CPUがビジーでない時間、またはCPUがシステムアイドルプロセスを実行した時間。アイドル時間は、実際には未使用のCPU容量を測定する。
 スチール時間（システム全体のみ）は、仮想化ハードウェアでは、オペレーティングシステムが実行を望んでいたが、ハイパーバイザーによって実行が許可されなかった時間。これは、物理ハードウェアが複数のゲストオペレーティングシステムを実行していて、ハイパーバイザーがCPUタイムスロットを別のタイムスロットに割り当てることを選択した場合に発生する可能性がある。

CPU時間のUnixコマンド

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 のソースコード。// 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 ;
}

関連項目 
 
 CPU
 プロセス（計算）
 システム時刻
 top

脚注

外部リンク 
 

 

 
 

コンピューターのパフォーマンス