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は私のコンピュータが次のようになると思います。
私は以下を使用して画像を生成します。イストポ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を維持しながら古いハードウェアを交換するために使用されたでしょう。