婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Linux多隊列網卡的硬件的實現詳解

Linux多隊列網卡的硬件的實現詳解

熱門標簽:山東企業電銷機器人價格 公司400電話辦理價格 依蘭縣地圖標注app 百度地圖標注開鎖電話 安陽百應電銷機器人加盟 pageadm實現地圖標注 百度中國地圖標注中心 琿春市地圖標注app 潮州地圖標注

多隊列網卡是一種技術,最初是用來解決網絡IO QoS (quality of service)問題的,后來隨著網絡IO的帶寬的不斷提升,單核CPU不能完全處滿足網卡的需求,通過多隊列網卡驅動的支持,將各個隊列通過中斷綁定到不同的核上,以滿足網卡的需求。

常見的有Intel的82575、82576,Boardcom的57711等,下面以公司的服務器使用較多的Intel 82575網卡為例,分析一下多隊列網卡的硬件的實現以及linux內核軟件的支持。

1.多隊列網卡硬件實現

圖1.1是Intel 82575硬件邏輯圖,有四個硬件隊列。當收到報文時,通過hash包頭的SIP、Sport、DIP、Dport四元組,將一條流總是收到相同的隊列。同時觸發與該隊列綁定的中斷。

圖1.1 82575硬件邏輯圖

2. 2.6.21以前網卡驅動實現

kernel從2.6.21之前不支持多隊列特性,一個網卡只能申請一個中斷號,因此同一個時刻只有一個核在處理網卡收到的包。如圖2.1,協議棧通過NAPI輪詢收取各個硬件queue中的報文到圖2.2的net_device數據結構中,通過QDisc隊列將報文發送到網卡。

圖2.1 2.6.21之前內核協議棧

圖2.2 2.6.21之前net_device

3. 2.6.21后網卡驅動實現

2.6.21開始支持多隊列特性,當網卡驅動加載時,通過獲取的網卡型號,得到網卡的硬件queue的數量,并結合CPU核的數量,最終通過Sum=Min(網卡queue,CPU core)得出所要激活的網卡queue數量(Sum),并申請Sum個中斷號,分配給激活的各個queue。

如圖3.1,當某個queue收到報文時,觸發相應的中斷,收到中斷的核,將該任務加入到協議棧負責收包的該核的NET_RX_SOFTIRQ隊列中(NET_RX_SOFTIRQ在每個核上都有一個實例),在NET_RX_SOFTIRQ中,調用NAPI的收包接口,將報文收到CPU中如圖3.2的有多個netdev_queue的net_device數據結構中。

這樣,CPU的各個核可以并發的收包,就不會應為一個核不能滿足需求,導致網絡IO性能下降。

圖3.1 2.6.21之后內核協議棧

圖3.2 2.6.21之后net_device

4.中斷綁定

當CPU可以平行收包時,就會出現不同的核收取了同一個queue的報文,這就會產生報文亂序的問題,解決方法是將一個queue的中斷綁定到唯一的一個核上去,從而避免了亂序問題。同時如果網絡流量大的時候,可以將軟中斷均勻的分散到各個核上,避免CPU成為瓶頸。

圖4.1 /proc/interrupts

5.中斷親合糾正

一些多隊列網卡驅動實現的不是太好,在初始化后會出現圖4.1中同一個隊列的tx、rx中斷綁定到不同核上的問題,這樣數據在core0與core1之間流動,導致核間數據交互加大,cache命中率降低,降低了效率。

圖5.1 不合理中斷綁定

linux network子系統的負責人David Miller提供了一個腳本,首先檢索/proc/interrupts文件中的信息,按照圖4.1中eth0-rx-0($VEC)中的VEC得出中斷MASK,并將MASK

寫入中斷號53對應的smp_affinity中。由于eth-rx-0與eth-tx-0的VEC相同,實現同一個queue的tx與rx中斷綁定到一個核上,如圖4.3所示。

                                                                                     

圖4.2 set_irq_affinity

圖4.3 合理的中斷綁定

set_irq_affinity腳本位于http://mirror.oa.com/tlinux/tools/set_irq_affinity.sh。

上一頁12 下一頁 閱讀全文

標簽:香港 公主嶺 晉中 呼和浩特 常德 連云港 三明 林芝

巨人網絡通訊聲明:本文標題《Linux多隊列網卡的硬件的實現詳解》,本文關鍵詞  Linux,多,隊列,網卡,的,硬件,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux多隊列網卡的硬件的實現詳解》相關的同類信息!
  • 本頁收集關于Linux多隊列網卡的硬件的實現詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 通河县| 博兴县| 博客| 勃利县| 贵州省| 潍坊市| 清徐县| 尚志市| 若尔盖县| 阿克苏市| 梅河口市| 百色市| 承德县| 从化市| 临沭县| 古田县| 疏勒县| 新昌县| 清流县| 龙井市| 宁津县| 皮山县| 依兰县| 阳西县| 松滋市| 鄂托克前旗| 方正县| 白城市| 正阳县| 榆树市| 神池县| 富宁县| 东乡族自治县| 额尔古纳市| 定远县| 建水县| 时尚| 玉龙| 湟中县| 天峻县| 高雄市|