NUMAアーキテクチャを理解する

Understanding Numa Architecture



コンピュータの設計は常に妥協です。コンピュータの4つの基本コンポーネント(中央処理装置(CPU)またはプロセッサ、メモリ、ストレージ、およびコンポーネントを接続するためのボード(I / Oバスシステム))を可能な限り巧みに組み合わせて、次のようなマシンを作成します。費用対効果が高く、強力です。設計プロセスには、主に、プロセッサ(コプロセッサ、マルチコアセットアップ)、メモリの種類と量、ストレージ(ディスク、ファイルシステム)、および価格に対する最適化が含まれます。コプロセッサとマルチコアアーキテクチャの背後にある考え方は次のとおりです。可能な限り最小のスペースでできるだけ多くの単一のコンピューティングユニットに操作を分散し、コンピューティング命令の並列実行をより利用可能で手頃な価格にするため。メモリに関しては、個々のコンピューティングユニットが対処できる量またはサイズ、および可能な限り最小の遅延で動作するメモリタイプの問題です。ストレージは外部メモリに属し、そのパフォーマンスは、ディスクタイプ、使用中のファイルシステム、スレッド化、転送プロトコル、通信ファブリック、および接続されているメモリデバイスの数によって異なります。

I / Oバスの設計はコンピューターの動脈を表しており、上記の単一コンポーネント間でデータを交換できる量と速度を大幅に決定します。最上位のカテゴリは、ハイパフォーマンスコンピューティング(HPC)の分野で使用されるコンポーネントによって導かれます。 2020年半ばの時点で、HPCの現在の代表的なものには、Nvidia TeslaとDGX、Radeon Instinct、およびIntel Xeon Phi GPUベースのアクセラレータ製品があります(製品の比較については[1,2]を参照)。







NUMAを理解する

Non-Uniform Memory Access(NUMA)は、最新のマルチプロセッシングシステムで使用されている共有メモリアーキテクチャについて説明しています。 NUMAは、集約メモリがすべてのノード間で共有されるように、複数の単一ノードで構成されるコンピューティングシステムです。各CPUには独自のローカルメモリが割り当てられ、システム内の他のCPUからメモリにアクセスできます[12、7]。



NUMAは、複数の中央処理装置(CPU)をコンピューターで使用可能な任意の量のコンピューターメモリに接続するために使用される巧妙なシステムです。単一のNUMAノードは、CPUが他のNUMAノードに関連付けられたメモリに体系的にアクセスできるように、スケーラブルなネットワーク(I / Oバス)を介して接続されます。



ローカルメモリは、CPUが特定のNUMAノードで使用しているメモリです。外部メモリまたはリモートメモリは、CPUが別のNUMAノードから取得しているメモリです。 NUMA比率という用語は、ローカルメモリへのアクセスコストに対する外部メモリへのアクセスコストの比率を表します。比率が大きいほどコストが高くなるため、メモリへのアクセスにかかる時間が長くなります。





ただし、そのCPUが自身のローカルメモリにアクセスしている場合よりも時間がかかります。ローカルメモリアクセスは、低遅延と高帯域幅を兼ね備えているため、大きな利点です。対照的に、他のCPUに属するメモリにアクセスすると、待ち時間が長くなり、帯域幅のパフォーマンスが低下します。

振り返って:共有メモリマルチプロセッサの進化

Frank Dennemann [8]は、これらのシステムがその目的のために特別に設計されているとしても、最新のシステムアーキテクチャでは真にUniform Memory Access(UMA)を許可しないと述べています。簡単に言えば、並列コンピューティングのアイデアは、特定のタスクを計算するために協力するプロセッサのグループを用意することでした。これにより、他の点では古典的な順次計算が高速化されます。



Frank Dennemann [8]が説明したように、1970年代初頭、リレーショナルデータベースシステムの導入により、複数の同時ユーザー操作と過剰なデータ生成に対応できるシステムの必要性が主流になりました。ユニプロセッサのパフォーマンスは驚異的ですが、マルチプロセッサシステムはこのワークロードを処理するための設備が整っていました。費用効果の高いシステムを提供するために、共有メモリアドレス空間が研究の焦点になりました。当初、クロスバースイッチを使用するシステムが提唱されていましたが、この設計の複雑さはプロセッサの増加に伴って拡大し、バスベースのシステムをより魅力的にしました。バスシステムのプロセッサは、バス上で要求を送信することによってメモリ空間全体にアクセスできます。これは、使用可能なメモリを可能な限り最適に使用するための非常に費用効果の高い方法です。

ただし、バスベースのコンピュータシステムにはボトルネックがあります。これは、スケーラビリティの問題につながる帯域幅の制限です。システムに追加されるCPUが多いほど、使用可能なノードあたりの帯域幅は少なくなります。さらに、追加されるCPUが多いほど、バスが長くなり、結果としてレイテンシーが高くなります。

ほとんどのCPUは2次元平面で構築されました。 CPUには、統合メモリコントローラーも追加する必要がありました。各CPUコアに4つのメモリバス(上、下、左、右)を配置するという単純なソリューションでは、使用可能な全帯域幅が可能でしたが、それはこれまでのところです。 CPUはかなりの時間4コアで停滞しました。チップが3Dになると、上下にトレースを追加することで、対角線上にあるCPUへの直接バスが可能になりました。 4コアのCPUをカードに配置し、それをバスに接続することが、次の論理的なステップでした。

現在、各プロセッサには、共有オンチップキャッシュとオフチップメモリ​​を備えた多くのコアが含まれており、サーバー内のメモリのさまざまな部分でメモリアクセスコストが変動します。

データアクセスの効率を改善することは、現代のCPU設計の主な目標の1つです。各CPUコアには、小さなレベル1のキャッシュ(32 KB)と大きな(256 KB)レベル2のキャッシュが備わっていました。さまざまなコアは、後で数MBのレベル3キャッシュを共有し、そのサイズは時間の経過とともに大幅に増加しました。

キャッシュミス(キャッシュにないデータの要求)を回避するために、適切な数のCPUキャッシュ、キャッシュ構造、および対応するアルゴリズムを見つけるために多くの調査時間が費やされます。スヌープ[4]とキャッシュコヒーレンシ[3,5]をキャッシュするためのプロトコルの詳細な説明、およびNUMAの背後にある設計アイデアについては、[8]を参照してください。

NUMAのソフトウェアサポート

NUMAアーキテクチャをサポートするシステムのパフォーマンスを向上させる可能性のあるソフトウェア最適化手段には、プロセッサアフィニティとデータ配置の2つがあります。 [19]で説明されているように、プロセッサ親和性[…]は、プロセスまたはスレッドを単一のCPUまたはCPUの範囲にバインドおよびバインド解除して、プロセスまたはスレッドが指定された1つまたは複数のCPUでのみ実行されるようにします。任意のCPU。データ配置という用語は、コードとデータがメモリ内で可能な限り近くに保持されるソフトウェアの変更を指します。

さまざまなUNIXおよびUNIX関連のオペレーティングシステムは、次の方法でNUMAをサポートします(以下のリストは[14]から抜粋したものです)。

  • Originサーバーシリーズを搭載した1240CPUを超えるccNUMAアーキテクチャのSiliconGraphicsIRIXサポート。
  • Microsoft Windows7およびWindowsServer 2008 R2は、64の論理コアを介したNUMAアーキテクチャのサポートを追加しました。
  • Linuxカーネルのバージョン2.5には、基本的なNUMAサポートがすでに含まれていましたが、以降のカーネルリリースでさらに改善されました。 Linuxカーネルのバージョン3.8は、新しいNUMA基盤をもたらし、それ以降のカーネルリリースでより効率的なNUMAポリシーの開発を可能にしました[13]。 Linuxカーネルのバージョン3.13は、プロセス間でメモリページを共有したり、透過的な巨大ページを使用したりするなどのケースの処理とともに、プロセスをメモリの近くに配置することを目的とした多数のポリシーをもたらしました。新しいシステム制御設定により、NUMAバランシングを有効または無効にしたり、さまざまなNUMAメモリバランシングパラメータを設定したりできます[15]。
  • OracleとOpenSolarisはどちらも、論理グループの導入によりNUMAアーキテクチャをモデル化しています。
  • FreeBSDは、バージョン11.0で初期NUMAアフィニティとポリシー設定を追加しました。

Computer Science and Technology、Proceedings of the International Conference(CST2016)の中で、Ning Caiは、NUMAアーキテクチャの研究は主にハイエンドのコンピューティング環境に焦点を当てており、パフォーマンスを最適化するNUMA対応の基数パーティショニング(NaRP)を提案しています。ビジネスインテリジェンスアプリケーションを高速化するためのNUMAノードの共有キャッシュの使用。そのため、NUMAは、いくつかのプロセッサを備えた共有メモリ(SMP)システム間の中間点を表しています[6]。

NUMAとLinux

上記のように、Linuxカーネルはバージョン2.5以降NUMAをサポートしています。 Debian GNU / LinuxとUbuntuはどちらも、2つのソフトウェアパッケージnumactl [16]とnumad [17]を使用してプロセス最適化のNUMAサポートを提供します。 numactlコマンドを使用すると、システムで使用可能なNUMAノードのインベントリを一覧表示できます[18]。

#numactl --hardware
利用可能:2ノード((0-1)。
ノード0CPU:0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 2. 3
ノード0サイズ:8157MB
ノード0自由:88MB
ノード1CPU:8 9 10 十一 12 13 14 15 24 25 26 27 28 29 30 31
ノード1サイズ:8191MB
ノード1自由:5176MB
ノード距離:
ノード0 1
010 20
120 10

NumaTopは、ランタイムメモリの局所性を監視し、NUMAシステムのプロセスを分析するためにIntelによって開発された便利なツールです[10,11]。このツールは、潜在的なNUMA関連のパフォーマンスのボトルネックを特定できるため、メモリ/ CPU割り当てのバランスを取り直して、NUMAシステムの可能性を最大化するのに役立ちます。詳細については、[9]を参照してください。

使用シナリオ

NUMAテクノロジをサポートするコンピュータでは、すべてのCPUがメモリ全体に直接アクセスできます。CPUはこれを単一の線形アドレス空間と見なします。これにより、64ビットアドレス指定スキームをより効率的に使用できるようになり、データの移動が速くなり、データの複製が少なくなり、プログラミングが容易になります。

NUMAシステムは、データマイニングや意思決定支援システムなどのサーバー側アプリケーションにとって非常に魅力的です。さらに、このアーキテクチャを使用すると、ゲームや高性能ソフトウェア用のアプリケーションの作成がはるかに簡単になります。

結論

結論として、NUMAアーキテクチャは、その主な利点の1つであるスケーラビリティに対応しています。 NUMA CPUでは、1つのノードが同じノード上のメモリにアクセスするための帯域幅が広くなるか待ち時間が短くなります(たとえば、ローカルCPUはリモートアクセスと同時にメモリアクセスを要求します。優先順位はローカルCPUにあります)。これにより、データが特定のプロセス(したがってプロセッサ)にローカライズされている場合、メモリスループットが劇的に向上します。欠点は、あるプロセッサから別のプロセッサにデータを移動するコストが高くなることです。このケースがあまり頻繁に発生しない限り、NUMAシステムは従来のアーキテクチャのシステムよりもパフォーマンスが優れています。

リンクとリファレンス

  1. NVIDIATeslaとRadeonInstinctを比較してください。 https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. NVIDIADGX-1とRadeonInstinctを比較してください。 https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. キャッシュコヒーレンス、ウィキペディア、 https://en.wikipedia.org/wiki/Cache_coherence
  4. バススヌーピング、ウィキペディア、 https://en.wikipedia.org/wiki/Bus_snooping
  5. マルチプロセッサシステムのキャッシュコヒーレンスプロトコル、オタクのためのオタク、 https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. コンピューターの科学と技術–国際会議の議事録(CST2016)、Ning Cai(Ed。)、World Scientific Publishing Co Pte Ltd、ISBN:9789813146419
  7. Daniel P.BovetとMarcoCesati:Linuxカーネルの理解におけるNUMAアーキテクチャの理解、第3版、O’Reilly、 https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. フランク・デネマン:NUMAディープダイブパート1:UMAからNUMAまで、 https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King:NumaTop:NUMAシステム監視ツール、 http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. ヌマトップ、 https://github.com/intel/numatop
  11. Debian GNU / Linux用のパッケージnumatop、 https://packages.debian.org/buster/numatop
  12. Jonathan Kehayias:Non-Uniform Memory Access / Architectures(NUMA)を理解し、 https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. カーネル3.8のLinuxカーネルニュース、 https://kernelnewbies.org/Linux_3.8
  14. Non-Uniform Memory Access(NUMA)、ウィキペディア、 https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Linuxメモリ管理ドキュメント、NUMA、 https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Debian GNU / Linux用のパッケージnumactl、 https://packages.debian.org/sid/admin/numactl
  17. Debian GNU / Linux用のパッケージnumad、 https://packages.debian.org/buster/numad
  18. NUMA構成が有効か無効かを確認するにはどうすればよいですか?、 https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. プロセッサ親和性、ウィキペディア、 https://en.wikipedia.org/wiki/Processor_affinity

ありがとうございました

この記事を準備する間、著者はGeroldRupprechtのサポートに感謝します。

著者について

Plaxedes Nehandaは、南アフリカのヨハネスブルグに拠点を置く、イベントプランナー、バーチャルアシスタント、転記者、熱心な研究者など、多くの帽子をかぶった、マルチスキルで自発的な多才な人物です。

Prince K. Nehandaは、ジンバブエのハラレにあるPaeflow Meteringの計装および制御(計測)エンジニアです。

Frank Hofmannは、Linux-UserやLinux Magazineなどの雑誌の開発者、トレーナー、著者として、できればベルリン(ドイツ)、ジュネーブ(スイス)、ケープタウン(南アフリカ)の道路で働いています。彼はDebianパッケージ管理本の共著者でもあります( http://www.dpmb.org )。