NUMA(Non-Uniform Memory Access)とは
Non-uniform memory access - Wikipedia, the free encyclopedia
NUMA(Non-Uniform Memory Access、ヌマ)とは、共有メモリ型マルチプロセッサコンピュータシステムのアーキテクチャのひとつで、複数プロセッサが共有するメインメモリへのアクセスコストが、メモリ領域とプロセッサに依存して均一でないアーキテクチャである。
複数CPUがある場合、近いメモリと遠いメモリが構成上存在し、データが置かれる場所によって、性能に差が出てしまうアーキテクチャである。
ネットワーク性能を測定する場合も、NUMA構成上不利な状態で性能測定をしてしまうと、思うような性能が出ない場合があるため、注意が必要である。本稿では、NUMA及びCPU構成の概要とネットワーク性能についてを述べる。
Intelサーバーの場合、Nehalem世代からNUMAが導入された。
参考:
Nehalem世代のアーキテクチャ | データセンター完全ガイド
ASCII.jp:インテルCPUの大きな転換点に立つNehalem (2/3)
CPUにメモリーコントローラーが内蔵されるということは、複数のCPUを搭載するシステムでは、それぞれのCPUごとにメモリーが搭載されることになる。つまり、メモリーアーキテクチャーがNUMA(ヌーマ、Non Uniform Memory Access)になる。なお、米AMD社のOpteronもNUMAアーキテクチャーを採用している。
NUMAに関する細かな説明は省くが、CPUごとにメインメモリーが分かれるため、OSはそれぞれのCPUに属するメモリーを参照する必要が出てくる。
Intel Nehalem世代サーバー(2009年頃~):
- CPUにメモリコントローラを内蔵
- I/Oはサウスブリッジ経由
従来、CPUからメモリへアクセスする場合は、CPUが接続されているノースブリッジと呼ばれるチップセットを経由していたため、CPUから直接メモリアクセスできるようになった点が大きなアップデートであった。
Intel SandyBridge世代からは、I/OコントローラもCPUに内蔵された。
参考:
Intel SandyBridge世代以降のサーバー(2012年頃~):
- CPUにメモリコントローラとI/Oコントローラを内蔵
要するにI/Oパスに関わるコンポーネントは全部CPUに統合された。
ネットワーク性能に関する考察
さて、本題のネットワーク性能についてだが、ネットワーク通信では送信側サーバは、メモリからNIC、受信側サーバは、NICからメモリへデータが流れることになる。
- 送信側サーバ:メモリ--->PCI Expressバス--->NIC
- 受信側サーバ:NIC--->PCI Expressバス--->メモリ
※実際には、データ転送処理でCPUコピーが発生する場合には、CPUレジスタへのロードが必要となるため、メモリ/CPU間のデータ転送が発生する。DMA転送で処理される場合にはデータはCPUを経由しない(RDMA含む)。
上述の通り、現在のサーバアーキテクチャでは、NICが接続されるPCI ExpressバスはCPUから直接出ており、メモリもCPU直結であるため、理想的にはネットワーク通信に関わるNICとメモリは同じCPUで完結すべきである。
上記Dellホワイトペーパーでは、NUMAノードの近いメモリと遠いメモリでどの程度の性能差が発生するかについて、測定例が示されている。
NUMAノードの近いメモリに対して、遠いメモリは半分のバンド幅しか性能が出ていない。
レイテンシー(処理完了時間)についても、遠いメモリは近いメモリより約60%も時間が掛かってしまう。
以上、NUMA構成とネットワーク性能についての関連事項と性能傾向について説明した。次回は、実際にLinux環境でネットワーク性能を測定し、NUMA構成の与える影響と設定方法について紹介する。
NUMAアーキテクチャとネットワーク性能(2)-実践編 - Interconnect Your Future - InfiniBand and RoCE