Intel Core i7のNUMAを有効にする


22

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にはNUMAノードが1つしかありません。

$ 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、i7にNUMAノードが1つしかない場合、持つ目的は何ですか?

回答:


13

この写真で十分説明できていると思います。

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

  • ソケットまたは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

参照資料


2
@slm-あなたの言うことは理にかなっていますが、なぜカーネルのドキュメント(私の質問に引用されています)は私が有効にするべきだと言っCONFIG_NUMAていcore i7ますか?
user1968963

1
Haswell以来、NUMAが「シングルプロセッサ」(シングルソケットを意味する)マシンに使用できないことはもはや事実ではありません。特定のHaswell製品は、Intelが「クラスターオンダイ」モードと呼んでいる機能を備えています。単一のソケットプロセッサには複数のメモリコントローラーが統合されているため、メモリへの複数のパスがあり、この機能では個別のNUMA領域として扱われ、そのすべてが1つのソケットを包含します。
ポールカヘニー

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

まず、Intel Core i7は単なるマーケティングの指定であり、Intel Core i7(またはそれ以降)というフレーズは非常にあいまいであることに注意してください。それではどういう意味ですか?

LinuxカーネルのKconfigヘルプテキストの編集は、Intel Core 7iに言及し、その後Intel 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のみです。それは、Nehalemマイクロアーキテクチャに基づくブルームフィールドプロセッサであり、メモリコントローラーをノースブリッジからCPU(AMDが2003年にOpteron / AMD64で行っていた)に移動し、QuickPath Interconnect / QPI(AMDのHyperTransportのペンダントとして)を導入しましたCPU / CPUおよびCPU / IOH(IOハブ、旧Northbridge)相互接続用。

ブルームデールi7 CPUは、新しいCore i {3,5,7}命名スキームの最初のエントリでした。そのため、Linuxのドキュメントテキストが作成されたとき、i7はi5(2009/09で最初)またはi3(2010/01で最初)とは対照的にCore i7を具体的に参照しませんでしたが、新しいNehalemマイクロアーキテクチャ統合メモリコントローラーとQPI。

そこi7の上11/2008からインテルのプレスリリースは、(だ地球上のIntelを発表最速のプロセッサの状態ということ)以前のインテル「エクストリーム」プラットフォームのコアi7のプロセッサは、より多くの倍以上のメモリ帯域幅が、すべてでNUMAを言及していません。

その理由は、NUMAはデスクトップPCにとっては問題ではなく、「極端な」PCにとっても問題ではないからです。

NUMAは、専用の物理メモリアクセスレーン(1つのメモリコントローラーではなく)を備えた複数のCPUソケット(1つのソケット上の複数のコアではない)を備えた高価なサーバーにとって重要です。他のCPUのメモリよりも。(8ソケット、64コア、256 GB RAMと考えてください。)NUMAは、CPUがより高いコストではあるが、ローカルメモリに加えてリモートメモリ(別のCPUのローカルメモリ)にもアクセスできることを意味します。NUMAは、すべてのメモリがすべてのコアで等しく利用可能なSMPなどの共有メモリアーキテクチャと、各ノードにメモリの専用ブロックを提供するMPP(Massively Parallel Processing)などの分散メモリアーキテクチャの合成です。これはMPPですが、アプリケーションにとってはSMPのように見えます。

デスクトップマザーボードにはデュアルソケットがなく、極端なi7エディションを含むIntelデスクトップCPUには、デュアルソケット構成用の追加のQPIリンクがありません。

チェックウィキペディアQPIの QPIがNUMAに関連しているかを確認するために記事を:

シングルプロセッサマザーボード上の最も単純な形式では、単一のQPIを使用してプロセッサをIOハブに接続します(たとえば、Intel Core i7をX58に接続します)。アーキテクチャのより複雑なインスタンスでは、個別のQPIリンクペアがマザーボード上のネットワーク内の1つ以上のプロセッサと1つ以上のIOハブまたはルーティングハブを接続し、すべてのコンポーネントがネットワーク経由で他のコンポーネントにアクセスできるようにします。HyperTransportと同様に、QuickPathアーキテクチャは、プロセッサにメモリコントローラーが統合されていることを想定しており、NUMA(不均一メモリアクセス)アーキテクチャを有効にします。

[…]

一部のハイエンドCore i7プロセッサはQPIを公開しますが、他の「メインストリーム」Nehalemデスクトップおよびシングルソケットボード向けモバイルプロセッサ(LGA 1156 Core i3、Core i5、Lynnfield / Clarksfieldおよび後継ファミリーの他のCore i7プロセッサなど)これらのプロセッサはマルチソケットシステムに参加するためのものではないため、QPIを外部に公開しないでください。ただし、QPIはこれらのチップで内部的に使用されます[…]

マルチソケットサーバーボード上のIntel Nehalem CPUが非ローカルメモリアクセスを行う方法は、QPIを介しています。NUMA記事でも

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

11/2008からこのレポートをチェックして、Intelがi7の2つのQPIリンクの1つを無効にして、NUMAが適用されるデュアルソケット構成を無効にしていることを確認します。

Nehalemのこの最初のハイエンドデスクトップ実装は、コードネームがBloomfieldであり、最終的に2ソケットサーバーに搭載されるはずのシリコンと本質的に同じです。結果として、ブルームフィールドチップには、上のダイショットが示すように、2つのQPIリンクがオンボードで搭載されています。ただし、2番目のQPIリンクは使用されません。このアーキテクチャに基づく2Pサーバーでは、2番目のインターコネクトが2つのソケットをリンクし、その上でCPUは​​キャッシュコヒーレンシメッセージ(新しいプロトコルを使用)とデータ(メモリサブシステムがNUMAであるため)を共有します。オプテロンへ。

だから、私はGoogleの研究結果に関連するあなたの質問から遠ざかっていました…あなたは、Linuxドキュメントが2008年後半にそれをオンにすることを推奨し始めた理由を尋ねていますか?この質問に正しい答えがあるかどうかはわかりません…ドキュメント作成者に尋ねる必要があります。NUMAをオンにしても、デスクトップCPUユーザーにはメリットはありませんが、マルチソケットユーザーを支援しながら、それらを大幅に害することはありません。これが理論的根拠かもしれない。Arch LinuxトラッカーでNUMAを無効にすることに関する議論に反映されていることがわかりましたFS#31187-[linux]-設定ファイルからNUMAを無効にします)。

ドキュメントの作成者は、NehalemアーキテクチャのNUMAの可能性についても考えたかもしれません。ドキュメントの作成時には、11/2008 Core i7プロセッサ(920、940、965)のみが代表でした。NUMAが本当に意味のある最初のNehalemチップは、おそらくXeon E5520などのデュアルQPIリンクを備えたQ1 / 2009 Xeonプロセッサです


2

--showスイッチを使用すると、より理にかなっていると思います。

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0 
membind: 0 

したがって、次のようにphyscpubindの使用を制御できます。

$ numactl --physcpubind=+0-2 myapp

これにより、アプリケーションmyappは最初の2つのCPUコアに制限されます。私のシステムは4コアのi5です。

参照資料


2

カーネルを自分で構築しながら、デスクトップPCについても同じことを研究しています。多くの調査の結果、NUMAを無効にすることにしました。私のCPUは、HTを搭載した8つのプロセッサを搭載したCore i7 3820です。このページは、私が決断を下すのに役立ちました。

構成ファイルからNUMAを無効にします

要約すると、NUMAは、複数のCPUソケットがある場合にのみ価値があります(コアに関係なく)。複数のコアを備えた1つのCPUソケットマシンの処理能力への影響は非常にわずかですが、ほとんど目立たないため、ほとんどのディストリビューションでは、複数のソケットを備えたサーバーおよびマシンに大きなメリットをもたらすため、有効にします。


1

最大1つのCPUを搭載したPCでは、NUMAはまったく役に立ちません。自分のカーネルで自由に無効にしてください。

taskset(1)によっていつでもCPUボンディングを制御できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.