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

2021-06-22 13:57:07 字數 1671 閱讀 5315

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

原因很清楚:在最簡單的模式中,內 核通過硬體中斷的方式來處理每個來自於網絡卡的包。但是隨著資料報速率的增長,帶來的中斷漸漸超過了單個cpu可處理的範圍。單cpu概念很重要,系統管理 員對此往往認識不足。在乙個普通的4-16核的系統中,因為整體cpu的使用率在6-25%左右並且系統看上去很正常,所以乙個過載的核心很難被發現,。 但是系統將執行很慢,並且會在沒有告警,沒有dmesg日誌,沒有明顯徵兆的情況下嚴重丟包。

但是你使用top 檢視多個cpu模式(執行top,接著鍵入1)時,%si列(系統中斷)或者mpstat命令中 irq列(mpstat -p all 1),在一些繁忙的系統中你會發現中斷明顯很高,通過經進一步mpstat使用,你會看到哪個cpu或者哪個裝置存在問題。

你需要乙個較新版本的mpstat,可以執行-i 模式,用以列出irq負載,執行如下命令:

mpstat -i sum -p all 1

超過5000/秒 有點繁忙, 1萬-2萬/秒相當高了。

執行如下命令來確認那個裝置/專案導致負載:

mpstat -i cpu -p all 1

mpstat -i cpu -p 3 1 # 3 在top,htop中可以定位不同的cpu。(top和mpstat都是從0開始,htop是從1開始計數)

記錄下中斷數,你就可以檢視中斷表 ,"cat /proc/interrupts" 找到mpstat's得到的數字,你可以發現是哪個裝置在使用中斷。這個檔案也指示了使用該中斷的#可以告訴你是什麼導致過載。

需要做什麼呢?

首先,確認你是否執行irqbalance,這個是nice守護程序它會自動在cpu間擴充套件中斷。在繁忙的系統中很重要,尤其是兩塊網絡卡,因為預設cpu0 將處理所有中斷,系統很容易過載。irqbalance擴散這些中斷用以降低負載。為了效能最大化,你可以手動平衡這些中斷將套接字和超執行緒共享核心分 散,但是通常沒必要這麼麻煩。

但是即使擴充套件了中斷,某塊網絡卡還是可能導致某乙個cpu過載。這取決於你的網絡卡和驅動,但通常有兩種有效的方法來防止這樣的事情發生。

第一種是多網絡卡佇列,有些intel網絡卡就可以這麼做。如果他們有4個佇列,就可以有四個cpu核心同時處理不同的中斷用以分散負載。通常驅動會自動這麼做,你也可以通過mpstat命令來確認。

第二種,並且通常也是更加重要的,網絡卡驅動選項——'irq coalescing',中斷請求合併。這個選項有著強大的功能,允許網絡卡在呼叫中斷請求前快取數個資料報,從而為系統節約大量的時間和負載。舉個例子: 如果網絡卡快取10個包,那麼cpu負載將大約降低90%。這個功能通常用ethtool工具來控制,使用'-c/-c'引數,但是有些驅動要求在驅動初次 載入時就做好相關設定。如何設定需要檢視本機文件。舉個例子,有些網絡卡,譬如我們使用的intel網絡卡,就有automatic模式可以根據負載自動做到 最優化。

最後,就像我們在虛擬機器中看到的一些驅動,它們不支援多佇列或者中斷請求合併。這種情況下,一旦處理中斷的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...

如何將網絡卡中斷繫結到特定cpu

在cpu單核的時代,網絡卡收發包處理都會有乙個cpu負責,但隨著多核cpu的出現,還按照以前網絡卡中斷有乙個cpu處理的話,明顯浪費cpu資源,基於此出現了網絡卡中斷繫結 特定cpu的技術,目的當然是為了提高cpu利用率,將網絡卡中斷均衡的分配到各個cpu.首先,簡單說一下中斷,什麼是中斷呢?就是各...

linux核心網絡卡中斷收發包

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