
私のサーバーに搭載されている CPU の数について少し混乱しています。
Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
それは、インテル公式ドキュメント20 個の物理コアが含まれています。
ここでの問題は、lscpu
コマンドの出力です (一部の行はフィルタリングされています)。
CPU(s): 80
On-line CPU(s) list: 0-79
Thread(s) per core: 2
Core(s) per socket: 20
Socket(s): 2
NUMA node(s): 2
Model name: Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
NUMA node0 CPU(s): 0-19,40-59
NUMA node1 CPU(s): 20-39,60-79
私の理解でactual physical cores = CPU(s) / thread(s) per core
は、予想の 2 倍の 40 が得られます。
ここで何が起こっているのか、そして正確には何を意味しているのかを誰か説明してもらえますかCPU(s), thread(s) per core, core(s) per socket, socet(s)
?
答え1
Sockets
システム内の物理 CPU の数を表します。Cores per socket
物理 CPU あたりに完全な CPU コア (ロード/デコード ロジックを含む) がいくつあるかです。Threads per core
1つのコアでいくつのスレッドをスケジュールできるかです(ハイパースレッディング)。簡単に言えば、CPUで使用されるハードウェアです。前に実際のコード実行が2倍になり、CPUは複数の異なるタスクを実行できるようになります。これにより、CPUは命令がCPUの実行コアに到達する前に命令をフェッチ/デコードできます。これにより、パイプラインの停止。CPU
「スケジュール可能なエンティティ」とは、オペレーティングシステムが持つ実行キューの数のことです。sockets x cores per socket x threads per core
あなたの場合、2 つの物理 CPU があり、それぞれに 20 個のコアがあり、それぞれ 2 つのスレッド (ハイパースレッディング) を実行できます。したがって2x20x2 = 80
、表示される数は ですCPUs
。
答え2
混乱は、infolscpu
コマンドで表示される内容からは不明瞭な非常に単純な詳細から生じます。
問題は、サーバーに実際には 2 つの がありIntel(R) Xeon(R) Gold 6242R CPU
、それがSocket(s)
行に記載されていることです。
Intel のドキュメントに記載されているように、これらの CPU にはそれぞれ 20 個の物理コア (行Core(s) per socket
) が含まれており、合計 40 個の物理コアになります。
これらのコアのそれぞれは、2 つのスレッドを「同時に」実行できます (ラインThread(s) per core
)。
つまり、2 つの Intel Xeon、各 20 個の物理コア、各コアに 2 つのスレッドがあり、合計 80 個の「プロセスを実行できるユニット」または「CPU」になります。
答え3
CPU という概念は、今では少し抽象化されています。これは、ハイパースレッディング (90 年代後半) から始まり、その後 Intel Core (00 年代前半) シリーズが登場しました。それ以前にも、複数の CPU システムは確かに存在していましたが、それらはすべて複数の物理 CPU でした。
しかし、ハイパースレッディングとマルチコア単一 CPU の場合、CPU の物理数は、CPU 上で実行中のコードが認識する CPU の論理数とは異なります。
Socket(s): 2
「マザーボードにヒートシンクが接続された」物理的なCPUが2つあります
Core(s) per socket: 20
各物理 CPU には 20 個のコアがあり、Linux からは独立した CPU のように見え、そのように動作します。コアは少なくとも同じ L3 キャッシュ (おそらく L2 キャッシュ) を共有し、独自の L1 キャッシュを備えている可能性があります。そのため、独自の L3/L2/L1 を備えた個別のソケットほどパフォーマンスは高くありませんが、ほぼ同等です。
各ソケットは 2 * 20 = 40 です。
Thread(s) per core: 2
各コアには2つのSMTスレッドがあり、CPUのマイクロアーキテクチャによって実装され、Linuxからは基本的に独立したCPUのように見えます。
実際の独立したコアほど高速になることはありません。
マイクロアーキテクチャ上のスレッドは、コアから現在使用されていないパイプライン ステージを取得しようとしますが、ビジー状態の場合は待機することになる可能性があります。また、CPU は既に非常にビジー状態に保たれようとしているため、2 つのコア上の 2 つのスレッドは 4 つのコアとはまったく同等ではありませんが、コードの実行速度を少し向上させることができます。
コア リソースが共有されるため、Spectre や同様の脆弱性は、コアやソケットよりもスレッド間で発生する可能性がはるかに高いことに注意してください。
いずれにせよ、これはコアあたり、またソケットあたりなので、2 * 20 * 2 となり、次のようになります。
CPU(s): 80
答え4
サーバーは 2 つの「プロセッサ チップ」(2 つのソケット上) を使用しており、各チップには 20 個の物理コアがあります。
また、各コアは 2 つのスレッドを処理できます。
そのため、2 (プロセッサチップ) * 20 (パーツあたりのコア数) * 2 (各コアが処理できるスレッド数) = 80 CPU と表示されます。
この場合、CPU は「スケジュール可能なエンティティ」、つまりマシンで実行できるスレッドの数を表します。