Kvm-Virtualization

kvm/centos7的cpu pinning策略

  • February 19, 2019

我正在從 Xen 遷移到 Kvm。

在 Xen 中,我能夠輕鬆地將主機 cpus 固定到來賓 vms,並將主機 cpus 固定到 “dom0”

在 Kvm 中,我還可以輕鬆地將主機 cpu 固定到來賓 vm,但是,據我所知,沒有什麼可以阻止在主機作業系統上執行的應用程序使用這些 cpu。我想防止在主機上執行的程序餓死/增加客人延遲的情況。

我可以手動執行詳細的 cgroup 策略,但也許我只是缺少 libvirt / centos7 中的設置?

此外,還有一個供客人使用的“emulatorpin”設置。我應該將“模擬器”固定到專用主機 CPU,還是應該將其限制在來賓 CPU 上目標是盡可能地限制 guest 的延遲

如果我正確理解您的問題,您想要實現的是限制管理程序,使其只能使用單個 CPU/核心(或有限數量)來處理自己的程序、中斷處理和所有內容。libvirt 可以將所有其他核心分配給來賓系統。

相對簡單的是isolcpus引導參數,它允許您將一個或多個 CPU 與調度程序隔離開來。這可以防止調度程序在此 CPU 上調度任何使用者空間執行緒。

即在您的虛擬機管理程序上/etc/default/grub

GRUB_CMDLINE_LINUX="... quiet isolcpus=0,1"

這應該可以防止虛擬機管理程序上的任何使用者空間程序使用大於 1 的核心。然後 Libvirt 可以將虛擬伺服器固定到剩餘的空閒核心。

我不確定isolcpus引導參數是否也確保所有中斷都將限制在這些核心上。否則,中斷也有自己的關聯屬性 ,smp_affinity它定義了將處理中斷請求的處理器。特定中斷請求的中斷關聯值儲存在相關/proc/irq/irq_number/smp_affinity文件中,預設設置為/proc/irq/default_smp_affinity. smp_affinity 儲存為代表系統中所有處理器的十六進制位遮罩。預設值為 f,表示可以在系統中的任何處理器上處理中斷請求。將此值設置為 1 意味著只有處理器 0 可以處理中斷。


用於控制 RHEL 和 CentOS 7 的處理器和調度親和性的工具稱為tuna

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