ご存知のように、単一のプロセッサに1.00の負荷がかかるということは、100%の負荷があることを意味します。同様に、クアッドコアの4.00の負荷は100%になります。
4コア8スレッドプロセッサの負荷をどのように解釈すればよいですか?CPUの最大容量に達するのはいつですか?で4.00または8.00?
ご存知のように、単一のプロセッサに1.00の負荷がかかるということは、100%の負荷があることを意味します。同様に、クアッドコアの4.00の負荷は100%になります。
4コア8スレッドプロセッサの負荷をどのように解釈すればよいですか?CPUの最大容量に達するのはいつですか?で4.00または8.00?
回答:
確かではありませんが、ほとんどはにあり1.00*n_cpu
ます。
負荷とは、次を意味します。単一CPUシステムに複数のプロセスがある場合、それらは一見並列に実行されています。しかし、そうではありません。実際に起こること:カーネルはプロセスに1/100秒を与え、その後、割り込みで実行を中断します。そして、次の1/100秒を別のプロセスに与えます。
実際には、「次の1/100秒間隔を取得するプロセスは?」という質問は、複雑なヒューリスティックによって決定されます。タスク スケジューリングと呼ばれます。
もちろん、ブロックされているプロセス、たとえば、ディスクから読み取っているデータを待機しているプロセスは、このタスクスケジューリングから除外されます。
ロードの内容:次の1/100秒の時間枠を現在待機しているプロセスの数。もちろん、それは平均値です。これは、に複数の数字が表示されるためですcat /proc/loadavg
。
マルチCPUシステムの状況は少し複雑です。複数のCPUがあり、その時間枠は複数のプロセスに与えることができます。これにより、タスクのスケジューリングが少し複雑になりますが、それほど複雑ではありません。しかし、状況は同じです。
カーネルはインテリジェントで、最適な効率を得るためにシステムリソースを共有しようとしますが、それに近い状態です(マイナーな最適化があります。たとえば、同じプロセスで可能な限り長い時間実行される方が良いキャッシュに関する考慮事項のためのCPUですが、そこでは重要ではありません)。これは、負荷8がある場合、つまり次のタイムスライスを実際に8つのプロセスが待機しているためです。8 cpusがある場合、これらのタイムスライスをcpusに1対1で与えることができるため、システムが最適に使用されます。
を見るtop
と、実際に実行中のプロセスの数が驚くほど少ないことがわかります。それらはR
そこでマークされているプロセスです。それほどハードコアではないシステムでも、5未満であることがよくあります。これは、ディスクまたはネットワークからのデータを待機しているプロセスも一時停止しているためです(S
上部にマークが付いています)。負荷にはCPU使用量のみが表示されます。
ディスクの負荷を測定するツールもあります。少なくともCPU使用率の監視として重要なはずですが、プロのシステム管理者の世界ではあまり知られていません。
Windowsツールは、多くの場合、負荷を実際のCPU数で分割しています。これにより、一部のプロのWindowsシステム管理者は、このCPU分割の意味でシステム負荷を使用します。彼らは正しくありませんし、あなたが彼らにこれを説明した後、おそらく幸せになるでしょう。
マルチコアCPUは、実質的に同じシリコンチップ上の複数のCPUです。違いはありません。
ハイパースレッドCPUの場合、興味深い副作用があります。CPUをロードすると、ハイパースレッドペアが遅くなります。しかし、これは通常のタスクスケジューリングが処理するより深い層で発生しますが、スケジューラのプロセス移動の決定に影響を与える可能性があります(影響するはずです)。
しかし、私たちの現在の観点から-システム負荷を決定するものは-同様に重要ではありません。
ハイパースレッディングは実際には2番目のコアではないため、コアが200%になることはありませんが、特定のワークロードでは100%を超えることがあります。
したがって、最大負荷は約4〜6の間で不明です。
(もちろん、特にIOを待機している場合は、実際に実行可能なプロセスをカウントするため、過負荷になると、これは高くなる可能性があります)
負荷平均は、あなたがそれが意味すると思うことを意味しません。インスタントCPU使用率ではなく、実行を待機しているプロセスの数です。通常、それはCPUを必要とするものが多いためですが、常にそうではありません。一般的な原因は、IOまたはディスクまたはネットワークを待機しているプロセスです。
実行ps -e v
してプロセス状態フラグを探してみてください。
state The state is given by a sequence of characters, for example, "RWNA". The first character indicates the run state of the process:
D Marks a process in disk (or other short term, uninterruptible) wait.
I Marks a process that is idle (sleeping for longer than about 20 seconds).
L Marks a process that is waiting to acquire a lock.
R Marks a runnable process.
S Marks a process that is sleeping for less than about 20 seconds.
T Marks a stopped process.
W Marks an idle interrupt thread.
Z Marks a dead process (a "zombie").
これはからですps
- manページ、そこに詳細を見つけるあなたがそうR
とD
プロセスは、おそらく特に興味深いのです。
あらゆる種類の理由で負荷平均「スパイク」になる可能性があるため、これらは「このシステムがビジーなのか」以外の良い指標ではありません。平均負荷をCPUコアにマッピングすることで動けなくなることは、あなたに何の役にも立ちません。
24コアXeonシステム(2ソケットx 12コア)でいくつかの実験を行いました。この場合、Linuxがハイパースレッディングを設定する方法により、最大負荷は48.0です。
ただし、48コアのスループットに相当するものは得られません。私が観察したのは、最初の24個の論理プロセッサでスループットの約90%が得られることです。つまり、負荷が24.0に達する場合です。その後、残りの24個の論理プロセッサーに対して約10%の追加スループットが得られます(ロードは48.0まで実行されます)。もう1つの考え方は、24コアで48スレッドを実行する場合、ハイパースレッディングを有効にした場合と無効にした場合に約10〜20%増加するということです。マーケティング担当者が示唆するような100%のブーストではありません。
たとえば、この観察結果をテストする1つの方法は、48スレッドを実行するプロセス(たとえば、TBBまたはハンドロールスレッドモデルを使用)を実行することです。
time numactl --physcpubind=0-23 ./myprocess
そして、実行します
time numactl --physcpubind=0-47 ./myprocess
後者は、約10〜20%短い時間で実行されるはずです。プロセスが高度にI / Oブロックされている場合、結果は異なる可能性があります。
前者は(各コアの)単一の論理プロセッサでのみスレッドを実行できるようにすることでハイパースレッディングを無効にし、後者は(各コアの)2つの論理プロセッサでスレッドを実行できるようにすることでハイパースレッディングを有効にします。
両方の場合の負荷は48.0として報告されるはずです...