真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

小編給大家分享一下Linux中多隊(duì)列網(wǎng)卡硬件的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

十年的沁源網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整沁源建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“沁源網(wǎng)站設(shè)計(jì)”,“沁源網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

多隊(duì)列網(wǎng)卡是一種技術(shù),最初是用來(lái)解決網(wǎng)絡(luò)IO QoS (quality of service)問(wèn)題的,后來(lái)隨著網(wǎng)絡(luò)IO的帶寬的不斷提升,單核CPU不能完全處滿足網(wǎng)卡的需求,通過(guò)多隊(duì)列網(wǎng)卡驅(qū)動(dòng)的支持,將各個(gè)隊(duì)列通過(guò)中斷綁定到不同的核上,以滿足網(wǎng)卡的需求。

常見(jiàn)的有Intel的82575、82576,Boardcom的57711等,下面以公司的服務(wù)器使用較多的Intel 82575網(wǎng)卡為例,分析一下多隊(duì)列網(wǎng)卡的硬件的實(shí)現(xiàn)以及l(fā)inux內(nèi)核軟件的支持。

1.多隊(duì)列網(wǎng)卡硬件實(shí)現(xiàn)

圖1.1是Intel 82575硬件邏輯圖,有四個(gè)硬件隊(duì)列。當(dāng)收到報(bào)文時(shí),通過(guò)hash包頭的SIP、Sport、DIP、Dport四元組,將一條流總是收到相同的隊(duì)列。同時(shí)觸發(fā)與該隊(duì)列綁定的中斷。

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖1.1 82575硬件邏輯圖

2. 2.6.21以前網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)

kernel從2.6.21之前不支持多隊(duì)列特性,一個(gè)網(wǎng)卡只能申請(qǐng)一個(gè)中斷號(hào),因此同一個(gè)時(shí)刻只有一個(gè)核在處理網(wǎng)卡收到的包。如圖2.1,協(xié)議棧通過(guò)NAPI輪詢收取各個(gè)硬件queue中的報(bào)文到圖2.2的net_device數(shù)據(jù)結(jié)構(gòu)中,通過(guò)QDisc隊(duì)列將報(bào)文發(fā)送到網(wǎng)卡。

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖2.1 2.6.21之前內(nèi)核協(xié)議棧

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖2.2 2.6.21之前net_device

3. 2.6.21后網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)

2.6.21開(kāi)始支持多隊(duì)列特性,當(dāng)網(wǎng)卡驅(qū)動(dòng)加載時(shí),通過(guò)獲取的網(wǎng)卡型號(hào),得到網(wǎng)卡的硬件queue的數(shù)量,并結(jié)合CPU核的數(shù)量,最終通過(guò)Sum=Min(網(wǎng)卡queue,CPU core)得出所要激活的網(wǎng)卡queue數(shù)量(Sum),并申請(qǐng)Sum個(gè)中斷號(hào),分配給激活的各個(gè)queue。

如圖3.1,當(dāng)某個(gè)queue收到報(bào)文時(shí),觸發(fā)相應(yīng)的中斷,收到中斷的核,將該任務(wù)加入到協(xié)議棧負(fù)責(zé)收包的該核的NET_RX_SOFTIRQ隊(duì)列中(NET_RX_SOFTIRQ在每個(gè)核上都有一個(gè)實(shí)例),在NET_RX_SOFTIRQ中,調(diào)用NAPI的收包接口,將報(bào)文收到CPU中如圖3.2的有多個(gè)netdev_queue的net_device數(shù)據(jù)結(jié)構(gòu)中。

這樣,CPU的各個(gè)核可以并發(fā)的收包,就不會(huì)應(yīng)為一個(gè)核不能滿足需求,導(dǎo)致網(wǎng)絡(luò)IO性能下降。

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖3.1 2.6.21之后內(nèi)核協(xié)議棧

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖3.2 2.6.21之后net_device

4.中斷綁定

當(dāng)CPU可以平行收包時(shí),就會(huì)出現(xiàn)不同的核收取了同一個(gè)queue的報(bào)文,這就會(huì)產(chǎn)生報(bào)文亂序的問(wèn)題,解決方法是將一個(gè)queue的中斷綁定到唯一的一個(gè)核上去,從而避免了亂序問(wèn)題。同時(shí)如果網(wǎng)絡(luò)流量大的時(shí)候,可以將軟中斷均勻的分散到各個(gè)核上,避免CPU成為瓶頸。

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖4.1 /proc/interrupts

5.中斷親合糾正

一些多隊(duì)列網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)的不是太好,在初始化后會(huì)出現(xiàn)圖4.1中同一個(gè)隊(duì)列的tx、rx中斷綁定到不同核上的問(wèn)題,這樣數(shù)據(jù)在core0與core1之間流動(dòng),導(dǎo)致核間數(shù)據(jù)交互加大,cache命中率降低,降低了效率。

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖5.1 不合理中斷綁定

linux network子系統(tǒng)的負(fù)責(zé)人David Miller提供了一個(gè)腳本,首先檢索/proc/interrupts文件中的信息,按照?qǐng)D4.1中eth0-rx-0($VEC)中的VEC得出中斷MASK,并將MASK

寫(xiě)入中斷號(hào)53對(duì)應(yīng)的smp_affinity中。由于eth-rx-0與eth-tx-0的VEC相同,實(shí)現(xiàn)同一個(gè)queue的tx與rx中斷綁定到一個(gè)核上,如圖4.3所示。

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖4.2 set_irq_affinity

Linux中多隊(duì)列網(wǎng)卡硬件的示例分析

圖4.3 合理的中斷綁定

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

以上是“Linux中多隊(duì)列網(wǎng)卡硬件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁(yè)標(biāo)題:Linux中多隊(duì)列網(wǎng)卡硬件的示例分析
分享鏈接:http://weahome.cn/article/gjdsdg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部