この場合、負荷平均はどのように計算されますか?

この場合、負荷平均はどのように計算されますか?
load average: 20.62, 18.83, 11.31

これはクアッドコアプロセッサの負荷平均です。私が実行しているプログラムは、CPUだけでなく他のリソースも消費します。

CPUのみを使用してこの数字をどのように表示できますか?

答え1

あなたの問題:この場合、負荷平均はどのように計算されますか?

回答:この3桁の数字は、さまざまな時系列(1分、5分、15分)の指数減衰移動平均です。この計算は、通常、パーセンテージで表される実際のCPU使用率(Windowsなど)ではなく、プロセッサキューに配置されたプロセスに基づいています。

しかし、私はこれが現在のシステムで何が起こっているのか理解しようとする答えではないと思います。

負荷平均は、CPU負荷とI / O待機を考慮して「システム」負荷を反映します。これは、パフォーマンスのトラブルシューティングを開始するために必要な最も一般的なパラメータです。さまざまな指標(ディスクロード)とツール(sysstatパッケージのiostatなど)を使用してシステムのパフォーマンスを分析します。

しかも2番目の答えあなたの質問に:

CPU使用率の計算

grep 'cpu ' /proc/stat | awk '{usage=100-($5*100)/($2+$3+$4+$5+$6+$7+$8)} END {print usage}'

バラよりトピックそして読んでください記事

モニタリングシステム(Zabbixなど)を使用することをお勧めします。

答え2

この3つの数字はいいえさまざまなCPUの数。

この数字は平均値(注意事項参照)最後の1分、5分、15分。

ロードの意味は次のとおりです。単一のCPUシステムに複数のプロセスがある場合、並列に実行されるように見えます。しかしそれは真実ではない。実際に起こるのは、カーネルがプロセスに1/100秒を与え、割り込みで実行を中止することです。次に、次の1/100秒を別のプロセスに割り当てます。時々、この1/100は1/1000であるかもしれませんし、時間制限は変わるかもしれませんが、それは問題ではありません。

実際、「どのプロセスが次の1/100秒間隔を取るべきですか?」という質問は、複雑なヒューリスティックによって決定されます。これをジョブスケジューリングと呼びます。

もちろん、ディスクからデータを読み取るのを待っているプロセスなど、ブロックされたプロセスはこのジョブスケジュールの影響を受けません。

ロードが通知する内容:現在、次の1/100秒の時間フレームを待っているプロセスの数。もちろんこれは平均です。これはcat /proc/loadavgで複数の数字を見ることができるからです。

マルチCPUシステムの状況はさらに複雑です。複数のプロセスに時間範囲を提供できる複数のCPUがあります。これは仕事のスケジュールを少し複雑にしますが、それほど複雑ではありません。しかし、状況は同じです。

カーネルはスマートで最適な効率を得るためにシステムリソースを共有しようとし、すでにその目標に近いです(たとえば、いくつかの小さな最適化では、キャッシュの考慮事項によってプロセスができるだけ長く同じシステムで実行されることをお勧めします。 (しかし、それらがどこにあるのかは重要ではありません。)これは、ロードが8の場合、実際に次のタイムスライスを待つプロセスが8つあるという意味です。 8つのCPUがある場合は、これらの時間をCPUに1対1で割り当てることで、システムを最適に活用できます。

と表示されると、top実際に実行されているプロセスの数が驚くほど少ないことがわかります。そのプロセスはRそこにラベルが付けられたプロセスです。実際、ハードコア以外のシステムでも通常5未満です。問題の一部は、ディスクまたはネットワークでデータを待つプロセスも中断されることです(S上部に表示されます)。ロードにはCPU使用率のみが表示されます。

マルチコアCPUは、実際には同じシリコンチップに複数のCPUがあります。この見解には違いはありません。

ハイパースレッドCPUには興味深い副作用があります。つまり、CPUをロードすると、ハイパースレッドのペアが遅くなります。ただし、これはスケジューラーのプロセス移動の決定に影響を与える可能性があり、影響を受けるはずですが、通常のジョブ予約処理よりも深いレベルで発生します。ハイパースレッドCPUはまだ広く使用されていません。

Windowsでは、負荷の計算に別の方法が使用されます。つまり、負荷1.0はみんなCPUコア使用量が100%に達しました(システム負荷が4.0)。


ノート@Alexが述べたように、これは時間平均ではありません。これは、1分、5分、15分の時定数を持つ指数加重時間平均です。計算的に効率的で、最近の変更にもっと反応します。詳しくはソースをご覧くださいkernel/sched/loadavg.c

答え3

人々がなぜこの質問に直接答えないのかわかりません。誰もがコンピュータ工学の言語で話しています。

実際、この数字は「1」の負荷平均です。負荷平均が「5」の場合、CPU使用量は約500%、つまり過負荷が400%という意味です。 (能力の500% - 100%)。 「0.05」と表示された場合、CPUの5%のみを使用しており、CPUの95%はまだ使用されていないという意味です。

上記の計算は1コア基準です。コアが複数ある場合、平均はコア数/コア数に分けられます。たとえば、コアが4つで平均が「10」の場合、CPU使用率は10 / 4 * 100 = 250%です。

だから、平均の理想的な値は「コア数」に等しいか小さいです。。 3つの値(20.62、18.83、11.31)は、最近1分、最近5分、最近15分の平均です。

答え4

「負荷」の具体的な説明なしにこれを理解する簡単な方法は、1が与えられた時間にCPUコアが実際に処理できる負荷の量であることです。

負荷平均が 1 より高い場合は、1 つの CPU コアが操作を実行できなくなり、CPU コアが 1 つしか使用できない場合、長期負荷平均が 1 より高いコンピュータは次のステップで「スキップ」する必要があります。 。特定の時間スライスこの期間中に特定のジョブにリソースが割り当てられ、実行が遅くなります。

ありがたいことに、最新のコンピュータには複数のCPUコアがあることがよくあります。つまり、負荷平均が 1 という意味です。これはシングルコアシステムではひどいことであり、クアッドコアでは固定CPUが過熱したり早期エラーが発生する危険があります。システムにはまったく問題はなく、4つのコアすべてに広がっています。

ワークロードが非常に多様なデスクトップでは、負荷平均は比較的役に立ちません。ワークロードが安定したサーバーでは、負荷平均は、DoS攻撃、ハッカー攻撃、ハードウェア破損、ハードウェアアップグレードの緊急性、誤動作するソフトウェアなどを示します。

top や vmstat のような方が適しており、ほとんどの Linux ディストリビューションにはパッケージリポジトリに htop や glans などのインタラクティブなツールも含まれており、暴走するリソース使用量をリアルタイムで分離するのに役立ちます。

関連情報