一種面向云架構(gòu)的高性能網(wǎng)絡(luò)接口實(shí)現(xiàn)技術(shù)
HPNI主要包括以下幾項(xiàng)關(guān)鍵技術(shù):
本文引用地址:http://butianyuan.cn/article/270287.htm(1)通過(guò)Linux提供的UIO框架,實(shí)現(xiàn)了網(wǎng)卡用戶空間驅(qū)動(dòng)程序,UIO能夠把網(wǎng)卡設(shè)備內(nèi)存空間通過(guò)文件系統(tǒng)的方式傳遞給用戶空間,比如dev/uioXX,因此用戶空間程序能夠讀取到設(shè)備地址段并映射到用戶空間內(nèi)存中,比如通過(guò)mmap()。通過(guò)上述方式可以在用戶空間程序中完成驅(qū)動(dòng)程序的功能。這種方法的優(yōu)點(diǎn)是去掉了內(nèi)存拷貝,同時(shí)因?yàn)樗泄ぷ鞫荚谟脩艨臻g完成,也節(jié)省了系統(tǒng)調(diào)用的開銷。
(2)關(guān)掉網(wǎng)卡中斷,驅(qū)動(dòng)程序采用輪詢方式,消除中斷引起的開銷。
(3)用戶空間的數(shù)據(jù)包緩沖區(qū)采用huge page分配的連續(xù)物理內(nèi)存區(qū),通過(guò)LinuX提供的huge page接口能夠分配大于4k的頁(yè),從而減少頁(yè)表的大小,降低TLB Miss發(fā)生的概率。另外連續(xù)的物理內(nèi)存塊也能減少地址轉(zhuǎn)換引起的查表次數(shù),進(jìn)一步提高性能。
(4)任務(wù)線程和CPU核心之間采用靜態(tài)綁定,比如接收包線程綁定1核,處理包線程綁定2核,發(fā)送包線程綁定3核,從而消除核間切換產(chǎn)生的開銷。
另外,對(duì)于NUMA架構(gòu)的CPU,每個(gè)任務(wù)都使用本地內(nèi)存,進(jìn)一步提高內(nèi)存訪問(wèn)速度。
(5)通過(guò)CAS(Compare And Swap)原子操作,多個(gè)任務(wù)可以在不加鎖的情況下對(duì)共享隊(duì)列進(jìn)行訪問(wèn),增加和刪除節(jié)點(diǎn)。在X86架構(gòu)下CAS是通過(guò)CMPXCHG指令實(shí)現(xiàn)的,該指令的作用就是把一個(gè)指針指向內(nèi)存的值同一個(gè)給定的值進(jìn)行比較,如果相等,就對(duì)對(duì)應(yīng)內(nèi)存賦一個(gè)新的值,否則不做任何操作。通過(guò)上述方法可以實(shí)現(xiàn)一種沖突檢測(cè)機(jī)制,當(dāng)任務(wù)發(fā)現(xiàn)該隊(duì)列己經(jīng)被訪問(wèn)時(shí),主動(dòng)等待直到隊(duì)列空閑。無(wú)鎖隊(duì)列消除了加鎖引起的開銷,同時(shí)也能避免死鎖的情況。
(6)基于網(wǎng)卡RSS(Receive-side Scaling)功能可以平滑擴(kuò)展成多任務(wù)模式,RSS功能可以將收到的數(shù)據(jù)包基于五元組做哈希運(yùn)算,從而分發(fā)到不同的隊(duì)列當(dāng)中進(jìn)行并行處理,每一個(gè)隊(duì)列可以對(duì)應(yīng)一個(gè)收包任務(wù),從而成倍地提高處理性能。
3對(duì)比實(shí)驗(yàn)及結(jié)果分析
3. 1實(shí)驗(yàn)一
實(shí)驗(yàn)環(huán)境描述如下:一臺(tái)數(shù)據(jù)包發(fā)生器,最大可產(chǎn)生流量為80Mpps的64字節(jié)的數(shù)據(jù)包。一臺(tái)服務(wù)器配置Intel的Sandy Bridge 8核處理器,每個(gè)核心2.0GHZ.操作系統(tǒng)采用RedHat Enterprise Linux 6.2.網(wǎng)卡采用Intel 82599 10G以太網(wǎng)控制器。運(yùn)行的軟件包含三個(gè)線程,一個(gè)收包線程,一個(gè)轉(zhuǎn)發(fā)線程,一個(gè)發(fā)送線程。傳統(tǒng)網(wǎng)絡(luò)實(shí)現(xiàn)方式下采用了RAWSocket方式直接收發(fā)處理層二數(shù)據(jù)包,如圖4所示。
圖4 單線程模式下性能比較圖
評(píng)論