XenServer

XenServer 9 における NUMA の最適化

概要

Non-Uniform Memory Access (NUMA) は、メモリが特定の CPU ソケットに接続されたノードに分割されるマルチプロセッサメモリアーキテクチャです。ローカル NUMA ノード上のメモリにアクセスする方が、リモートノード上のメモリにアクセスするよりもレイテンシが低くなります。VM の vCPU とそのメモリが同じ NUMA ノードに配置されている場合、ワークロードはメモリアクセスレイテンシを低減し、パフォーマンスを向上させることができます。

UMA と NUMA の比較

  • UMA (Uniform Memory Access) ホストは、単一の物理メモリノードを CPU に提示します。
  • NUMA ホストは複数のメモリノードを公開します。CPU は、リモートノードからメモリにアクセスするよりも、ローカルノードからメモリにアクセスする方がレイテンシが低くなります。

最適化された NUMA 配置の利点

  • アプリケーションの応答性とワークロードのスループットが向上します。
  • ホストあたりの VM 密度が高くなり、追加のホストの必要性とインフラストラクチャ全体のコストが削減されます。

制限事項

  • ホスト上の単一の NUMA ノードに VM 用の十分な空きメモリがない場合、XS9 は VM を起動できるように、複数のノードにメモリを分散させて VM を起動します。
  • メモリが分散されている場合、VM は複数の NUMA ノード (NUMA nodes > 1) を使用し、NUMA 最適化されていません。
  • パフォーマンスの向上は、ワークロード、ベンチマーク、CPU タイプによって異なります。

監視とトラブルシューティング

VM ごとの RRD メトリック (デフォルトでは無効) は、NUMA の動作と vCPU スケジューリングの監視に役立ちます。

メトリック

  • NUMAノード (numa_nodes): VMが使用するNUMAノードの数。値1は最適化されていることを示し、1より大きい値は最適化されていないことを示します。
  • メモリNUMAノードX (memory_numa_node_X): 物理NUMAノードXから割り当てられたVMメモリの量。値0はそのノードからのメモリがないことを意味します。
  • vCPU実行可能(任意) (runnable_any): 少なくとも1つのvCPUが準備完了であるにもかかわらず、pCPUが利用できない時間の割合。これはCPU競合の初期指標です。
  • vCPU実行可能(合計) (runnable_vcpus): スケジューリング遅延による、すべてのvCPUにおける予想されるパフォーマンス低下の割合。
  • NUMA非アフィニティvCPU (numa_node_nonaffine_vcpus): vCPUがVMメモリと同じNUMAノードにないpCPUで実行される時間の割合。値が高いほど、メモリアクセス遅延が増加していることを示します。

ヌーマ

デバッグチェックリスト

  1. NUMA nodesを確認して、VMがいくつのNUMAノードを使用しているかを確認します。
  2. vCPUs runnable anyでドメインレベルのスケジューリング競合を確認します。
  3. vCPUs runnable sumでvCPUレベルのスケジューリング遅延を確認します。
  4. NUMA non-affine vCPUsでNUMAアフィニティ違反と関連する遅延を確認します。

メトリックを有効にしてサンプルをエクスポートする

VMごとのRRDメトリックはデフォルトで無効になっています。VMのメトリック(例: runnable_any)を有効にしてサンプルをエクスポートするには:

# Enable the data source for a VM
xe vm-data-source-record uuid=<vm-uuid> data-source=runnable_any

# Export sample RRD output
rrd2csv VM:AVERAGE::runnable_any
<!--NeedCopy-->

NUMA配置を構成する (xe CLI)

NUMA配置最適化は、XS9ホストでデフォルトで有効になっています。有効にするための操作は不要です。

ホストでNUMA配置最適化を無効にするには、ホストのNUMAアフィニティポリシーをanyに設定します。

# View current policy
xe host-param-get uuid=<host-uuid> param-name=numa-affinity-policy

# Disable optimization
xe host-param-set uuid=<host-uuid> numa-affinity-policy=any

# Verify
xe host-param-get uuid=<host-uuid> param-name=numa-affinity-policy
<!--NeedCopy-->

デフォルトで有効になっている場合、ポリシー値はdefault_policyです。無効になっている場合、値はanyです。

XenServer 9 における NUMA の最適化