第9章 NUMA

従来の x86 システムでは、メモリーはすべて均等に全 CPU からアクセスできるようになっていました。どの CPU が動作を実行するかに関わらず、UMA (Uniform Memory Access) と呼ばれるアクセスタイムは同じになります。
最新の x86 プロセッサーでは、この動作が異なってきています。NUMA (Non-Uniform Memory Access) では、システムのメモリーが複数の NUMA ノード に区分けされます。これらのノードは、ソケット、またはシステムメモリーのローカルのサブセットに対する同一のアクセス待ち時間を持つ特定セットの CPU に対応しています。
本章では、仮想化環境におけるメモリーの割り当ておよび NUMA チューニング設定について説明します。

9.1. NUMA メモリー割り当てのポリシー

システム内のノードからどのようにメモリーを割り当てるかは、以下のポリシーで定義されます。
Strict
Strict ポリシーでは、目的のノードでメモリーを割り当てられない場合は割り当てに失敗することになります。
メモリーモード属性を定義せずに NUMA ノードセットのリストを指定すると、デフォルトで strict モードが選択されます。
Interleave
メモリーページはノードセットで指定されたノード全体に割り当てられますが、割り当てはラウンドロビン方式で行われます。
Preferred
単一の優先メモリーノードからのみメモリーの割り当てが行われます。十分なメモリーが使用できない場合には、他のノードからメモリーを割り当てることができます。
目的のポリシーを有効にするには、ドメイン XML ファイルの <memory mode> 要素の値にそのポリシーを設定します。
<numatune>
        <memory mode='preferred' nodeset='0'>
</numatune>

重要

strict モードにおいてメモリーがオーバーコミットされ、ゲストに十分な Swap 領域がない場合、カーネルはゲストのプロセスの一部を強制終了して追加のメモリーを取得します。この状況を回避するために、Red Hat では preferred ポリシーによる割り当てを使用し、単一のノードセットを指定する (例: nodeset=「0」) ことを推奨します。