SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows Server 2022 + SQL Server で Fake NUMA の環境を構築する

leave a comment

現在、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 環境を再現することができる機能があります。

これらの技術情報に記載されている設定を行い、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 用のノードとなっていたはずですので今回の設定とは無関係にデフォルトで存在します)

image

image

 

疑似的な環境であるため、物理的に NUMA を形成できる環境とは異なる箇所はあるかと思います。

しかし、NUMA ノード単位で実行されるバックグラウンドプロセスやノードごとのメモリの使用状況の確認などの検討には使用することができますので、Fake NUMA を活用し、どのようにデータを取得するかを検討し、Azure 仮想マシンの 17 コア以上の環境で実行して実環境の確認をするという方法を使用することで、コストを抑えながら手元の資材だけで NUMA の動作確認を行うということもできるのではないでしょうか。

Share

Written by Masayuki.Ozawa

12月 28th, 2022 at 3:18 pm

Leave a Reply