
VMWare ESXi 4.1
Guest:Linux 核心 2.6.32 64 位元(也嘗試過舊版本)
在多 CPU 虛擬機器中,所有中斷(eth0、ata_piix)都固定在單一 CPU 上。在純硬體上運行時,一切都很平衡。
嘗試了 E1000 網路驅動程式以及半虛擬化 VMXNET3。
有什麼建議麼?在虛擬化環境中是否無法獲得正常的irqaffinity?
答案1
抱歉,這是一個毫無意義的問題,虛擬化硬體模型就是虛擬化的。中斷不是真實的,適配器不是真實的,您所做的任何「平衡」都不是真實的,vCPU 0 的任何過載都不是真實的。如果沒有使用 VT-d 傳遞兩個專用 NIC 並對其進行適當配置,則無法以穩定的方式執行此操作。
答案2
如果可以的話,您能指出一些症狀嗎?當執行大量中斷時,效能是否會顯著下降(1 個 vCPU 固定)?我不確定 VMware 的官方答案,但他們很大程度上依賴於這樣一個事實:各種「魔法」都是在客戶作業系統不知情的情況下發生的,因此這可能只是一種抽象。
答案3
透過使用 e1000,可以透過「echo 3 > /proc/irq/$irq/smp_affinity」(3 == 00000010 == core1)將這些中斷固定到單一核心。使用 vmxnet3,無論我做什麼,它都會保持在 core0。不管這裡是否虛擬化,Linux 上的 CPU 負載在軟中斷和接近 100% 的情況下確實是非常真實的。