9.17.19.5. 仮想マシンのホットプラグ機能の無効化
ホットプラグ とは、仮想マシンの実行中にメモリーや CPU などのリソースを動的に追加する機能です。
OpenShift Virtualization のホットプラグのデフォルト乗数が原因で、仮想マシンが過剰な数のソケットを要求する可能性があります。たとえば、仮想マシンが 10 個のソケットを要求する場合、ホットプラグのデフォルト動作により、これが 4 倍になります。そのため、要求数が合計で 40 ソケットになります。これにより、Kernel-based Virtual Machine (KVM) でサポートされている推奨 CPU 数を超え、デプロイメントが失敗する可能性があります。
仮想マシンのデフォルトのホットプラグ機能を無効にすることで、仮想マシンのリソース要求を NUMA と整合した状態に保ち、リソースを大量に消費するワークロードのパフォーマンスを最適化できます。
9.17.19.5.1. インスタンスタイプごとの CPU ホットプラグの無効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、インスタンスタイプごとに CPU ホットプラグを無効にできます。特定のインスタンスタイプに対して、ホットプラグなしで仮想マシン設定を標準化し、NUMA を考慮した CPU 割り当てを確実に行うには、この方法が推奨されます。
CPU ホットプラグが無効なインスタンスタイプを使用して仮想マシンを作成すると、仮想マシンがその設定を継承し、その仮想マシンの CPU ホットプラグが無効になります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
VirtualMachineClusterInstancetypeカスタムリソース (CR) の YAML ファイルを作成します。設定するインスタンスタイプにmaxSocketsspec を追加します。VirtualMachineClusterInstancetypeCR の例:apiVersion: instancetype.kubevirt.io/v1beta1 kind: VirtualMachineClusterInstancetype metadata: name: cx1.mycustom-numa-instance spec: cpu: dedicatedCPUPlacement: true isolateEmulatorThread: true numa: guestMappingPassthrough: {} guest: 8 maxSockets: 8 memory: guest: 16Gi hugepages: pageSize: 1Giここでは、以下のようになります。
spec.cpu.dedicatedCPUPlacement-
仮想マシンインスタンスに専用リソースを割り当てるかどうかを指定します。これを
trueに設定すると、仮想マシンの仮想 CPU が物理ホストの CPU にピニングされます。これは、スケジューリングの揺らぎを最小限に抑えるために、ハイパフォーマンスワークロードでよく使用されます。 spec.cpu.isolateEmulatorThread-
QEMU エミュレータースレッドを分離して専用の物理 CPU コアで実行するかどうかを指定します。これは通常
dedicatedCPUPlacementspec と一緒に使用されるパフォーマンス最適化です。 spec.cpu.numa- 仮想マシンの NUMA トポロジー設定を指定します。
spec.cpu.numa.guestMappingPassthrough- 仮想マシンの NUMA トポロジーが、基盤となるホストマシンの NUMA トポロジーをそのまま引き継ぐべきであることを指定します。これは、NUMA を考慮し、最適なパフォーマンスを必要とするアプリケーションにとって重要です。
spec.cpu.guest- 仮想マシンに割り当てる仮想 CPU の合計数を指定します。
spec.cpu.maxSockets- 仮想マシンの CPU ソケットの許容最大数を指定します。
spec.memory- 仮想マシンのメモリー設定を指定します。
spec.memory.guest- 仮想マシンに割り当てるメモリーの合計量を指定します。
spec.memory.hugepages- huge page に関連する設定を指定します。
spec.memory.hugepages.pageSize- 仮想マシンのメモリーに使用する huge page のサイズを指定します。
次のコマンドを実行して、
VirtualMachineClusterInstancetypeCR を作成します。$ oc create -f <filename>.yaml
検証
-
更新された
VirtualMachineClusterInstancetype設定を使用する仮想マシンを作成します。 次のコマンドを実行して出力を調べ、作成した仮想マシンの設定を確認します。
$ oc get vmi <vm_name> -o yaml出力例
apiVersion: kubevirt.io/v1 kind: VirtualMachineInstance metadata: name: example-vmi labels: instancetype.kubevirt.io/cluster-instancetype: cx1.example-numa-instance spec: domain: cpu: dedicatedCPUPlacement: true isolateEmulatorThread: true sockets: 8 cores: 1 threads: 1 numa: guestMappingPassthrough: {} guest: 8 maxSockets: 8 # ...spec.template.spec.domain.cpuセクションが次のようになっている場合、更新が正常に適用されています。-
socketsの値がインスタンスタイプのmaxSocketsおよびguestの値と一致している。これにより、追加のホットプラグスロットが設定されなくなります。 -
dedicatedCPUPlacementフィールドとisolateEmulatorThreadフィールドが存在し、trueに設定されている。
-