KVM-QEMU + Libvirt - CPU ピンニング

KVM-QEMU + Libvirt - CPU ピンニング

特定の VM 専用にコアを予約し、他の VM が使用できないようにすることは可能でしょうか。詳しく説明しましょう。

2 台の仮想マシンをコア 0 ~ 7 と 16 ~ 23 に固定し、これらのコアがシステム (カーネル isolcpus、rcu_nocbs、systemd AllowedCPUs) や他の VM によって使用されないようにしたいと考えています。また、他の VM がどのコアで実行されるかは気にしませんが、コア 0 ~ 7 と 16 ~ 23 は使用しないようにします。また、特定のコアに明示的に固定したくはありません。8 ~ 15 と 24 ~ 31 の任意のコアを使用するようにしたいだけです。

それを実現する方法はありますか?


追加します。

GPU パススルーが「予約済み」コアに固定された 2 つの VM があります。これらのコアをこの 2 つの VM 専用に予約します。カーネル、systemd、その他のプロセス、および kvm-qemu がこれらの予約済みコアを使用しないようにします (qemu の場合は、もちろん 2 つのゲーム VM は除きます)。isolcpus rcu_nocbs および systemd AllowedCPUs は正しく動作しているようですが、libvirt (または qemu、またはその両方) はこれらの設定を無視します。Qemu は、(libvirt が構成した) 固定 CPU でこれらの 2 つの仮想マシンを正しく実行しますが、明示的に固定されていない他のマシンは、カーネルに分離されていて systemd に許可されていない場合でも、任意のコアで実行できます。

答え1

/etc/systemd/system.conf で「CPUAffinity」を設定して、一般的なホスト OS プロセスがデフォルトで使用できる CPU を選択します。つまり、専用の VM 使用のために予約する CPU の逆です。カーネルの「isolcpus」設定は、KVM Real-Time を構成する場合を除いて使用しないでください。これは、CPU のスケジュール設定も完全にオフになり、非 VCPU QEMU スレッドのバランスが取れなくなるためです。

systemd 設定が存在する場合、VM はデフォルトで予約されていないコアで起動します。その後、予約されたコアを使用する 2 つの VM に対して、libvirt の CPU 固定構成を使用できます。

関連情報