Kvm-Virtualization

Linux Livirt/KVM:預設將所有虛擬機放在cpuset中,無需重新配置

  • November 8, 2022

我正在嘗試建立一個系統,讓我在一個(屏蔽)cpuset 中的一組主機上有一些程序,而其他所有內容(即所有 VM)都在另一個中。這裡的目標是擁有一個超融合系統,其中虛擬機在任意一組 CPU 核心上執行,而儲存程序在其他核心上執行,並具有隔離性。我選擇了 cpuset 來完成這項任務,因為這似乎是“最簡單”的方法。

但是,這似乎無法正常工作。首次設置 cset shield 時可以移動 VM,但稍後啟動 VM 會導致如下錯誤:

libvirt: Cgroup error : Invalid value '0-31' for 'cpuset.cpus': Invalid argument

顯然,它試圖將虛擬機放在不允許的根 cset 中。這是一個非常預設的配置,只需指定 VM 中的核心數量,無需考慮單個 CPU ID 或任何此類調整(這是此設置工作的要求;節點可能是不對稱的,具有不同的核心數量、拓撲等,而虛擬機可以在它們周圍實時遷移)。

但總的來說,我想知道:是否可以將 Libvirt/KVM 配置為預設使用特定的 cpuset,而無需以任何方式重新配置 VM(無需手動配置 CPU 固定惡作劇),並且無需任何手動調整 per-工藝依據?

在基於 systemd 的主機上,所有虛擬機都放置在下面的 cgroup 中,/machine.slice因此如果您為其設置 CPU 遮罩,/machine.slice它將適用於所有虛擬機。同樣,如果您設置CPUAffinity/etc/systemd/system.conf則可以使所有非 VM 程序避免使用用於 VM 的 CPU。

引用自:https://serverfault.com/questions/1115096