Linux系統針對網絡卡中斷的優化處理

2021-09-28 22:00:09 字數 1152 閱讀 6226

當網絡卡接收到資料報後,會觸發硬中斷,通知cpu來收包。硬中斷是乙個cpu和網絡卡互動的過程。這其實會消耗cpu資源。特別是在使用速度極快的萬兆網絡卡之後,大量的網路互動使得cpu很大一部分資源消耗在網絡卡中斷處理上。此時,瓶頸並不在網絡卡,而是在cpu上。因此,現在的網絡卡都採用多佇列的技術,用於充分利用多核心cpu。

中斷的詳細解釋:《linux的中斷和異常掃盲筆記》

為了防止多個設定傳送相同的中斷, linux設計了一套中斷請求系統, 使得計算機系統中的每個裝置被分配了各自的中斷號, 以確保它的中斷請求的唯一性. 從2.4 核心開始, linux改進了分配特定中斷到指定的處理器(或處理器組)的功能. 這被稱為smp irq affinity, 它可以控制系統如何響應各種硬體事件. 允許你限制或者重新分配伺服器的工作負載, 從而讓伺服器更有效的工作.。

以網絡卡中斷為例,在沒有設定smp irq affinity時, 所有網絡卡中斷都關聯到cpu0, 這導致了cpu0負載過高,而無法有效快速的處理網路資料報,導致了瓶頸。 通過smp irq affinity, 把網絡卡多個中斷分配到多個cpu上,可以分散cpu壓力,提高資料處理速度。

rfs主要是把軟中斷的負載均衡到各個cpu,簡單來說,是網絡卡驅動對每個流生成乙個hash標識,這個hash值得計算可以通過四元組來計算(sip,sport,dip,dport),然後由中斷處理的地方根據這個hash標識分配到相應的cpu上去,這樣就可以比較充分的發揮多核的能力了。通俗點來說就是在軟體層面模擬實現硬體的多佇列網絡卡功能,如果網絡卡本身支援多佇列功能的話rps就不會有任何的作用。該功能主要針對單佇列網絡卡多cpu環境,如網絡卡支援多佇列則可使用smp irq affinity直接繫結硬中斷。

由於rps只是單純的把同一流的資料報分發給同乙個cpu核來處理了,但是有可能出現這樣的情況,即給該資料流分發的cpu核和執行處理該資料流的應用程式的cpu核不是同乙個:資料報均衡到不同的cpu,這個時候如果應用程式所在的cpu和軟中斷處理的cpu不是同乙個,此時對於cpu cache的影響會很大。

這時候就需要rfs來配合使用了,這也是tom提交的核心補丁,它是用來配合rps補丁使用的,是rps補丁的擴充套件補丁,它把接收的資料報送達應用所在的cpu上,提高cache的命中率。這兩個補丁往往都是一起設定,來達到最好的優化效果, 主要是針對單佇列網絡卡多cpu環境

Linux效能調優 網絡卡中斷與CPU的繫結問題

網絡卡與作業系統的互動一般有兩種方式 當出現cpu占用不均的時候,就需要考慮網絡卡多佇列是否尚未與cpu繫結引起的?mpstat p all 1 18 20 33 cpu user nice sys iowait irq soft steal idle intr s 18 20 33 all 0,2...

Linux網絡卡中斷使單個CPU過載

linux核心在效能方面已經經歷了很長一段時間的考驗,尤其是2.6 3.x核心。然而,在高io,尤其是網路方面的 情況下,對中斷的處理可能成為問題。我們已經在擁有乙個或多個飽和1gbps網絡卡的高效能系統上發現過這個問題,近來在有許多小包併發 大約 10000packets second 超載的虛擬...

linux核心網絡卡中斷收發包

1 網絡卡中斷收發包上半部註冊 1.1 網絡卡驅動呼叫request irq dev irq,i596 interrupt,0,i82596 dev 函式申請中斷號並傳入中斷上半部處理函式 1.2 request irq將網絡卡驅動註冊的中斷號和中斷上半部處理函式新增到ino buket中斷鍊錶 2...