無鎖結(jié)構(gòu)在國(guó)產(chǎn)防火墻上的應(yīng)用與研究_第1頁(yè)
無鎖結(jié)構(gòu)在國(guó)產(chǎn)防火墻上的應(yīng)用與研究_第2頁(yè)
無鎖結(jié)構(gòu)在國(guó)產(chǎn)防火墻上的應(yīng)用與研究_第3頁(yè)
無鎖結(jié)構(gòu)在國(guó)產(chǎn)防火墻上的應(yīng)用與研究_第4頁(yè)
無鎖結(jié)構(gòu)在國(guó)產(chǎn)防火墻上的應(yīng)用與研究_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

0引言隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,傳統(tǒng)的基于內(nèi)核的報(bào)文收發(fā)方式造成大量的性能開銷,網(wǎng)絡(luò)傳輸速率很難得到提高。為了實(shí)現(xiàn)網(wǎng)絡(luò)的高速傳輸,Intel設(shè)計(jì)了高性能的數(shù)據(jù)包處理框架DPDK(DataPlaneDevelopmentKit)。近年來,通過不斷地對(duì)dpdk技術(shù)進(jìn)行改造,在國(guó)產(chǎn)申威處理器平臺(tái)上已實(shí)現(xiàn)了網(wǎng)絡(luò)數(shù)據(jù)的高速轉(zhuǎn)發(fā)。隨著國(guó)產(chǎn)多核處理器的普遍使用,高并發(fā)數(shù)據(jù)結(jié)構(gòu)變得越來越重要。為了充分發(fā)揮多核處理器的性能,軟件人員必須編寫可擴(kuò)展的并發(fā)程序才能使其在多核環(huán)境下具有高的性能。并發(fā)程序編寫存在一個(gè)重要問題,就是多個(gè)線程/進(jìn)程對(duì)共享資源的同步訪問問題。網(wǎng)絡(luò)安全設(shè)備多核并行協(xié)議棧運(yùn)行過程中,不可避免地要在核間共享數(shù)據(jù),比如:ddos統(tǒng)計(jì)表,nat轉(zhuǎn)換表,aspf表等。保證數(shù)據(jù)一致性的通用方法是加鎖,但鎖機(jī)制的引入帶來了數(shù)據(jù)處理的串行化,大大降低了安全設(shè)備的網(wǎng)絡(luò)轉(zhuǎn)發(fā)性能,同時(shí)又增加死鎖和數(shù)據(jù)競(jìng)爭(zhēng)的風(fēng)險(xiǎn)。近年來,工程人員開始對(duì)無鎖(lockfree)數(shù)據(jù)結(jié)構(gòu)進(jìn)行研究,使用CAS(compareandswap)細(xì)粒度同步原語(yǔ)的無鎖數(shù)據(jù)結(jié)構(gòu)能夠擺脫死鎖和數(shù)據(jù)競(jìng)爭(zhēng)問題,更重要的是它對(duì)多核是可擴(kuò)展的。針對(duì)以上問題與現(xiàn)狀,結(jié)合對(duì)國(guó)產(chǎn)處理器平臺(tái)的研究與應(yīng)用,本文提出了一種無鎖結(jié)構(gòu)在國(guó)產(chǎn)防火墻上的應(yīng)用方案。在并行處理的協(xié)議棧間使用無鎖結(jié)構(gòu)進(jìn)行數(shù)據(jù)共享,減少數(shù)據(jù)競(jìng)爭(zhēng)時(shí)的等待時(shí)間,從而提高網(wǎng)絡(luò)轉(zhuǎn)發(fā)速率。實(shí)驗(yàn)表明,該方案在小包(64字節(jié))數(shù)據(jù)轉(zhuǎn)發(fā)時(shí),吞吐率性能比常規(guī)方法提升23.68%。1關(guān)鍵技術(shù)程序方法的調(diào)用到執(zhí)行完成需要時(shí)間,從某個(gè)方法調(diào)用事件的開始到執(zhí)行結(jié)束過程中,當(dāng)這個(gè)方法調(diào)用事件開始而執(zhí)行未結(jié)束,稱其調(diào)用是未決的。并發(fā)程序方法的執(zhí)行可以相互重疊,而單線程程序方法的執(zhí)行總是順序無重疊的。在一個(gè)程序中,當(dāng)方法的未決調(diào)用能夠延遲其他方法的未決調(diào)用時(shí),我們稱其是阻塞的;相反,當(dāng)方法的未決調(diào)用不會(huì)延遲其他方法的未決調(diào)用時(shí),我們稱其是非阻塞的。在一個(gè)程序中,一個(gè)方法的無限次調(diào)用能夠在有限次內(nèi)完成,我們稱其是無鎖(lockfree)的;一個(gè)方法的每次調(diào)用都能在有限次內(nèi)完成,我們稱其是無等待(waitfree)的;一個(gè)方法調(diào)用存在著關(guān)于它的操作次數(shù)的確定界限,我們稱其是有界無等待(waitfreebounded)的。無鎖結(jié)構(gòu)實(shí)現(xiàn)的方法也是無鎖的,其實(shí)現(xiàn)的基礎(chǔ)是CAS,且大多數(shù)國(guó)產(chǎn)處理器已硬件實(shí)現(xiàn)。CAS可以保證需要更新的地址在沒有被其他線程或進(jìn)程改動(dòng)過的情況下安全地寫入新數(shù)據(jù),保證讀寫操作的一致性,不出現(xiàn)臟數(shù)據(jù)。而這個(gè)地址內(nèi)存空間也是我們通常在鎖機(jī)制中需要加鎖重點(diǎn)保護(hù)的。2國(guó)產(chǎn)防火墻無鎖結(jié)構(gòu)的出現(xiàn)2.1國(guó)產(chǎn)防火墻簡(jiǎn)介基于dpdk技術(shù)的國(guó)產(chǎn)防火墻架構(gòu)如圖1所示。圖1國(guó)產(chǎn)防火墻架構(gòu)該防火墻在國(guó)產(chǎn)化多核處理器核和國(guó)產(chǎn)化多隊(duì)列網(wǎng)卡的基礎(chǔ)上,對(duì)dpdk技術(shù)進(jìn)行改造,構(gòu)建一個(gè)高速的二層轉(zhuǎn)發(fā)平臺(tái)。在dpdk驅(qū)動(dòng)上構(gòu)建一個(gè)多核并行運(yùn)行的用戶態(tài)協(xié)議棧,各協(xié)議棧與處理器核綁定且獨(dú)立運(yùn)行,并行協(xié)議棧間通過共享數(shù)據(jù)進(jìn)行傳遞信息,運(yùn)用無鎖結(jié)構(gòu)及其操作進(jìn)行數(shù)據(jù)同步,保證一致性。2.2無鎖結(jié)構(gòu)的實(shí)現(xiàn)方法(1)初始化設(shè)備上電啟動(dòng)過程中,由協(xié)議棧0所運(yùn)行的線程或進(jìn)程在dpdk大頁(yè)中使用rte_memzone_reserve方法申請(qǐng)共享內(nèi)存,并進(jìn)行初始化。(2)共享數(shù)據(jù)的獲取協(xié)議棧并行運(yùn)行時(shí),各個(gè)協(xié)議棧使用rte_memzone_lookup方法獲取共享內(nèi)存,再根據(jù)其具體使用的數(shù)據(jù)結(jié)構(gòu)方法獲取所需的數(shù)據(jù)。比如:hash表可通過hash值獲取。(3)共享數(shù)據(jù)的更新各個(gè)協(xié)議棧在獲取共享內(nèi)存后采用無鎖機(jī)制對(duì)共享數(shù)據(jù)進(jìn)行操作。無鎖化機(jī)制的核心原語(yǔ)為CAS,其在大多數(shù)國(guó)產(chǎn)處理器中已經(jīng)實(shí)現(xiàn)。比如龍芯平臺(tái)的CAS原語(yǔ)實(shí)現(xiàn)方法如下:staticinlineintcas64(volatileuint64_t*dst,uint64_texp,uint64_tsrc){

uint32_tres=0;

uint64_t

temp=0;

__asm__

__volatile__(

"1:

lld%[tmp],%[dst]

\n"

"

li%[res],0\n"

"

bne

%[tmp],%[exp],2f\n"

"

move

%[tmp],%[src]\n"

"

scd

%[tmp],%[dst]\n"

"

li

%[res],1\n"

"

beqz

%[tmp],1b\n"

"2:

\n"

:

[res]"=&r"(res),

[tmp]

"+&r"(temp),

[dst]

"+m"(*dst)

:

[src]"r"(src),

[exp]

"r"(exp),

"m"(*dst)

:

"memory"

);

return

res;}在應(yīng)用程序的線程或進(jìn)程中,對(duì)64位共享數(shù)據(jù)的更新方法如下:do{

o64=A;

n64=A*;}while(!cas64(&A,o64,n64));其中A為被更新的數(shù)據(jù),A*為更新后的數(shù)據(jù)。2.3性能分析相比于加鎖的方式,采用硬件原語(yǔ)CAS實(shí)現(xiàn)的無鎖數(shù)據(jù)結(jié)構(gòu)在進(jìn)行操作時(shí),將縮短數(shù)據(jù)競(jìng)爭(zhēng)時(shí)的等待時(shí)間,從而提高網(wǎng)絡(luò)轉(zhuǎn)發(fā)速率。在程序運(yùn)行的整個(gè)周期中,數(shù)據(jù)競(jìng)爭(zhēng)等待時(shí)間減少,則并行可執(zhí)行部分將變大。著名的阿姆達(dá)爾定律指出:數(shù)據(jù)結(jié)構(gòu)并發(fā)程序的優(yōu)化取決于并發(fā)可執(zhí)行部分占整個(gè)程序的比例和并發(fā)線程數(shù),其表達(dá)式如下:其中,S為程序加速比,n為并發(fā)線程數(shù),P為并發(fā)可執(zhí)行部分。當(dāng)并發(fā)線程數(shù)n一定時(shí),并發(fā)可執(zhí)行部分P越大,則程序加速比S越大。無鎖結(jié)構(gòu)降低了數(shù)據(jù)競(jìng)爭(zhēng)的等待時(shí)間,則增大了程序并發(fā)可執(zhí)行部分,進(jìn)而提高了程序加速比。程序加速比的提高,使并行協(xié)議棧的網(wǎng)絡(luò)處理能力增強(qiáng)。3實(shí)驗(yàn)與分析3.1實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)硬件平臺(tái)采用8核龍芯3A3000處理器,主頻1399MHz,PCIE接口為4口、8隊(duì)列SF400T千兆網(wǎng)卡,中標(biāo)麒麟操作系統(tǒng)。3.2吞吐率測(cè)試采用spirenttestcenter儀表進(jìn)行rfc2544吞吐率測(cè)試。多核并行協(xié)議棧環(huán)境下,核間數(shù)據(jù)競(jìng)爭(zhēng),將有鎖機(jī)制與無鎖機(jī)制下的吞吐率進(jìn)行對(duì)比。實(shí)驗(yàn)采用dpdk提供的共享內(nèi)存rte_memzone,dpdk讀寫鎖rte_rwlock_write_lock,cas64原語(yǔ)及無鎖方法。實(shí)驗(yàn)分別測(cè)試udp包長(zhǎng)為64字節(jié)、128字節(jié)、256字節(jié)、512字節(jié)、1024字節(jié)、1280字節(jié)、1518字節(jié)時(shí)的網(wǎng)絡(luò)吞吐率,其儀表連接關(guān)系如圖2所示。圖2實(shí)驗(yàn)儀表連接示意圖SpirentTestCenter的PORT1和PORT2通過直連網(wǎng)線與國(guó)產(chǎn)防火墻的ETH1和ETH2相連。實(shí)驗(yàn)采用統(tǒng)計(jì)UDP目的端口包數(shù)的方法使共享數(shù)據(jù)產(chǎn)生競(jìng)爭(zhēng),處理器核數(shù)為8,端口數(shù)為4且儀表使用遞增的方式發(fā)包,則理論上同一時(shí)刻有2個(gè)線程或進(jìn)程競(jìng)爭(zhēng)一個(gè)數(shù)據(jù),此時(shí)測(cè)得結(jié)果如表1所示:表1吞吐率結(jié)果表核數(shù)端口數(shù)包長(zhǎng)加鎖吞吐率無鎖吞吐率無鎖比加鎖提升百分比8464379.6M469.5M23.6884128664.4M814.6M22.61842561000M1000M0845121000M1000M08410241000M1000M08412801000M1000M08415181000M1000M0防火墻在全速轉(zhuǎn)發(fā)的情況下,無鎖結(jié)構(gòu)同步機(jī)制比加鎖結(jié)構(gòu)同步機(jī)制的性能在包長(zhǎng)64字節(jié)時(shí)提升23.68%,包長(zhǎng)128字節(jié)時(shí)提升22.61%。包長(zhǎng)為256、512、1024、1280、1518時(shí),無鎖結(jié)構(gòu)的同步機(jī)制與加鎖結(jié)構(gòu)的同步機(jī)制轉(zhuǎn)發(fā)速率均達(dá)到限速。3.3數(shù)據(jù)競(jìng)爭(zhēng)時(shí)延測(cè)試按照?qǐng)D2儀表連接方法,儀表以1Gb/s速度發(fā)送500000包的同時(shí),防火墻程序記錄下并發(fā)不可執(zhí)行部分(更新共享數(shù)據(jù))所消耗的時(shí)間。程序使用CPU的運(yùn)行周期作為時(shí)間單位進(jìn)行統(tǒng)計(jì),將加鎖和無鎖環(huán)境下更新共享數(shù)據(jù)所消耗的時(shí)間進(jìn)行對(duì)比,其測(cè)試結(jié)果如表2所示。表2時(shí)間消耗表核數(shù)端口數(shù)包長(zhǎng)包數(shù)加鎖消耗時(shí)間周期無鎖消耗時(shí)間周期846450000021154394041515221481從實(shí)驗(yàn)結(jié)果可以看出,無鎖環(huán)境更新共享數(shù)據(jù)所消耗的時(shí)間短于有鎖環(huán)境,則根據(jù)阿姆達(dá)爾定律可知,多核并行協(xié)議棧并行可執(zhí)行部分大,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論