web-dev-qa-db-ja.com

CPU使用率はどのように計算されますか?

私のUbuntu12.04では、psensorを使用して、CPU使用率が更新されたパーセンテージ値を確認しました。このパーセンテージはどのように計算されたのだろうか?具体的には、比率の分子と分母は何ですか?

ありがとう!

6
Tim

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

enter image description here

CPU使用率の定義

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

アイドルタスクは、マルチタスクシステムで絶対的に最も優先度の低いタスクです。このタスクは、リスト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つの手法は、タイミング要件がそれほど厳しくないロジックの一部を、ハードリアルタイムタスクからアイドルタスクに移動することです。

5
Diogo