CPU 使用率のパーセンテージはどのように計算されますか?

CPU 使用率のパーセンテージはどのように計算されますか?

Ubuntu 12.04 で、psensor を使用すると、CPU 使用率のパーセンテージ数値が更新されました。このパーセンテージはどのように計算されるのでしょうか。具体的には、比率の分子と分母は何ですか。

ありがとう!

答え1

プロセッサ使用率「プロセッサがアイドル状態ではない時間」で計算されます。つまり、この計算は、「アイドル」実行プロセスの使用量を登録するカウンターから行われます。別のプロセスがアイドル プロセスからプロセッサ パワーを「奪う」間、アイドル プロセッサ コンシューマー レジスタは係数によって減少します。時間軸は固定され一定であるため、(1 - 「アイドル タスクの % 時間」) は、プロセッサで実行されているすべてのプロセスに使用されるプロセッサ負荷の量です。

ここに画像の説明を入力してください

CPU使用率の定義

ここでは、CPU 使用率 U を、式 1 に示すように、アイドル タスク以外の時間として定義します。

アイドル タスクは、マルチタスク システムで絶対的に最も優先度が低いタスクです。このタスクは、リスト 1 に示すように、バックグラウンド タスクまたはバックグラウンド ループと呼ばれることもあります。このロジックには、伝統的に while(1) タイプのループがあります。言い換えると、無限ループは CPU を回転させ、重要な作業を実行する必要があるという指示を待ちます。

リスト1: バックグラウンドループの簡単な例

int main( void )
{
   SetupInterrupts();
   InitializeModules();
   EnableInterrupts();

   while(1)      /* endless loop - spin in the background */
   {
      CheckCRC();
      MonitorStack();
      ... do other non-time critical logic here.
   }
}

この描写は実際には単純化しすぎています。一部の「実際の」作業はバックグラウンド タスクで実行されることが多いからです。ただし、アイドル タスク中に実行するようにコード化されたロジックは、いつ完了するかが保証されていないため、厳密なリアルタイム要件があってはなりません。実際、過負荷のシステムで使用できる 1 つの手法は、それほど厳密なタイミング要件のないロジックの一部を、厳密なリアルタイム タスクからアイドル タスクに移動することです。

関連情報