Intel Core i7でNUMAを有効にする

Intel Core i7でNUMAを有効にする

Linuxカーネルのドキュメントには次のようにCONFIG_NUMA記載されています。

Enable NUMA (Non Uniform Memory Access) support. 

he kernel will try to allocate memory used by a CPU on the  
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Intel Core i7プロセッサがありますが、AFAICTには1つのNUMAノードしかありません。

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16063 MB
node 0 free: 15031 MB
node distances:
node   0 
  0:  10 

CONFIG_NUMA=yそれでは、NUMAノードが1つしかないときにi7を持つ目的は何ですか?

答え1

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

まず注意事項インテルCore i7マーケティング名、フレーズだけが必要です。Intel Core i7(またはそれ以上)とても曖昧です。では、これはどういう意味ですか?

LinuxカーネルKconfigヘルプテキストエディタについてIntel Core 7i、その後次に修正しましたインテルCore i7、2008年11月完成。送信ログは次のとおりです。

x86: update CONFIG_NUMA description
Impact: clarify/update CONFIG_NUMA text

CONFIG_NUMA description talk about a bit old thing.
So, following changes are better.

 o CONFIG_NUMA is no longer EXPERIMENTAL

 o Opteron is not the only processor of NUMA topology on x86_64 no longer,
   but also Intel Core7i has it.

当時の仕様でリリースまたは発表されたIntel Core i7 CPUのみを合法的に指すことができます。そうだろうブルームフィールドプロセッサベースネハレムマイクロアーキテクチャ、メモリコントローラをノースブリッジからCPUに移動し(AMDは2003年にOpteron / AMD64を使用してこれを実行しました)QuickPath インターコネクト/QPI(AMD HyperTransportとして使用可能)CPU / CPUおよびCPU / IOH(IOハブ、古いNorthbridge)相互接続用。

Bloomdale i7 CPUは新製品の最初です。コア i{3,5,7}命名システム。したがって、Linuxドキュメントのテキストが終わったらi7i5(2009年9月初)またはi3(2010年1月初)の代わりにCore i7への具体的な言及はありませんが、メモリコントローラとQPIが統合された新しいNehalemマイクロアーキテクチャを指す可能性が高いです。

Intelは2008年11月i7のプレスリリースを発表しました(インテルが世界最速のプロセッサを発売)見せるCore i7プロセッサは、以前のIntel "Extreme"プラットフォームよりもメモリ帯域幅が2倍以上高くなります。しかし、NUMAはまったく言及されていません。

その理由は、NUMAがデスクトップコンピュータや「極端な」コンピュータでは重要ではないからだと思います。

NUMAは、マルチCPUソケット(ただ1つのソケットにマルチコアではない)と専用の物理メモリアクセスチャネル(ただ1つのメモリコントローラではない)がある高価なサーバーにとって重要なので、各CPUには独自のローカルメモリがあり、比較時もっと近いです。」他のCPUのメモリに。 (ソケット8個、コア64個、RAM256GBを考えてみてください。)NUMAは、CPUがコストが高くても、独自のローカルメモリに加えてリモートメモリ(他のCPUのローカルメモリ)にアクセスできることを意味します。 NUMAは、SMPなどの共有メモリアーキテクチャとMPP(大規模並列処理)などの分散メモリアーキテクチャの組み合わせで、すべてのコアですべてのメモリを使用できるため、各ノードに専用のメモリブロックを提供します。 MPPですが、アプリケーションではSMPのように見えます。

デスクトップボードにはデュアルソケットはなく、IntelデスクトップCPU(Extreme i7バージョンを含む)にはデュアルソケットを設定するための追加のQPIリンクはありません。

調査するウィキペディアQPIQPIとNUMAの関係を理解するための文書:

シングルプロセッサマザーボードでは、最も簡単な形式で、単一のQPIを使用してプロセッサをIOハブ(たとえばIntel Core i7 - X58)に接続します。より複雑なアーキテクチャ例では、別々のQPIリンクペアがマザーボードネットワーク上の1つ以上のプロセッサを1つ以上のIOハブまたはルーティングハブに接続し、すべてのコンポーネントがネットワークを介して他のコンポーネントにアクセスできるようにします。 HyperTransportと同様に、QuickPathアーキテクチャはプロセッサに統合メモリコントローラがあり、NUMA(Non-Uniform Memory Access)アーキテクチャをサポートしていると仮定します。

[… ]

一部の高度なCore i7プロセッサはQPIを公開していますが、他の「主流」のNehalemデスクトップおよびモバイルプロセッサは、単一のソケットマザーボード(たとえば、Lynnfield / ClarksfieldのLGA 1156 Core i3、Core i5、およびその他のCore i7プロセッサ)で利用できます。以降のシリーズプロセッサ)は、これらのプロセッサがマルチソケットシステムに参加するように設計されていないため、QPIを外部に公開しません。しかし、これらのチップにはQPIが内部的に使用されています[...]

マルチソケットサーバーのマザーボード上のIntel Nehalem CPUが非ローカルメモリにアクセスする方法はQPIを介して行われます。そこにもNUMAに関する記事:

2007年末、IntelはNehalemとTukwila CPUがx86およびItaniumサーバーとNUMA互換であると発表しました。両方のCPUファミリは共通のチップセットを共有します。この相互接続をIntelのQuickPath Interconnect(QPI)と呼びます。 AMDはHyperTransportを使用してOpteronプロセッサ(2003)にNUMAを実装しました。

これを確認してください2008年11月レポートIntelがi7の2つのQPIリンクのうちの1つを無効にして、NUMAフレンドリーなデュアルソケット構成を無効にしたことを確認できます。

Nehalemの最初の高度なデスクトップ実装であるコード名Bloomfieldは、本質的に2ソケットサーバーで使用されたのと同じチップでした。したがって、Bloomfieldチップには、上記のチップスクリーンショットに示すように、2つのオンボードQPIリンクが装備されています。ただし、2 番目の QPI リンクは使用されません。このアーキテクチャに基づく2Pサーバーでは、2番目の相互接続は2つのソケットを接続し、CPUはキャッシュ整合性メッセージ(新しいプロトコルを使用)とデータ(メモリサブシステムがNUMAであるため)を共有します。 Opteronによく似ています。

だから私は私のGoogleの調査結果に関するあなたの質問から離れています。 Linux ドキュメントで 2008 年末に有効にすることをお勧めし始めた理由を尋ねますか。この質問に正解があるかどうかはわかりません。文書作成者に連絡する必要があります。 NUMAの電源を入れることはデスクトップCPUユーザーには役に立ちませんが、それほど有害ではなく、マルチソケットユーザーにも役立ちます。それでは、なぜできないのですか?これが理由かもしれません。 Arch Linuxトラッカー(FS#31187 - [linux] - 構成ファイルでNUMAを無効にする)。

文書作成者は、文書作成時にNUMAを持つ最初のNehalemチップである11/2008 Core i7プロセッサ(920、940、965)でのみ表現されるNehalemアーキテクチャのNUMAの可能性を念頭に置くこともできます。本当に意味があるのは、2009年第1四半期のXeonプロセッサ用のデュアルQPIリンクがあることです。Xeon E5520

答え2

私はこの絵が問題を説明するのに十分だと思います。

                  ここに画像の説明を入力してください。

  • ソケットまたはNumaノードローカルメモリアクセスが可能なコアの集合です。各ソケットには1つ以上のコアが含まれています。これは必ずしも物理スロットを意味するのではなく、チップベンダーによって異なるシステムのメモリアーキテクチャを意味します。

  • プロセッサコア(CPUコア、論理プロセッサ)は、計算を実行できる単一の処理装置を意味します。

したがって、上記のシナリオは、NUMAアーキテクチャを利用するためにコンピュータに複数のプロセッサが必要であることを示しています。

カーネルでNUMAサポートをコンパイルし、単一のプロセッサシステムで実行できます。これはSMPサポートと似ています。また、コンパイルされますが、カーネルがシステムに単一のプロセッサを持っていることを検出した場合、それは使用されません(無効)。 NUMAも同じだ。dmesgカーネルリングバッファまたは/var/log/dmesgファイルから関連メッセージを確認できます。

NUMA - シングルプロセッサ(またはNUMA無効)Xマルチプロセッサ:

No NUMA configuration found
NUMA: Allocated memnodemap from b000 - b440

SMP - シングルプロセッサXマルチプロセッサ:

SMP: Allowing 1 CPUs, 0 hotplug CPUs
SMP: Allowing 32 CPUs, 0 hotplug CPUs

引用する

答え3

私はカーネルを自分で作成したときにデスクトップコンピュータでも同じことをしました。多くの研究の最後に、NUMAを無効にすることにしました。私のCPUはCore i7 3820、8プロセッサ(HTを含む)です。このページは私が決定を下すのを助けました。

構成ファイルでNUMAを無効にする

要約すると、NUMAは、コアに関係なくCPUソケットが2つ以上の場合にのみ価値があります。マルチコアを使用しても、1つのCPUソケットシステムの処理能力にわずかな影響がありますが、ほとんど目立たないため、ほとんどのディストリビューションでは、1つ以上のスロットを持つサーバーとコンピュータにパフォーマンスが向上するため、これを有効にします。途方もない利点を提供します。

答え4

CPUが最大1台のPCでは、NUMAはまったく役に立ちません。自分のカーネルで自由に無効にします。

以下を使用すると、常にCPUバインディングを制御できます。ワークセット(1)

関連情報