CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
今回は Hyper-V と NUMA アーキテクチャの関係について説明していきます。NUMA とは Non-Uniform Memory Access の略で直訳すると [均一ではないメモリアクセス] となります。NUMA 自体の説明はWeb上に良い資料がたくさんありますので、NUMAについて知りたい方はそれらのドキュメントを参照してください。今回は Hyper-V の NUMA への対応についてご紹介します。
Windows Server は古くから NUMA に対応しており、複数のCPUと大量のメモリを搭載した環境でメモリアクセスのパフォーマンス低下を回避するロジックが組み込まれています。Windows Server 2012 以降のタスクマネージャーでは、NUMA ノード毎の CPU 利用率が表示可能ですし、パフォーマンスモニターでは [NUMA Node Memory] というオブジェクトを利用することで、NUMA ノード毎の空きメモリ量等を把握することができます。
また、 SQL Server 等の NUMA に最適化されたアプリケーションでは大量のメモリ領域をパフォーマンスの低下を最小限に抑えつつ利用することが可能です。
図:タスクマネージャーで NUMA ノード毎のCPU 使用率を表示する
図:パフォーマンス モニターで NUMA ノード毎のメモリ情報を表示する
Hyper-V としては Windows Server 2008 R2 の世代から NUMA に対応済みで、仮想マシンに割り当てるメモリを複数の NUMA ノードにまたがらないように配慮して、仮想マシンのメモリアクセスのパフォーマンスを最適化する機能がありました。この機能は最新の Hyper-V でも有効で、Hyper-V マネージャーの [Hyper-V の設定] から変更することができます。
図:Hyper-V ホストの NUMA ノードにまたがるメモリ割り当ての設定
Windows Server 2012 に搭載された Hyper-V からは Virtual NUMA という機能が実装され、仮想マシンのリソースが複数のNUMAノードにまたがって割り当てられた場合はその情報をゲストOSもNUMA情報として通知することが可能になりました。この機能によってゲスト OS自身が NUMA ノードを意識したデータの配置をすることでパフォーマンスの低下を最小限に抑えることができます。この Virtual NUMA の設定は Hyper-V マネージャーの仮想マシンの設定画面から行うことができます。
図:仮想マシンの設定画面から Virtual NUMA の設定を行う
図:仮想マシンで NUMA を認識する Virtual NUMA (仮想マシンでタスクマネージャーを表示しているため [仮想マシン] の値が [はい] になっている)
次にWindows で NUMA に関するデータを取得するために CoreInfo というツールをご紹介します。CoreInfo はWindows Sysinternals に含まれるツールで こちら からダウンロードすることができます。ダウンロードしたZipファイルを解凍してコマンドプロンプトから CoreInfo.exe を実行すると NUMA 情報を含む CPU に関する情報が表示されます。例えば [Logical Processor to NUMA Node Map] のエリアでは、各論理プロセッサがどのNUMAノードに所属しているかを表示しています。そして [Approximate Cross-NUMA Node Access Cost (relative to fastest)] と書かれているエリアでは、NUMAノードをまたいだメモリアクセスをした場合のコストを把握ことができます。
CoreInfo の結果の中で Logical Processor to NUMA Node MAP という部分を見るとNUMA ノードをまたがったメモリアクセスにはペナルティが発生しすることがわかります。(このキャプチャではノード 00 内のメモリアクセスに比べて1.5から1.7倍のコストがかかることがわかります) ですのでHyper-V を利用する上でのNUMA への考え方としては、可能な限り複数NUMAにまたがらないように仮想マシンを設定するほうが無難です。具体的には先に説明した Hyper-V の設定や、必要以上のメモリを仮想マシンに割り当てないことです。どうしても大容量のメモリを仮想マシンに割り当てる必要がある場合はVirtual NUMA によってパフォーマンスの低下を最小限に抑えることができます。
Virtual NUMA が利用していく中で、障害調査などで Virtual NUMA がどの物理NUMAに割り当てられているかを把握する必要が出てくるかもしれません。Windows Server 2012 R2 のHyper-V ではそれらの情報を表示するGUIは搭載していません。しかし、こちらのサイトにあるようなスクリプトを利用することで調査することが可能です。
今回は Hyper-V と NUMA アーキテクチャについてご紹介しました。普段シングルCPUのサーバーで検証を行っている場合は気にならない部分ですが、ある程度の規模のシステムを構築する場合には必要になる知識ですので覚えておくと良いと思います。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes