現在、SQL Server の物理の検証環境としては NUC9VXQNX を使用しています。
SQL Server は NUMA アーキテクチャ を意識したソフトウェアとなっており、NUMA ノード単位にスレッドが作成される / NUMA ノード単位の情報取得が行われるものがあり、一部の検証では複数の NUMA ノードがある環境が欲しくなることがあります。
Hyper-V の仮想マシンであれば、17コア以上の環境であれば仮想マシン上では複数ソケットになるのですが、現在 NUC でこれを満たせるのは、NUC13 エクストリームキットぐらいになると思うのですが、残念ながら手元にはありません…。
Azure の仮想マシンで実行することで利用することはできるのですが、試行錯誤して検証を実施しているとコストもそれなりにかかってくるかと思います。
ということで、冒頭に記載した Gen9 の NUC (Xeon モデル) を使用して、Fake NUMA の環境を設定して利用してみた際のメモを。
SQL Server の非 NUMA 構成の物理環境で Fake NUMA の環境を作るには 2 つの方法があります。
- ソフト NUMA の有効化
- OS のブートパラメーターを変更
ソフト NUMA の有効化
SQL Server ではソフト NUMA の設定を行うことができます。
SQL Server 2014 SP2 / SQL Server 2016 以降では、自動的にソフト NUMA が構成されるようになっており、ソケット当たり 8 個の物理コアを超える環境の場合は、自動的にソフト NUMA が構成され、実際の物理環境とは異なる NUMA ノード数で構成が行われるようになっています。
上記のバージョンより低い場合でも、手動でソフト NUMA の設定を行うことができます。
今回の環境は 8 コア / 16 スレッドの環境となり、自動ソフト NUMA は設定されませんが、手動でソフト NUMA を設定することはできます。
手動で設定する場合、レジストリを変更する必要があるのですがこれも方法の一つとしてとることができるかと。
ただし、ソフト NUMA の場合、「メモリノード」は分割されておらず、スケジュラーのみが NUMA ノードとして分割されるため、メモリについても複数ノードに分割された状態にしたいという場合は、活用することはできません。(例: SQLServer:Memory Node を NUMA ノードを意識した情報確認をしたい場合)
OS のブートパラメーターを変更
上述の疑似的な NUMA の構成はソフト NUMA と呼ばれ、Fake NUMA という場合にはこちらを指すことが多いと思います。今回使用している NUC でもこちらを設定しています。
Windows Server では OS の機能として疑似的にプロセッサグループを設定することで NUMA 環境を再現することができる機能があります。
- ドライバーの複数プロセッサ グループのサポートをテストするためのブート パラメーター
- NUMA アーキテクチャ
- 現在の OS ではこちらの設定も行わないと、想定した環境になりません。
これらの技術情報に記載されている設定を行い、OS を再起動することで、SQL Server が NUMA 環境として認識をすることができる Fake NUMA の環境を構築することができます。
bcdedit.exe /set groupsize 8 reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NUMA" /v SplitLargeNodes /t REG_DWORD /d 1 削除する場合 bcdedit.exe /deletevalue groupsize reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NUMA" /v SplitLargeNodes
上記の設定であれば、NUMA ノード辺り 8 コアの 2 ノード構成となり、ソフト NUMA とは異なりメモリノードも複数構成された環境となります。(memory_node_id = 64 は DAC 用のノードとなっていたはずですので今回の設定とは無関係にデフォルトで存在します)
疑似的な環境であるため、物理的に NUMA を形成できる環境とは異なる箇所はあるかと思います。
しかし、NUMA ノード単位で実行されるバックグラウンドプロセスやノードごとのメモリの使用状況の確認などの検討には使用することができますので、Fake NUMA を活用し、どのようにデータを取得するかを検討し、Azure 仮想マシンの 17 コア以上の環境で実行して実環境の確認をするという方法を使用することで、コストを抑えながら手元の資材だけで NUMA の動作確認を行うということもできるのではないでしょうか。