本文へスキップ

非一様メモリー クセス(NUMA)とは何ですか?

非一様メモリー リアクセス(NUMA)

非一様メモリー リアクセス(NUMA)は、コンピュータ メモリー 設計であり、マルチプロセッサシステムで使用されます。この方式では、プロセッサに対するメモリー 、メモリー 異なります。NUMAアーキテクチャでは、各プロセッサが独自のローカルメモリーを持っています。他のプロセッサメモリー アクセスすることは可能ですが、相互接続を経由し、場合によっては他のプロセッサを通過する必要があるため、アクセス速度は遅くなります。これにより、追加のレイテンシや帯域幅の競合が生じます。

NUMAは、すべてのプロセッサが単一メモリー 共有する従来の対称型マルチプロセッシング(SMP)システムのスケーラビリティの限界に対処するために開発されました。メモリー 各プロセッサのメモリー 配置することで、NUMAは、特に多数のCPUやコアを搭載したシステムにおいて、メモリー 効率と全体的なパフォーマンスを向上させます。

NUMA向けに最適化された最新のオペレーティングシステムやアプリケーションは、計算を実行するプロセッサの近くにデータを保持メモリー 割り当てることができ、メモリー レイテンシを最小限に抑え、スループットを向上させることができます。NUMAは、サーバー、ハイパフォーマンス (HPC)システム、および大規模なメモリー リソースメモリー 必要とするエンタープライズワークロードで一般的に使用されています。

NUMAはどのように機能するのでしょうか?

NUMAシステムでは、アーキテクチャは複数のノードに分割されています。各ノードには、1つ以上のプロセッサ(またはCPUソケット)と、それ専用のメモリーが含まれています。これらのノードは相互に接続されており、プロセッサはメモリーの両方にアクセスすることができます。

メモリー 物理的に同じノードにメモリー )へのアクセスは高速で、レイテンシも低くなります。プロセッサがメモリー 別のメモリー )にアクセスする場合、ノード間の相互接続経路によって追加のレイテンシが発生します。このレイテンシの差こそが、NUMAの「非一様性」を特徴づけるものです。

現代のNUMAシステムでは、システムファームウェア、オペレーティングシステム、およびアプリケーションがNUMAに対応していることが求められます。NUMA対応のソフトウェアは、タスクとそのメモリー 同じノード上でメモリー ように、メモリー 割り当てメモリー プロセスのスケジューリングを行います。これにより、ノード間のメモリー 削減され、パフォーマンスが最適化されます。

NUMAは通常、サーバーやハイパフォーマンス など、2つ以上のCPUソケットを備えたシステムに実装されます。各ソケットには独自のメモリー とローカルDRAMメモリー ダイナミック・ランダム・アクセスメモリー )が搭載されており、インテル® Ultra Interconnect(UPI)AMD Fabricなどのシステム相互接続によってソケット同士が連結され、メモリー リモートメモリー へのアクセスが可能になります。

NUMAとシステムアーキテクチャ設計

近代化されたデータセンターや 企業インフラにおいてマルチソケットシステムが普及するにつれ、NUMAがシステムアーキテクチャに与える影響を理解することは極めて重要です。ハードウェアベンダーは、NUMAトポロジーを考慮してサーバーマザーボードやCPU相互接続を設計しており、プロセッサとメモリー データパスを最適化しています。これはアプリケーションのパフォーマンスに直接的な影響を与え、特に複数のコアやソケットに水平方向にスケールするワークロードにおいて顕著です。

設計上の考慮事項には、メモリー 、BIOSレベルのNUMA設定、およびコンポーネントの物理的な配置も含まれます。システムアーキテクトは、ハードウェアの機能を最大限に活用するために、アプリケーションがメモリー どのように相互作用するかを考慮しなければなりません。最適化が不十分なハードウェア構成は、過度なメモリー レイテンシの増加など、NUMAの動作が最適化されない原因となる可能性があります。

NUMAシステム向けソフトウェア最適化

NUMAがその性能を最大限に発揮するためには、ソフトウェアが基盤となるメモリー を認識するように設計されるか、少なくとも設定される必要があります。Windows などのオペレーティングシステムLinux NUMAに対するカーネルレベルのサポートが組み込まれており、プロセッサアフィニティ、メモリー 、NUMA対応スケジューリングなどの機能が利用可能です。これらの仕組みにより、スレッドが、最も頻繁に使用するメモリー へのアクセスが高速なCPU上でスケジューリングされることが保証されます。

アプリケーション開発者やシステム管理者は、NUMA固有のAPIやチューニング手法を活用することで、パフォーマンスをさらに向上させることができます。OpenMPやMPIなどの並列プログラミングフレームワークでは、スレッドの配置やメモリー 制御するオプションが提供されています。エンタープライズやHPCのワークロードにおいて、このレベルの最適化を行うことで、特にメモリー マルチソケットシステム上で実行する場合、メモリー 大幅に低減し、スループットを向上させることができます。

NUMAのユースケースと利点

NUMAは、高い並列処理能力とメモリー 必要とするワークロードにおいて、パフォーマンス上の利点をもたらします。ノード間のメモリー 削減し、利用可能な帯域幅をより有効に活用することで、NUMAはスケーラビリティを向上させ、マルチソケットアーキテクチャにおけるボトルネックの解消に貢献します。

ハイパフォーマンス (HPC)

ハイパフォーマンス・コンピューティングにおいて、科学シミュレーション、モデリング、および大規模データ分析のワークロードは、複数のCPUソケットにわたるメモリー レイテンシを低減することで、NUMAの恩恵を受けています。

仮想化プラットフォーム

ハイパーバイザーと仮想マシンは、NUMA対応のスケジューリングを利用するように最適化することができ、これにより、仮想CPUとそのメモリー 同じ物理ノード上にメモリー 保証されます。

メモリー

NUMAは、大量のデータをRAMに直接格納するデータベースシステムにおいて、低遅延メモリー 維持するのに役立ちます。

大規模エンタープライズアプリケーション

NUMAは、複数のコアにまたがる大規模なメモリー へのアクセスを必要とする、エンタープライズリソースプランニング(ERP)システムなどのエンタープライズソフトウェアにおいて、応答性とスループットを向上させます。

よくあるご質問

  1. NUMAクラスタリングとは何ですか?
    NUMAクラスタリングとは、NUMA対応システム内で、プロセッサとメモリー をノードまたはクラスタメモリー 構成することを指します。各クラスタには独自のローカルメモリーがあり、クラスタ内のプロセッサはそのメモリー アクセスできます。この構成により、共有メモリー への競合が軽減され、パフォーマンスとスケーラビリティが向上します。
  2. NUMAトポロジーとは何ですか?
    NUMAトポロジーとは、システム内でCPU、メモリー、および相互接続が物理的および論理的にどのように配置されているかを示すものです。これは、どのプロセッサがどのメモリー 接続されているか、またノード間のアクセスがどのように行われるかを定義します。システムのトポロジーを理解することは、メモリー アプリケーションのパフォーマンスを最適化するのに役立ちます。
  3. 仮想化においてNUMAは重要ですか?
    はい、NUMAは仮想マシンに対して最適なメモリー 配置を確保する上で重要な役割を果たします。ハイパーバイザーがNUMAに対応している場合、仮想CPUとそれに関連するメモリー 同じメモリー 保持することができ、これによりレイテンシを低減し、パフォーマンスの低下を防ぐことができます。
  4. システムでNUMAを有効にするにはどうすればよいですか?
    最近のサーバープラットフォームでは、通常、NUMAサポートはデフォルトで有効になっています。場合によっては、システムのBIOSまたはUEFI設定で有効にする必要があるかもしれません。有効にすると、システムはNUMAトポロジーをオペレーティングシステムに公開し、スケジューリングとメモリー 最適化が行われます。
  5. ソフトウェアがNUMAに対応していない場合はどうなるのでしょうか?
    ソフトウェアNUMAに対応していない場合、ノード間でメモリー アクセスすることになり、レイテンシの増加やパフォーマンスの低下を招く可能性があります。これは、特に高負荷時において、大規模なメモリー 備えたマルチソケットシステムにおけるボトルネックとなる可能性があります。