irqbalance 在現代硬體上還有用嗎?
這個問題以前有人問過,但我相信世界已經發生了足夠的變化,可以再次提出這個問題。
irqbalance 在我們擁有支持 NUMA 的 CPU 並在其核心之間共享記憶體的當今系統上是否有用?
執行
irqbalance --oneshot --debug
顯示現代 VMware ESXi 環境中的虛擬來賓正在核心之間共享 NUMA 節點。# irqbalance --oneshot --debug 3 Package 0: numa_node is 0 cpu mask is 0000000f (load 0) Cache domain 0: numa_node is 0 cpu mask is 0000000f (load 0) CPU number 0 numa_node is 0 (load 0) CPU number 1 numa_node is 0 (load 0) CPU number 2 numa_node is 0 (load 0) CPU number 3 numa_node is 0 (load 0)
在這種情況下,irqbalance 將檢測到它正在 NUMA 系統上執行,然後退出。這與我們的流程監控相混淆。
我們應該考慮在這樣的系統上執行numad而不是 irqbalance 嗎?
這對於 VMware 虛擬化伺服器來說非常有趣。
這是 RedHat 技術人員的一個回答。儘管我確實相信大多數企業硬體都支持 NUMA。據我所知,只要 CPU 配置合適,VMware 也會嘗試將您的虛擬機安裝在同一個 NUMA 節點上。
經驗(尤其是關於 VMware)將不勝感激。
這是真的“因為”現代伺服器。請記住,多 CPU/多核與 NUMA 不同。有許多多 CPU/Core 系統沒有 NUMA。
在閱讀下面我的解釋之前,請閱讀上面的 IRQ Affinity 文件,以及以下指南:
都讀完了嗎?太好了,你不需要再聽到我的消息了!;-) 但是以防萬一您不耐煩,這就是您想要它們的原因…
IRQbalance 防止所有 IRQ 請求在單個 CPU 上備份。我已經看到許多具有 4 個以上 CPU 核心的系統執行緩慢,因為各種 CPU 上的所有程序都在等待 CPU 0 處理網路或儲存 IRQ 請求。CPU 0 看起來非常非常繁忙,所有其他 CPU 都不忙,但應用程序非常慢。這些應用程序很慢,因為它們正在等待來自 CPU 0 的 IO 請求。
IRQbalance 試圖以一種智能的方式在所有 CPU 之間平衡這一點,並在可能的情況下將 IRQ 處理置於盡可能接近程序的位置。這可能是同一個核心,同一個晶片上的一個核心共享同一個記憶體,或者是同一個 NUMA 區域中的一個核心。
你應該使用 irqbalance 除非:
您出於很好的理由(低延遲、實時要求等)手動將您的應用程序/IRQ 固定到特定核心
虛擬客人。這實際上沒有任何意義,因為除非您將客戶機固定到特定的 CPU 和 IRQ 以及專用的網路/儲存硬體,否則您可能看不到裸機所帶來的好處。但是你的 KVM/RHEV 主機應該使用 irqbalance 和numad和tune 。
其他非常重要的調整工具是調整配置文件和 numad。了解他們!使用它們!
Numad 與 irqbalance 類似,它試圖確保一個程序及其記憶體在同一個 numa 區域中。對於許多核心,我們看到延遲顯著減少,從而在負載下實現更平穩可靠的性能。
如果您技術嫻熟、勤奮並定期監控或具有非常可預測的工作負載,則可以通過手動將程序/IRQ 固定到 CPU 來獲得更好的性能。即使在這些情況下,irqbalance 和 numad 也非常接近匹配。但是如果你不確定或者你的工作量是不可預測的,你應該使用 irqbalance 和 numad。