web-dev-qa-db-ja.com

4コア8スレッドプロセッサのシステム負荷を適切に解釈する方法

ご存じのとおり、シングルプロセッサでの1.の負荷は、100%の負荷があることを意味します。同様に、クアッドコアの4.負荷は100%になります。

4コア8スレッドプロセッサの負荷をどのように解釈すればよいですか? CPUの最大容量にいつ到達しますか? 4.または8.

14

確かではありませんが、主に1.00*n_cpu

ロードとは、次のことを意味します。単一のCPUシステムに複数のプロセスがある場合、それらは一見並列に実行されています。しかし、それは真実ではありません。実際に何が起こるか:カーネルはプロセスに1/100秒を与え、それから割り込みで実行を中断します。そして、次の1/100秒を別のプロセスに与えます。

実際には、「次の1/100秒間隔を取得するプロセスはどれか」という質問は、複雑なヒューリスティックによって決定されます。 taskschedulingと名前が付けられます。

もちろん、ブロックされているプロセス(たとえば、ディスクから読み取っているデータを待っているプロセス)は、このタスクのスケジューリングから除外されます。

負荷とは:現在次の1/100秒の時間枠で待機しているプロセスの数。もちろん、平均値です。これは、cat /proc/loadavg

マルチCPUシステムの状況は少し複雑です。複数のCPUがあり、その時間枠を複数のプロセスに与えることができます。これにより、タスクのスケジュールが少し複雑になりますが、多すぎません。しかし、状況は同じです。

カーネルはインテリジェントであり、最適な効率のためにシステムリソースを共有しようとしますが、その近くにあります(たとえば、マイナーな最適化が存在します。たとえば、同じプロセスで最長の時間実行されるプロセスが適しています)キャッシュの考慮事項のためのcpu、しかしそれらはそこでは関係ありません)。これは、負荷8がある場合、つまり、実際には次のタイムスライスを待っている8つのプロセスがあるためです。 CPUが8つある場合、これらのタイムスライスをCPUに1対1で与えることができるため、システムが最適に使用されます。

topが表示されている場合、実際に実行されているプロセスの数が驚くほど少ないことがわかります。それらはRでマークされているプロセスです。それほどハードコアではないシステムでも、5未満になることがよくあります。これは、ディスクまたはネットワークからのデータを待機しているプロセスも中断されているためです(先頭にSとマークされています)。負荷はCPU使用率のみを示します。

ディスクの負荷を測定するツールもありますが、少なくともCPU使用率の監視として重要であるはずですが、プロのシステム管理者の世界では、どういうわけかあまり知られていません。


Windowsツールは、負荷を実際のCPU数で分割することがよくあります。これにより、一部のプロのWindowsシステム管理者は、このCPU分割の意味でシステム負荷を使用します。それらは正しくなく、あなたがこれを彼らに説明した後でおそらくもっと幸せになるでしょう。


マルチコアCPUは、実質的に同じシリコンチップ上の複数のCPUです。違いはありません。

ハイパースレッドCPUの場合、興味深い副作用があります。CPUをロードすると、ハイパースレッドペアが遅くなります。しかし、これは、通常のタスクスケジューリングが処理するより深い層で発生しますが、スケジューラのプロセス移動の決定に影響を与える可能性があります(影響するはずです)。

しかし、私たちの現在の観点から-システムの負荷を決定するもの-それも重要ではありません。

負荷平均は、それが何を意味するかを意味するものではありません。これは、瞬時の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のマンページにあるので、そこに詳細が表示されます-RおよびDプロセスはおそらく特に興味深いでしょう。

さまざまな理由で負荷平均の「スパイク」が発生する可能性があるため、「このシステムがビジーであるか」以外の測定には適していません。負荷平均をCPUコアにマッピングするのに行き詰まったとしても、何の役にも立ちません。

5
Sobrique

ハイパースレッディングは実際には2番目のコアではないため、コアが200%になることはありませんが、特定のワークロードでは100%を超えます。

したがって、最大負荷は約4から6の間のどこか不明です

(もちろん、これは実際には実行可能なプロセスをカウントするため、特にIOを待機している場合)、過負荷になると高くなる可能性があります)

4
JamesRyan

Linuxシステムでは、実行可能キュー内のプロセスだけでなく、負荷を計算するためにカウントアップされます。無停電スリープ状態のプロセス wikipedia もカウントされるため、多くのプロセスがディスクを待機している場合、負荷が急上昇します。

3
przRocco

24コアXeonシステム(2ソケットx 12コア)でいくつかの実験を行いました。 Linuxがハイパースレッディングをセットアップする方法のため、この場合の最大負荷は48.0です。

ただし、48コアに相当するスループットは得られません。私が観察したことは、最初の24個の論理プロセッサでスループットの約90%が得られることです。つまり、負荷が24.0に達した場合です。次に、残りの24個の論理プロセッサーに対して約10%の追加スループットが得られます(ロード実行は48.0まで)。これについての別の考え方は、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として報告されるはずです。

2
Mark Lakata