我想問,是否可以僅為特定虛擬機器保留核心並防止其他人使用它們。讓我更詳細地解釋一下:
我希望將 2 個虛擬機器固定到核心 0-7 和 16-23,並且我希望防止系統(核心 isolcpus、rcu_nocbs 和 systemdAllowedCPU)和其他虛擬機器使用這些核心。我也不關心其他虛擬機器將運行哪些核心,但它們不應該使用核心 0-7 和 16-23。另外,我不想將它們明確地固定到任何特定的核心。我只是希望他們使用 8-15 和 24-31 中的任何核心。
有辦法實現嗎?
只是補充一下。
我有 2 個虛擬機,其 GPU 直通固定到「保留」核心。我想為這兩台虛擬機器保留這些核心。我想阻止核心、systemd、其他進程以及 kvm-qemu 使用這些保留的核心(當然,除了這兩個遊戲虛擬機器之外的 qemu)。看起來 isolcpus rcu_nocbs 和 systemd AllowedCPUs 工作正常,但 libvirt (或 qemu 或兩者)只是忽略這些設定。 Qemu 在(已配置 libvirt)固定 CPU 上正確運行這兩個虛擬機,但未明確固定的任何其他機器可以在任何核心上運行,甚至它與核心隔離並且不允許使用 systemd。
答案1
在 /etc/systemd/system.conf 中設定「CPUAffinity」以選擇預設允許使用哪些 CPU 通用主機作業系統進程 - 即與您要為專用 VM 使用保留的 CPU 相反。除非配置 KVM Real-Time,否則不應使用核心「isolcpus」設置,因為它也會完全在 CPU 上進行調度,這會阻止非 VCPU QEMU 執行緒的平衡。
透過 systemd 設置,目前虛擬機器將預設在非保留核心上啟動。然後,您可以在 libvirt 中對要使用保留核心的兩個虛擬機器使用 CPU 固定配置。