【にゅーま】

NUMA とは?

最終更新:
💡 どのCPUから、どのメモリを使うかが性能に関わる

CPUからメモリへのアクセス経路によって、遅延や帯域が異なるメモリアーキテクチャ。CPUやメモリをノードとして扱い、近いローカルメモリと別ノードのリモートメモリを区別する。

📌 このページのポイント
CPUとメモリのアクセス経路 ノード0 ノード1 CPUのグループ CPUのグループ メモリ メモリ ローカル ローカル 橙の経路:別ノードへのリモートアクセス
同じノードのメモリと別ノードのメモリでは、アクセス経路が異なる。ノードはCPU一つやソケット一つと同じ単位ではなく、遅延や帯域の差は構成と負荷による。
ひよこ ひよこ
NUMAってどういうときに関係してくるの?
ペンギン先生 ペンギン先生
CPUからメモリへ到達する経路によって、遅延や帯域が異なるシステムで関係するよ。典型的には同じノードのローカルメモリと、別ノードのリモートメモリを区別する。近い・遠いは、単に物理的な距離を測った表現ではなく、接続構成とアクセス経路のことなんだ。
ひよこ ひよこ
どのくらい速度差があるの?
ペンギン先生 ペンギン先生
システムの構成や負荷、アクセスの仕方によるよ。遠いメモリは別の接続経路を通るので、遅延や帯域の違いが性能に影響する。一定の倍率で遅くなるとは言えないし、全体の性能を知るには実際の処理を測る必要があるんだ。
ひよこ ひよこ
NUMAを意識するって、具体的にどうするの?
ペンギン先生 ペンギン先生
処理を実行するCPUと、使うメモリの割り当てを合わせて考えるよ。Linuxのnumactlでは両方の方針を指定できる。ただしCPUを指定するだけでメモリの配置も必ずそろうわけではない。メモリを特定ノードだけに制限すると、空きが足りず割り当てに失敗することもあるんだ。
ひよこ ひよこ
NUMAノードはCPU一つということ?
ペンギン先生 ペンギン先生
同じ単位ではないよ。ノードには複数のCPUを含められるし、LinuxではCPUを含まないメモリのノードも扱う。CPUやCPUの装着部の数だけからノード構成を決めつけず、OSから見える構成を確認する。配置を固定すればいつも速くなる、というものでもないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「NUMA」って出てきたら「CPUとメモリの接続経路によってアクセス特性が変わる仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「NUMA (Non-Uniform Memory Access)」 = 不均一メモリアクセス
💬 Non-Uniform(不均一な)+ Memory Access(メモリアクセス)で、メモリアクセス速度が均一ではないという意味だよ

参考資料

← 用語集にもどる