国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

DPDK在國產(chǎn)申威處理器平臺上的應(yīng)用與研究

2018-02-07 01:44何慧文
信息安全研究 2018年1期
關(guān)鍵詞:網(wǎng)卡內(nèi)核線程

明 旭 何慧文 陳 磊

(北京中科網(wǎng)威信息技術(shù)有限公司 北京 100094)(mingx@netpower.com.cn)

1 申威處理器與DPDK

處理器不自主,整個信息產(chǎn)業(yè)就是建筑在沙灘上的城堡.發(fā)展真正自主可控的處理器,對中國這樣一個正在崛起的大國而言,不僅意味著可以擁有更加安全可靠的信息基礎(chǔ)設(shè)施,更意味著在信息經(jīng)濟時代掌控著事關(guān)國家經(jīng)濟安全的重大技術(shù)話語權(quán).

申威處理器是經(jīng)過10多年的磨礪,凝結(jié)了無數(shù)科研人員的心血,獨立自主發(fā)展起來的國產(chǎn)處理器.10多年來,申威處理器從無到有,核心微結(jié)構(gòu)持續(xù)升級,生產(chǎn)工藝不斷改進,先后研發(fā)了core1,core2,core2a,core3這4代處理器微結(jié)構(gòu),生產(chǎn)工藝也從最早的0.13 μm提高到了現(xiàn)在的28 nm.全部采用申威26010眾核處理器的“太湖之光”超級計算機,這2年來大放異彩,連續(xù)4次登頂世界超算TOP500,在“太湖之光”上運行的應(yīng)用更是史無前例地連續(xù)2年獲得戈登貝爾獎[1].申威處理器在超算領(lǐng)域取得的巨大成就說明,和10多年前相比,申威處理器的性能、穩(wěn)定性都實現(xiàn)了跨越式的提升,已經(jīng)初步具備與當今國際先進處理器相抗衡的能力[2].

在網(wǎng)絡(luò)安全領(lǐng)域,圍繞申威多核處理器的自主可控安全生態(tài)從無到有,日漸發(fā)展,現(xiàn)在已經(jīng)初具規(guī)模,已經(jīng)有十幾家公司采用申威處理器推出了防火墻、網(wǎng)閘、入侵檢測、漏洞掃描、數(shù)據(jù)庫審計等各類網(wǎng)安產(chǎn)品[3].但這些產(chǎn)品與采用X86處理器的同類產(chǎn)品相比還是存在一些差距,主要體現(xiàn)在產(chǎn)品的性能上,其中的主要原因有2點:1)申威處理器單核性能與X86處理器相比還有50%左右的差距;2)X86等處理器的生態(tài),經(jīng)過幾十年發(fā)展,通過不斷的嘗試和探索,在與網(wǎng)安產(chǎn)品密切相關(guān)的網(wǎng)絡(luò)數(shù)據(jù)包處理技術(shù)方面,發(fā)展出了一系列較為成熟、高效的模型和框架,如:新浪的fastsocket,PowerPC的DPAA,Intel的DPDK.

1.1 網(wǎng)絡(luò)數(shù)據(jù)包處理框架與DPDK

在多核多線程處理器平臺上進行網(wǎng)絡(luò)數(shù)據(jù)包的處理,使用傳統(tǒng)的Linux內(nèi)核協(xié)議棧會存在嚴重的性能瓶頸.對于如何提高網(wǎng)絡(luò)數(shù)據(jù)包處理的性能,業(yè)界有著比較統(tǒng)一的認識和建議:

1) 盡量不要讓不同的線程訪問臨界資源,因為互斥上鎖會降低系統(tǒng)的執(zhí)行效率;理想情況是讓每個線程只訪問自己的資源和數(shù)據(jù)結(jié)構(gòu).

2) 線程數(shù)能少則少,因為線程在各個CPU核心上的調(diào)度會造成一定的切換開銷,并且造成Cache命中率的降低.

3) 優(yōu)化數(shù)據(jù)包的進出路徑,盡可能減少數(shù)據(jù)的拷貝,特別是內(nèi)核態(tài)和用戶態(tài)之間的數(shù)據(jù)拷貝.

在具體實踐中,綜合上述建議,有2個主要的優(yōu)化策略可供選擇:1)依照上述建議不斷優(yōu)化Linux內(nèi)核協(xié)議棧[3],代表項目如新浪的FastSocket.FastSocket對協(xié)議棧的優(yōu)化主要體現(xiàn)在單核處理性能的提升,相比傳統(tǒng)協(xié)議棧能夠提升20%~45%的性能;另外,在多核性能優(yōu)化上也有著一定的性能提升.2)采用全新的架構(gòu)設(shè)計,使數(shù)據(jù)處理的路徑繞過內(nèi)核協(xié)議棧,代表項目如Intel的DPDK.

DPDK(Intel data plane development kit)是Intel提供的數(shù)據(jù)平面開發(fā)工具集[4],為IA(Intel architecture)處理器架構(gòu)下用戶空間高效的數(shù)據(jù)包處理提供庫函數(shù)和驅(qū)動的支持.不同于Linux系統(tǒng)以通用性設(shè)計為目的,DPDK專注于網(wǎng)絡(luò)數(shù)據(jù)包的處理,針對X86處理器和網(wǎng)卡作了一系列的深度優(yōu)化,從而提升數(shù)據(jù)包吞吐量[5].

DPDK不使用原有的內(nèi)核協(xié)議棧,所有的應(yīng)用需要使用DPDK提供的函數(shù)進行重新開發(fā).但與使用內(nèi)核協(xié)議棧相比,DPDK的優(yōu)勢除了減少中斷次數(shù)和數(shù)據(jù)拷貝次數(shù)外,還使得相關(guān)應(yīng)用獲得了協(xié)議棧的控制權(quán),能夠通過定制降低協(xié)議棧復(fù)雜度.理論上,使用DPDK方案,應(yīng)用的網(wǎng)絡(luò)數(shù)據(jù)包處理性能可以達到采用傳統(tǒng)Linux協(xié)議棧方案10倍以上.

1.2 DPDK應(yīng)用在申威處理器平臺的意義

在處理器微架構(gòu)設(shè)計上,國產(chǎn)申威處理器與國際主流商用處理器已經(jīng)基本保持了一致, 如超標量、亂序執(zhí)行、大容量Cache、雙訪存流水線等.而且由于申威處理器采用的指令集架構(gòu)自身的特點,相比采用CISC架構(gòu)的X86處理器,可以高效集成更多的處理器核心;但由于生產(chǎn)工藝相對不高,特別是處理器的訪存能力仍需進一步提升,使得申威處理器的單核性能仍存在相當?shù)牟罹?

DPDK的出現(xiàn)給國產(chǎn)申威處理器在網(wǎng)絡(luò)應(yīng)用上揚長避短帶來了重大機會.首先,DPDK使用大頁緩存技術(shù)、內(nèi)存池和無鎖環(huán)形緩存管理等技術(shù)來提高內(nèi)存訪問效率;同時,利用PMD支持,提供應(yīng)用空間下驅(qū)動程序的支持,減少了報文的內(nèi)存間拷貝.這些技術(shù)都使得申威處理器訪存能力不足的問題得到了相當程度的彌補.另外,DPDK廣泛采用處理器核親和技術(shù),把各項處理作業(yè)分配到特定的處理器核上分別處理,從而發(fā)揮各個處理器核的潛能.這又使得申威處理器核多的優(yōu)勢得到較為充分地發(fā)揮.

結(jié)合申威處理器的自身特點,將DPDK高效地移植到申威處理器平臺上,可以大幅提高申威處理器平臺的網(wǎng)絡(luò)處理能力,在網(wǎng)絡(luò)數(shù)據(jù)包處理方面進一步縮小和X86等處理器之間的差距,可以為在申威處理器平臺上實現(xiàn)多種高速網(wǎng)絡(luò)應(yīng)用提供有效的技術(shù)支撐,從而拓寬國產(chǎn)申威處理器在網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)安全設(shè)備、存儲設(shè)備、高性能服務(wù)器等產(chǎn)品領(lǐng)域的應(yīng)用,同時也可以為DPDK向其他自主國產(chǎn)處理器上的移植提供有價值的參考.

2 DPDK概覽

從字面解釋上看,DPDK是專注于數(shù)據(jù)平面軟件開發(fā)的套件;本質(zhì)上,它是一組可以從用戶空間調(diào)用的軟件庫,提供了一種開銷更小的方法來代替?zhèn)鹘y(tǒng)的Linux系統(tǒng)調(diào)用,使得應(yīng)用程序可以繞過內(nèi)核直接和底層硬件交互.

網(wǎng)絡(luò)數(shù)據(jù)包不再通過內(nèi)核,而是直接走DPDK的專有路徑,從網(wǎng)卡直接到達用戶空間,交由用戶處理,從而將繁重的數(shù)據(jù)包過濾、數(shù)據(jù)包轉(zhuǎn)發(fā)工作從內(nèi)核態(tài)轉(zhuǎn)至用戶態(tài).

另外,DPDK實現(xiàn)了多核“無鎖”并行結(jié)構(gòu),使多處理器核心可以高效并行工作,并充分發(fā)揮速度越來越快的IO接口的能力,從而最大限度上提高網(wǎng)絡(luò)數(shù)據(jù)包處理效率.

使用DPDK,將不能再用原來的Linux內(nèi)核協(xié)議棧,而且所有的應(yīng)用都需要基于DPDK提供的函數(shù)庫進行重構(gòu).但由于網(wǎng)卡等設(shè)備的驅(qū)動程序都運行在用戶層,不容易崩潰,調(diào)試方便,可以大幅降低高性能網(wǎng)絡(luò)數(shù)據(jù)處理程序開發(fā)、調(diào)試的難度[6].

2.1 DPDK架構(gòu)

從總體架構(gòu)圖(圖1)我們可以看出,DPDK將全部功能都從內(nèi)核態(tài)搬到了用戶態(tài)[7].

1) EAL(environment abstraction layer)即環(huán)境抽象層,為應(yīng)用提供了一個通用接口,隱藏了與底層庫與設(shè)備打交道的相關(guān)細節(jié).EAL實現(xiàn)了DPDK運行的初始化工作,包括基于大頁表的內(nèi)存分配、多核親和性設(shè)置、原子操作和鎖操作,將PCI設(shè)備地址映射到用戶空間,方便應(yīng)用程序訪問.

2) Buffer Manager API通過預(yù)先從EAL上分配固定大小的多個內(nèi)存對象,避免了在運行過程中動態(tài)進行內(nèi)存分配和回收來提高效率,常常用作數(shù)據(jù)包緩沖來使用.

3) Queue Manager API以高效的方式實現(xiàn)了無鎖的FIFO環(huán)形隊列,適合與一個生產(chǎn)者多個消費者、一個消費者多個生產(chǎn)者模型來避免等待,并且支持批量無鎖的操作.

4) Flow Classification API通過Intel SSE基于多元組實現(xiàn)了高效的hash算法,以便快速地將數(shù)據(jù)包進行分類處理.該API一般用于路由查找過程中的最長前綴匹配,應(yīng)用中根據(jù)Flow五元組來標記不同用戶的場景也可以使用.

5) PMD則實現(xiàn)了Intel 1GbE,10GbE和40GbE網(wǎng)卡下基于輪詢收發(fā)包的工作模式,大大加速網(wǎng)卡收發(fā)包性能.

圖1 DPDK總體架構(gòu)圖

2.2 DPDK關(guān)鍵技術(shù)

DPDK之所以可以提供高性能的數(shù)據(jù)處理能力,在于它從驅(qū)動、內(nèi)存、線程、Cache等各個方面所做的綜合性的深度優(yōu)化,這些優(yōu)化主要包括:

1) 使用大頁內(nèi)存,降低Cache miss,提高命中率,進而提升處理器訪問內(nèi)存的速度;

2) 使用PMD技術(shù),將報文直接拷貝到用戶態(tài)進行處理;

3) 通過CPU親和性綁定網(wǎng)卡和線程到固定的CPU核,減少處理器核間任務(wù)切換的開銷;

4) 使用無鎖隊列,減少資源競爭.

下面簡要介紹DPDK的這幾項關(guān)鍵技術(shù)[8]:

1) 使用大頁內(nèi)存(hugepage)提高內(nèi)存訪問效率.

TLB(translation look-side buffer) Cache是CPU中單獨的一塊高速緩存,為了實現(xiàn)虛擬地址到物理地址的轉(zhuǎn)換,Linux首先要查找TLB Cache來進行快速映射.如果在查找時TLB沒有命中,就會觸發(fā)一次缺頁中斷,處理器就需要到內(nèi)存中去訪問多級頁表,才能最終得到物理地址,從而導(dǎo)致極大的處理器開銷.

Linux默認頁大小為4 KB,在程序使用大內(nèi)存時,需要大量的頁表表項才能保證不出現(xiàn)TLB不命中的情況.而TLB Cache的大小是很有限的,一般只能容納100條頁表表項,只有使用hugepage才能確保TLB Cache的全命中.

為此,DPDK缺省提供了2 MB和1 GB這2種方式的hugepage支持.測試表明使用大頁表比使用4 KB的頁表性能提高10%~15%

2) 使用PMD(poll mode drivers),將網(wǎng)絡(luò)數(shù)據(jù)包處理工作全部遷移到用戶態(tài),并以全輪詢的模式進行處理.

NAPI明顯改善了傳統(tǒng)Linux系統(tǒng)的包處理能力,但由于收發(fā)包仍然以系統(tǒng)中斷為基礎(chǔ),首先是從中斷發(fā)生到應(yīng)用感知,還要經(jīng)過很長的軟件處理路徑;另外,數(shù)據(jù)包在內(nèi)核態(tài)和用戶態(tài)之間的拷貝也難以避免.總之,對內(nèi)核協(xié)議棧進行改良的NAPI等機制還是不能充分發(fā)揮底層硬件的能力,不能真正釋放出其網(wǎng)絡(luò)數(shù)據(jù)包處理的能力.

DPDK針對Intel網(wǎng)卡實現(xiàn)了基于全輪詢方式的PMD驅(qū)動,該驅(qū)動由API、用戶空間運行的驅(qū)動程序構(gòu)成,使用無中斷方式直接操作網(wǎng)卡的接收和發(fā)送隊列.PMD驅(qū)動從網(wǎng)卡上接收到數(shù)據(jù)包后,會直接通過DMA方式傳輸?shù)筋A(yù)分配的內(nèi)存中,同時更新無鎖環(huán)形隊列中的數(shù)據(jù)包指針,不斷輪詢的應(yīng)用程序很快就能感知收到數(shù)據(jù)包,并在預(yù)分配的內(nèi)存地址上直接處理數(shù)據(jù)包,這個過程非常簡潔.

另外,由于整個處理過程都在用戶空間完成,自然規(guī)避了報文在核心態(tài)和用戶態(tài)之間的拷貝[9].

目前PMD驅(qū)動支持Intel的大部分1 G,10 G和40 G的網(wǎng)卡.

3) 利用Linux親和性支持,避免線程在不同核間的切換.

在單個處理器核上,多線程可以提高各應(yīng)用的并發(fā)運行程度,從而提高CPU的整體利用率;但線程的創(chuàng)建和銷毀都有開銷,還會引入上下文切換、訪存沖突、Cache失效等諸多消耗性能的因素.在CPU多核時代,可以通過仔細規(guī)劃線程在CPU不同核上的分布,達到既保持應(yīng)用的高速并發(fā)運行,又減少線程切換開銷的目的[10].

DPDK就利用了Linux線程的CPU親和性,將特定任務(wù)綁定到只在某個CPU核上運行,從而避免線程在不同核間的頻繁切換,減少Cache miss和Cache write back等性能損失.

DPDK運行在用戶態(tài),但線程的調(diào)度仍然依賴內(nèi)核.作為更進一步的優(yōu)化,DPDK使用了限定某些核不參與Linux系統(tǒng)調(diào)度的技術(shù)手段,使特定的任務(wù)線程(如網(wǎng)絡(luò)收發(fā)包線程)可以獨占CPU核.這對網(wǎng)絡(luò)數(shù)據(jù)包的全輪詢處理起到了重要的支撐作用.

4) 提供無鎖環(huán)形緩沖區(qū)管理和緩存池,提高內(nèi)存訪問效率.

當前的多核處理器特別是服務(wù)器處理器通常提供4個、8個甚至更多的CPU核,在諸多高并發(fā)應(yīng)用中,多個CPU核之間訪問內(nèi)存等資源時產(chǎn)生的鎖競爭有時會比數(shù)據(jù)拷貝、上下文切換更加傷害系統(tǒng)的性能.因此,在多核環(huán)境下,如果能夠把重要的數(shù)據(jù)結(jié)構(gòu)從鎖的保護下遷移到無鎖機制中,可以極大地提升應(yīng)用軟件的性能.

DPDK基于無鎖環(huán)形緩沖的原理,實現(xiàn)了一套無鎖環(huán)形緩沖區(qū)隊列管理API,支持單生產(chǎn)者入列單生產(chǎn)者出列、多生產(chǎn)者入列多生產(chǎn)者出列的操作,很大程度上提高了內(nèi)存訪問的效率[11].

另外,DPDK提供的緩存池,可以將多個收發(fā)包集中到一個Cache line,進一步提升了Cache利用率.

3 DPDK移植申威處器平臺難點要點分析

DPDK是Intel專門為X86處理器定制的,將DPDK移植到申威處理器平臺上肯定會面臨諸多的技術(shù)挑戰(zhàn).為此,我們對申威處理器及其指令集以及DPDK本身都進行了較為深入的技術(shù)預(yù)研,從而在移植可行性、移植難度、所需資源上給后續(xù)的工程化研制提供評估基礎(chǔ).

本節(jié)首先介紹我們在先期研究中發(fā)現(xiàn)的移植上可能存在的一些技術(shù)難點,然后介紹我們應(yīng)對這些難點的策略,最后,介紹我們在預(yù)研中總結(jié)出的,基于國產(chǎn)申威處理器進行高性能網(wǎng)絡(luò)數(shù)據(jù)處理功能(包括但不限于DPDK)的研發(fā)的一些要點,希望能讓在國產(chǎn)申威處理器上研發(fā)各類網(wǎng)絡(luò)產(chǎn)品的同行有所借鑒.

第4節(jié)將介紹我們基于SW411硬件平臺,初步移植DPDK并搭建的防火墻原型機,主要用于驗證在類似DPDK的全用戶態(tài)輪詢模式下,網(wǎng)絡(luò)數(shù)據(jù)包收發(fā)系統(tǒng)的性能是否會有質(zhì)的提升,從而為使用基于非X86架構(gòu)的國產(chǎn)處理器研發(fā)高性能的網(wǎng)絡(luò)產(chǎn)品和網(wǎng)絡(luò)安全產(chǎn)品提供一定的實踐支撐.

3.1 移植難點

通過預(yù)研,我們認為將DPDK移植到申威平臺上的技術(shù)難點主要有3個:

1) DPDK無協(xié)議棧

DPDK不能再使用原有的內(nèi)核協(xié)議棧,相關(guān)功能都需要依照DPDK提供的函數(shù)庫進行重構(gòu)開發(fā).理論上,需要在用戶態(tài)實現(xiàn)Linux內(nèi)核協(xié)議棧的大部分功能,這可能會導(dǎo)致所需的時間成本和人力成本難以接受[12].

2) 申威沒有專門的CAS指令

在X86處理器上運行的DPDK大量使用CAS(compare and swap)指令,為在多核間實現(xiàn)高效的數(shù)據(jù)同步發(fā)揮了極其重要的作用.基于RISC架構(gòu)的申威自主指令集采用的是LoadStore型指令系統(tǒng),沒有專門的CAS指令.這為移植工作帶來了很大的麻煩和風險.

3) 申威SIMD支持與Intel SIMD指令集不完全兼容

SIMD(Single Instruction Multiple Data)意為單指令多數(shù)據(jù)[13],以特定寬度(如64 b)為一個數(shù)據(jù)單元,多數(shù)據(jù)指的就是多個可以獨立操作的數(shù)據(jù)單元,SIMD指的就是單個指令可以同時作用到多個數(shù)據(jù)單元.

實現(xiàn)SIMD需要處理器硬件的支持,處理器需要集成專門的SIMD寄存器.Intel處理器提供了128 b的XMM寄存器或者256 b的YMM寄存器,也稱為SIMD擴展部件.

申威處理器也提供SIMD支持,但申威指令集中的SIMD指令與Intel的SIMD指令對應(yīng)性不強,移植中有大量相關(guān)代碼需要手工修改,對移植工作是一個重大挑戰(zhàn).

3.2 難點解決策略

針對預(yù)研中發(fā)現(xiàn)的幾個難點,我們結(jié)合以往的研發(fā)經(jīng)驗,反復(fù)嘗試,基本都找到了比較滿意的解決途徑.

1) 構(gòu)建“慢速路徑+快速路徑”的處理構(gòu)架

針對DPDK無協(xié)議棧的問題,通用解決辦法一般有2種:1)自己開發(fā);2)使用開源協(xié)議棧與DPDK適配.自己開發(fā)工作量太大,而我們評估了幾個開源協(xié)議棧,其成熟度和穩(wěn)定性都和Linux協(xié)議棧相去甚遠,而且適配的工作量也不小.

為此,我們結(jié)合網(wǎng)絡(luò)數(shù)據(jù)包處理的特點,設(shè)計了一個穩(wěn)定、高效的框架,其基本原理在于:路由的確定、過濾規(guī)則的匹配在一個會話流的第1個數(shù)據(jù)包就可以決定[14].因此,可以基于DPDK構(gòu)建一個“慢速路徑+快速路徑”的處理框架,在網(wǎng)絡(luò)會話的建立、撤銷等階段,仍將數(shù)據(jù)包交由Linux內(nèi)核協(xié)議棧處理;會話成功建立后的后續(xù)數(shù)據(jù)包直接交由基于DPDK的上層應(yīng)用處理.這樣,只有極少量的數(shù)據(jù)包在“耗時”的慢速路徑上流轉(zhuǎn),大部分數(shù)據(jù)包將通過在快速路徑上建立的流表快速轉(zhuǎn)發(fā).

其原理圖如圖2所示:

圖2 DPDK+Linux協(xié)議棧的快速、慢速處理結(jié)構(gòu)

構(gòu)建“慢速路徑+快速路徑”的處理構(gòu)架的主要難點在于,要在用戶態(tài)下實現(xiàn)與內(nèi)核協(xié)議棧相匹配的、用于會話控制、會話狀態(tài)記錄的數(shù)據(jù)結(jié)構(gòu),并讓相關(guān)的會話記錄和會話狀態(tài)的改變保持實時的同步.另外,對于數(shù)據(jù)包7層以上協(xié)議數(shù)據(jù)的分析,要盡量保證在會話流起始的一個或者幾個數(shù)據(jù)包中完成判斷[15].

2) 高效模擬CAS指令

在申威指令集不提供CAS指令的情況下,用申威指令模擬實現(xiàn)一個功能完全一致的CAS函數(shù),可以最大程度上減少代碼移植的工作量.

在實際移植工作中我們反復(fù)實驗,最終確定了用11條申威匯編指令組成的最優(yōu)CAS模擬,經(jīng)過實際測試,效果令人滿意,不但功能滿足要求,性能表現(xiàn)也足夠優(yōu)異.

3) 封裝申威SIMD

SIMD技術(shù)廣泛應(yīng)用于通用處理器,為提升程序性能提供了硬件支持.實際工程經(jīng)驗顯示,如能充分發(fā)掘程序中的并行性,進行基于SIMD的優(yōu)化,可以使應(yīng)用的性能得到50%~70%的提升.DPDK中就大量使用了SIMD進行各類并行化數(shù)據(jù)處理.

申威指令集也提供了對SIMD的支持,而且出于超算的需要,技術(shù)上成熟、高效——通過使用申威的SIMD擴展指令系統(tǒng),可以完成256 b的8倍字整數(shù)數(shù)據(jù)的單指令存取,將8~64 b的待運算數(shù)據(jù)合并為一個256 b的超長數(shù)據(jù),然后使用一條指令完成傳統(tǒng)多條指令才能完成的運算.

但申威指令集與Intel的SIMD指令集對應(yīng)性不強,移植中有大量相關(guān)代碼需要手工修改,如不采取相關(guān)技術(shù)手段會導(dǎo)致移植工作繁瑣雜亂,并且給代碼以后的升級維護造成障礙.

我們?nèi)匀徊捎昧撕湍MCAS指令相類似的技術(shù)手段,通過一系列細致的分析和編程工作,對申威SIMD指令進行了較為徹底的封裝,使DPDK的代碼無需任何修改即可直接在申威處理器上運行,讓程序員從繁冗復(fù)雜的移植編碼工作中解脫出來,提高了移植工作的效率,并使得整個移植后的系統(tǒng)具備了較為良好的可擴展性.

3.3 技術(shù)要點

DPDK的本質(zhì)是網(wǎng)絡(luò)數(shù)據(jù)處理的“最優(yōu)工程實踐經(jīng)驗”的總結(jié),在移植工作中只知道照搬照抄是很難體會其思想內(nèi)涵的.在本節(jié)內(nèi)容中,我們嘗試不局限于DPDK,總結(jié)了幾點我們對基于國產(chǎn)申威處理器進行高性能網(wǎng)絡(luò)數(shù)據(jù)處理功能研發(fā)的一些“實踐經(jīng)驗”,希望能讓在國產(chǎn)申威處理器上研發(fā)各類網(wǎng)絡(luò)產(chǎn)品的同行有所借鑒.

1) 網(wǎng)卡的多隊列機制和申威CPU多核的緊密結(jié)合

當前主流的千兆、萬兆網(wǎng)卡芯片都提供了內(nèi)置的負載均衡算法,能夠?qū)⒏咚俚木W(wǎng)絡(luò)數(shù)據(jù)流分為多個數(shù)據(jù)隊列,這些數(shù)據(jù)隊列以內(nèi)存硬件通道的形式展現(xiàn)在CPU的面前,CPU可以讓自己不同的核去訪問不同的通道,核之間對隊列的數(shù)據(jù)讀寫不會相互影響[16].

申威處理器相比X86處理器,可以高效集成更多的處理器核心,配以網(wǎng)卡的多隊列機制,理論上可以獲得更高的并發(fā)處理能力.

但是,如果對PCI-E總線的訪問不能做到高效,會導(dǎo)致并行數(shù)據(jù)流處理帶來的性能優(yōu)勢部分損失.

這就需要深入理解和分析申威處理器的PCI-E總線接口芯片的工作原理,理解申威處理器PCI-E事務(wù)的基本數(shù)據(jù)包交換單元TLP(transaction layer packet)和網(wǎng)卡數(shù)據(jù)包之間的關(guān)系.在此基礎(chǔ)上,可以通過調(diào)整網(wǎng)卡驅(qū)動對數(shù)據(jù)包的封裝,使之與TLP更匹配,從而做到網(wǎng)卡芯片與申威多核之間的緊密結(jié)合[17].

另外,減少MMIO的訪問頻度也是提升PCI-E并行傳輸能力的關(guān)鍵點.

2) 內(nèi)存的高效訪問

多個CPU核訪問同一段內(nèi)存池甚至同一個環(huán)形緩存區(qū)時,因為每次讀寫時都要進行Compare-and-Set操作來保證期間數(shù)據(jù)未被其他核心修改,所以存取效率較低.需要研究的是在應(yīng)用軟件中,通過包括DPDK支持在內(nèi)的手段,盡量讓每個核只訪問自己的數(shù)據(jù),從而使其所要處理的數(shù)據(jù)盡可能緩存在自己的Cache中.另外,盡量對環(huán)形緩存區(qū)進行塊讀寫操作,以減少訪問環(huán)形緩存區(qū)的次數(shù)[15].

3) 收發(fā)包批處理

收發(fā)包是一個相對復(fù)雜的軟件運算過程,其中主要包含緩存的分配與釋放、描述符的解析與構(gòu)造,涉及多個數(shù)據(jù)結(jié)構(gòu)的讀、寫訪問[18].

只要涉及比較多的數(shù)據(jù)訪問,就應(yīng)盡量讓數(shù)據(jù)訪問都能在處理器緩存中完成( Cache hit),這是實現(xiàn)高性能網(wǎng)絡(luò)數(shù)據(jù)包處理的重要手段.反之,Cache miss會導(dǎo)致內(nèi)存訪問,引人大量延遲,是性能殺手.

對收發(fā)包實現(xiàn)批處理是一項細致但物有所值的工作,其基本原理是把收發(fā)包復(fù)雜的處理過程進行分解,打散成不同的相對較小的處理階段,把相鄰的數(shù)據(jù)訪問、相似的數(shù)據(jù)運算集中處理.這樣就能盡可能減少對內(nèi)存或者低一級的處理器緩存的訪問次數(shù),用更少的訪問次數(shù)來完成更多次收發(fā)包運算所需要數(shù)據(jù)的讀或者寫.在這方面,我們還需要有更多的實踐經(jīng)驗積累[19].

4) 針對小包的Cache預(yù)取機制優(yōu)化

申威處理器的Cache line為128 B,Intel平臺的Cache line為64 B;對于64 B小包來說,一次Cache預(yù)取在Intel平臺下剛好完全使用,而申威會浪費一半的Cache資源.為了高效使用申威處理器的Cache,需要重新設(shè)定頻繁訪問的數(shù)據(jù)結(jié)構(gòu)的Cache align(Cache對齊)為128 B,并修正數(shù)據(jù)包內(nèi)存池,以便讓2個64 B小包連續(xù)存儲.這樣在進行數(shù)據(jù)包預(yù)取時,一個預(yù)取指令可以緩存2個小包,同時避免了寶貴的Cache資源的浪費,大大提升了申威處理器對小包的處理能力[20].

4 原型機簡介

我們研制的原型機主要用來驗證影響網(wǎng)絡(luò)數(shù)據(jù)包處理的核心問題——性能,在基于申威處理器的DPDK框架下是否可以得到大幅提升.原型機在整體結(jié)構(gòu)和應(yīng)用邏輯上的設(shè)計應(yīng)該盡量簡潔,以方便發(fā)現(xiàn)整個系統(tǒng)在DPDK框架下的處理邏輯的性能瓶頸,從而針對相關(guān)瓶頸進行性能優(yōu)化.

原型機的成果可用于快速評估SW-DPDK在申威平臺上的應(yīng)用效果,相關(guān)測試參數(shù)和軟件構(gòu)架可以指引后續(xù)更復(fù)雜的防火墻、路由器、VPN等其他商用安全產(chǎn)品研發(fā)的可行性分析與架構(gòu)設(shè)計.

4.1 設(shè)計方案

以DPDK平臺為基礎(chǔ)開發(fā)平臺,搭建調(diào)度模塊、配置模塊、規(guī)則匹配模塊(含靜態(tài)路由匹配)、流匹配模塊、收包模塊、發(fā)包模塊和日志模塊.

圖3給出了這些模塊的邏輯關(guān)系:

圖3 模塊的邏輯關(guān)系圖

1) 調(diào)度模塊負責加載運行其他模塊;

2) 由人工(或者從存儲數(shù)據(jù)中)輸入ACL規(guī)則、靜態(tài)路由規(guī)則,這些規(guī)則通過規(guī)則邏輯進入規(guī)則匹配模塊;

3) 人工操作(添加、刪除、修改)的ACL規(guī)則、靜態(tài)路由規(guī)則會被日志模塊記錄;

4) 流匹配模塊是根據(jù)收到的數(shù)據(jù)包和ACL規(guī)則、靜態(tài)路由規(guī)則動態(tài)構(gòu)建的;

5) 流匹配情況、規(guī)則匹配情況會被日志模塊記錄;

6) 收到數(shù)據(jù)包后先進行流匹配再進行規(guī)則匹配,允許通過的數(shù)據(jù)包會通過發(fā)模塊發(fā)出.

4.2 實施過程

原型機的研發(fā)工作分為移植、優(yōu)化和應(yīng)用3個階段:

1) 移植階段:

① 在SW411環(huán)境下重新編譯DPDK代碼;

② 初步優(yōu)化匯編指令代碼,包括O3,RTC,CAS鎖等;

③ 實現(xiàn)轉(zhuǎn)發(fā)Demo:只做轉(zhuǎn)發(fā),不做查表處理等工作,并初步測試、評估DPDK的能力.

2) 優(yōu)化階段

① 在轉(zhuǎn)發(fā)Demo基礎(chǔ)上進行系列的匹配和優(yōu)化工作,主要包括:內(nèi)存訪問到chip的并行、盡量保證Cache的對齊和一致、申威處理器的SIMD功能應(yīng)用、按照core分配內(nèi)存、隊列HASH鎖等;

② 深度優(yōu)化:交叉內(nèi)存、Cache、SIMD;

③ 結(jié)構(gòu)設(shè)計:網(wǎng)卡多隊列、多核并行.

3) 應(yīng)用階段

① 面向邏輯處理完善系統(tǒng)功能,包括多核并行的表優(yōu)化,使用SIMD進行查表等;

② 提供基于申威DPDK的防火墻原型機,進行性能對比測試.

4.3 性能對比

測試對象:SW411平臺通用型設(shè)備、基于DPDK技術(shù)加速的防火墻原型機.

測試條件:1對千兆口,100條流平均分配到多個處理器核,60 s時長,采用橋模式,默認全通配置,初始值100%.

測試標準:RFC2544吞吐、時延.

測試結(jié)果如表1所示.

測試結(jié)論:在基于SW411處理器的硬件平臺上應(yīng)用DPDK框架后,64 B小包吞吐率提升12倍以上,1 518 B大包時延降低95%左右.因為已達到線速,小包吞吐率應(yīng)該仍有進一步提升的空間,這將有賴于支持萬兆的原型機進行驗證.

表1 通用型設(shè)備和基于DPDK技術(shù)加速的防火墻原型機性能對比表

5 結(jié)束語

經(jīng)過10多年的持續(xù)發(fā)展,國產(chǎn)申威處理器在性能、穩(wěn)定性方面都取得了長足的進步,已經(jīng)基本具備了與當今國際先進處理器相抗衡的能力.在網(wǎng)絡(luò)安全領(lǐng)域,已經(jīng)有很多公司采用申威處理器推出了各類產(chǎn)品,但由于申威處理器單核性能的不足,以及缺少先進網(wǎng)絡(luò)數(shù)據(jù)包處理模型和框架的支撐,這些產(chǎn)品與采用X86處理器的同類產(chǎn)品相比,在產(chǎn)品性能等方面還存在一些差距.

DPDK等用戶態(tài)網(wǎng)絡(luò)數(shù)據(jù)包處理器框架的出現(xiàn)給國產(chǎn)申威處理器在網(wǎng)絡(luò)安全等產(chǎn)品的應(yīng)用上帶來了揚長避短的機會,將DPDK之類的框架移植到申威平臺上可以發(fā)揮申威處理器的多核優(yōu)勢.

本文分析了將DPDK移植到申威處理器平臺上存在的難點,并提出了應(yīng)對這些難點的解決策略和關(guān)鍵技術(shù).進一步,我們總結(jié)了幾點在國產(chǎn)申威處理器平臺上進行高性能網(wǎng)絡(luò)產(chǎn)品研發(fā)的實踐經(jīng)驗.最后,介紹了我們基于申威411芯片,在移植DPDK的基礎(chǔ)上研發(fā)的防火墻原型機,驗證了在DPDK的全用戶態(tài)輪詢模式下,網(wǎng)絡(luò)數(shù)據(jù)包收發(fā)系統(tǒng)的性能取得的巨大提升,64 B小包的吞吐率從原始的7.2%提升到了100%線速.

最后,在此次移植工作的基礎(chǔ)上,我們對未來基于申威處理器平臺和用戶態(tài)數(shù)據(jù)包處理框架的網(wǎng)絡(luò)安全產(chǎn)品的研發(fā)作如下預(yù)測和展望:

1) 申威處理器的持續(xù)發(fā)展將使DPDK等框架發(fā)揮更大潛力

申威1621處理器是基于增強版的第三代“申威64”核心的國產(chǎn)高性能多核處理器,單芯片集成了16個64 b RISC結(jié)構(gòu)的申威處理器核心.在指令集和微結(jié)構(gòu)方面,申威1621處理器也提供更多的功能支持,如預(yù)取指令支持、NUMA支持和虛擬化支持等.

我們初步評估,在申威1621的指令優(yōu)化和16核支撐下,DPDK等框架的潛能可以得到進一步的發(fā)揮,將可以實現(xiàn)線速的萬兆防火墻產(chǎn)品.

2) DPDK等框架會促進申威處理器指令集與微架構(gòu)的進一步提升

由于各種原因,申威處理器一直比較注重與超算相關(guān)的浮點運算等能力的提升,對網(wǎng)絡(luò)數(shù)據(jù)包處理能力的重視程度不高.有助于充分發(fā)揮申威多核優(yōu)勢的DPDK等框架的出現(xiàn),會提升申威多核服務(wù)器處理器對高性能網(wǎng)絡(luò)數(shù)據(jù)包處理領(lǐng)域的關(guān)注度.可以預(yù)見,申威處理器在指令集和微架構(gòu)優(yōu)化等關(guān)鍵技術(shù)上將會加大這方面的支持.我們非常期待CAS無鎖指令、類DDIO支持等功能在下一代申威服務(wù)器處理器中的出現(xiàn).

3) 基于申威處理器和先進網(wǎng)絡(luò)數(shù)據(jù)包處理器框架的自主可控網(wǎng)絡(luò)安全生態(tài)建設(shè)將大有可為DPDK等先進數(shù)據(jù)包處理框架與申威處理器的結(jié)合,使得多種以網(wǎng)絡(luò)數(shù)據(jù)包處理為基礎(chǔ)支撐的自主可控網(wǎng)絡(luò)安全產(chǎn)品,如自主可控防火墻、自主可控VPN、自主可控IDSIPS、自主可控加密機等,可以在申威處理器平臺上達到較高的性能水平,滿足對使用非自主可控處理器的安全產(chǎn)品實施自主可控替代的要求,從而推動自主可控安全產(chǎn)品在軍隊、軍工、政府重要部門的應(yīng)用,進一步推進我國自主可控安全生態(tài)的建設(shè).

[1]賈迅, 胡向東, 尹飛. 申威處理器硬件數(shù)據(jù)預(yù)取技術(shù)的實現(xiàn)[J]. 計算機工程與科學, 2015, 37(11)

[2]陳左寧,王廣益, 胡蘇太, 等. 大數(shù)據(jù)安全與自主可控[J]. 科學通報, 2015, 60(5/6): 427-432

[3]沈昌祥. 可信計算專題綜述[J]. 計算機安全, 2006 (6): 2-4

[4]DPDK: Data plane development kit[OL]. [2017-12-15]. http://dpdk.org/

[5]Casoni M, Grazia C A, Patriciello N. On the performance of Linux Container with Netmap/VALE for networks virtualization[C] //Proc of the 19th IEEE Int Conf on Networks (ICON). Piscataway, NJ: IEEE, 2013: 1-6

[6]Stevens W R. TCP/IP詳解(卷1)——協(xié)議[M]. 北京: 機械工業(yè)出版社, 2011

[7]Rizzo L. Netmap: A novel framework for fast packet I/O[C] //Proc of the 2012 USENIX Conf on Annual Technical Conf. Berkeley, CA: USENIX Association, 2012: 9-9

[8]Wright G R, Stevens W R, et al. TCP/IP詳解(卷2)——實現(xiàn)[M]. 北京: 人民郵電出版社, 2010

[9]劉軍衛(wèi). 用戶態(tài)驅(qū)動框架的研究與實現(xiàn)[D]. 合肥: 中國科學技術(shù)大學, 2011

[10]卡耐基梅隴大學并行實驗室[OL]. [2017-12-15]. http://www.pdl.cmu.edu/

[11]DPDK技術(shù)白皮書[M]. 廣州: 中國電信股份有限公司廣州研究院. 2015年10月

[12]Morari A, Gioiosa R, Wisniewski R W, et al. Evaluating the impact of TLB misses on future HPC systems[C] //Proc of the 26th IEEE Int Parallel and Distributed Processing Symp. Los Alamitos, CA: IEEE Computer Society, 2012: 1010-1021

[13]Koka P, Mccracken M O, Schwetman H D, et al. Combining a remote TLB lookup and a subsequent Cache miss into a single coherence operation: US, US9003163[P]. 2015-04-07

[14]蔣苑青. 多處理器系統(tǒng)的線程調(diào)度策略研究[D]. 成都: 電子科技大學, 2012

[15]肖月振, 華蓓, 基于多核處理器的無鎖零拷貝數(shù)據(jù)包轉(zhuǎn)發(fā)框架[J]. 計算機工程, 2013, 39(12): 35-39

[16]周偉明. 多核計算與程序設(shè)計[M]. 武漢: 華中科技大學出版社, 2009

[17]童浩, 陳興蜀, 嚴宏. 改進及優(yōu)化Linux網(wǎng)絡(luò)協(xié)議棧[J]. 電子科技大學學報, 2007, 36(S3): 1493-1496

[18]劉寶辰. 高性能數(shù)據(jù)包捕獲系統(tǒng)的研究與實現(xiàn)[D]. 上海: 上海交通大學, 2013

[19]Rizzo L, Lettieri G, Maffione V. Speeding up packet I/O in virtual machines[C] //Proc of Architectures for Networking and Communications Systems. Piscataway, NJ: IEEE, 2013: 47-58

[20]Rizzo L, Carbone M, Catalli G. Transparent acceleration of software packet forwarding using netmap[C] //Proc of IEEE INFOCOM 2012. Piscataway, NJ: IEEE, 2012: 2471-2479

猜你喜歡
網(wǎng)卡內(nèi)核線程
多內(nèi)核操作系統(tǒng)綜述①
強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
基于C#線程實驗探究
活化非遺文化 承啟設(shè)計內(nèi)核
部署Linux虛擬機出現(xiàn)的網(wǎng)絡(luò)故障
基于國產(chǎn)化環(huán)境的線程池模型研究與實現(xiàn)
線程池調(diào)度對服務(wù)器性能影響的研究*
微軟發(fā)布新Edge瀏覽器預(yù)覽版下載換裝Chrome內(nèi)核
Server 2016網(wǎng)卡組合模式
挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡