LinuxのNUMAアーキテクチャもメインメモリを共有していますか?

LinuxのNUMAアーキテクチャもメインメモリを共有していますか?

NUMA (Non-Uniform Memory Access) アーキテクチャについて読んでいます。ハードウェアアーキテクチャは次のとおりです。マルチプロセッサシステムでは、各コアはリモートメモリにアクセスできるよりも早く内部ローカルメモリにアクセスできます。

私が知らないのは:メインメモリ(RAM)もノード間で分かれているようです。同じCPU内のすべてのノードが同じ速度でメインメモリにアクセスできると思ったので、これは混乱しています。それでは、Linuxはなぜ各ノードのメインメモリを分割するのですか?

ベストアンサー1

免責事項:2日前は、NUMAが何であるか全く知りませんでした。私はNUMAプラットフォームを取得した後、昨日このすべてを学ぶ必要がありました。

ノードごとにアクセス速度が異なります

同じCPU内の全てのノードが同じ速度でメインメモリにアクセスすると仮定する。それでは、Linuxはなぜ各ノードのメインメモリを分割するのですか?

あなたの質問に対する簡単な答えは、Linuxが各ノードのメインメモリを分割することです。なぜなら、各ノードには独自の専用メモリコントローラ、さらには外部(メイン)メモリもあるからです。すべてのノードのアクセス速度が同じであるという前提は間違っています。

はい

たとえば、私のシングルを使いましょう。AMDオプテロン6386 SE128GiB RAMを搭載したシステム。この16コア1プロセッサは、実際には2つの独立したプロセッサで構成されています。死んだ高速相互接続が特徴で、同じ物理パッケージ内にある2つの独立したプロセッサとして見ることができます。

AMDドキュメント

~からAMDの目立つ方法で私のアーキテクチャを説明してください。AMDシリーズ15hモデル00h-0Fhプロセッサ用BIOSおよびカーネル開発者ガイド(BKDG) 35ページ、図2:

デュアルノードプロセッサ

  • 一つパック(物理的にはソケットに取り付けることです)
  • … 2個含む(ノードはシングルと同じです。サイコロ)
  • 4個入っていますコンピューティングユニット
  • コンピューティングユニット二つあります整数コアそしてFPUとL2キャッシュを共有します。
  • 自分のものがあるノースブリッジ
  • ノースブリッジDDRメモリチャネルが2つあります。

これは、ノード0のコアがDDRチャネルCまたはDに接続されたRAMを使用するために、ノード1のノースブリッジを通過しなければならないことを意味する。

私のシステムには8つの16GiB物理RAMスティックがあるため、各コントローラ(AD)は32GiBにアクセスできます。

Linuxでどのように見えるか

BIOSで透過的なNUMAサポートを有効にしたので、Linuxは私のコンピュータが次のようになると思います。

lstopoのトポロジ

私は以下を使用して画像を生成します。イストポ2コマンドハードウェアロックパッケージ

ここで階層は明確です。 Linuxには2つのことがあることを知っています。、誰もが合計64GiBのRAMにローカルにアクセスできます(GiBまたは2GiBの提供または削減)。 L3キャッシュを共有する各ノード、各ノードに分かれている様子を見ることができます。コンピューティングユニット独自のL2およびL1命令キャッシュと各命令キャッシュを保持核兵器専用のL1データキャッシュがあります。

そのCPUの「左半分」で実行されるプロセスが「右半分」に割り当てられたメモリを使用するには、いくつかのプロセスを経なければならないため、カーネルがこのレイアウトを理解することが重要です。この速度は、すべてを妨げたり妨げたりしないほど速いものから、システムの残りの部分がどれほど忙しいかによって異なります。

どのようにできるLinuxビュー - ノードインターリーブ

私のサーバーには、NUMAを「無効」にし、パッケージ全体を16個のコアと128GiB RAMのCPUで処理するオプションがあります。私が理解したのは、1つのノードで実行されているプロセスがノード0のメモリ半分とノード1のメモリ半分を見ることができるように、ノード間でメモリアドレスをインターリーブすることによってこれを行います。

まず、オペレーティングシステムまたはワークロードがNUMA 3をサポートしていない場合は必要です。第二に、メモリを正しく割り当てるのは本当に難しいです。ワークロードにプロセス間通信が多い場合、最適なレイアウトを見つけることは必ずしも可能ではありません。また、あるノードでは、プロセスが別のノードに接続されているハードウェアに対して多くのI / Oを実行する可能性があります。ノード全体にRAMを均等に分散すると、アクセスの半分以上がローカルで行われ、最悪のシナリオは発生しません。


脚注:
1. Intelはこれを8/16コアと呼びます。今回の訴訟
2. 合わせるためにlstopo --no-io --no-legend --no-index=PU,core --gridsize 5 --no-attrs=cache --horiz
3を使用しました。アーキテクチャは2011年のアーキテクチャで、おそらく同じOSを維持しながら古いハードウェアを交換するために使用されたでしょう。

おすすめ記事