3つの負荷フィールドすべてで、特定のマシン(約9)の高い負荷平均を観察しています。負荷は、「実行中」/現在必要なCPU時間のプロセス数として理解しています。私のマシンでN個のプロセスが実行されている場合、N個を超える負荷を生成できないと私は考えていますか?
また、負荷はプロセスまたはスレッドに関してカウントされますか?言い換えれば、マルチスレッドプロセスは1より大きい負荷を生成できますか?
3つの負荷フィールドすべてで、特定のマシン(約9)の高い負荷平均を観察しています。負荷は、「実行中」/現在必要なCPU時間のプロセス数として理解しています。私のマシンでN個のプロセスが実行されている場合、N個を超える負荷を生成できないと私は考えていますか?
また、負荷はプロセスまたはスレッドに関してカウントされますか?言い換えれば、マルチスレッドプロセスは1より大きい負荷を生成できますか?
回答:
負荷平均の計算に使用される数値は、実行中または中断できない状態のタスクと、移動平均のタイムスライスで実行された作業量です。これらのタスクは、マルチスレッドプロセスの一部にすることができます。使用されたアルゴリズムからの平滑化結果により、フィールドは過去にさかのぼります。
1の負荷は、1つのCPUに相当する作業の100%に相当します。使用可能なCPUの数を超えるアクティブスレッドの数を管理できたマルチスレッドアプリケーションがある場合、単一のプロセスで負荷が1を超える可能性があります。これは短期的なスパイクであり、負荷平均のより長いタイムスライスビュー。
また、マルチコアシステムが存在する前に負荷平均が開発されたため、負荷数を使用可能なコアの総数で割ることが重要です。これが4ソケットのクアッドコアシステムで9の持続負荷である場合、これは16の9負荷であり、実際には問題ではありません。
実行可能なスレッドの数(「実行キュー」)の数と指数関数的に減衰する平均と中断できないスレッドの数(待機中)の平均からの負荷平均の導出を説明する、最初に長く優れたコメントがあるkernel / sched / loadavg.cを参照してください。I / Oまたはロック待ち)。
これがコメントの本質ですが、完全に読む価値があります:
* The global load average is an exponentially decaying average of
* nr_running + nr_uninterruptible.
*
* Once every LOAD_FREQ:
* nr_active = 0;
* for_each_possible_cpu(cpu)
* nr_active += cpu_of(cpu)->nr_running +
* cpu_of(cpu)->nr_uninterruptible;
* avenrun[n] = avenrun[0] *
* exp_n + nr_active *
* (1 - exp_n)
実際の生活はコードを幾分複雑にします:CPUごとのカウンター、ティックレスカーネル、ホットスワップCPU、exp(n)の固定小数点実装を必要とする浮動小数点コードの欠如。しかし、これらすべてがコメントで説明されているメソッドを忠実に実装するために機能していることは容易に理解できます。
Linuxは、プロセスだけでなくスレッドもカウントすることに注意してください。
インスタントロード:実行中または実行待機中のタスクの数、または別の方法で実行してよいタスクの数
負荷平均:上記のメジャーですが、同じメジャーの以前のサンプルと指数的に平均化されています
これらの数値はどちらも無制限で、多くの場合Nよりもはるかに大きくなります。
明確にするために、Linuxのロードカウントにはスレッドが含まれています。多くのスレッドを作成する単一のプロセスで、任意の大きな負荷を生成できます。
詳細はこちら
http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html