趙爽 李念軍
摘要:網(wǎng)絡(luò)路由加速平臺(tái)是一個(gè)基于多核處理器的軟件平臺(tái),實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的快速接收、快速處理、快速輸出轉(zhuǎn)發(fā)。該軟件平臺(tái)運(yùn)行在多核處理器上,采用混合模式,一個(gè)core運(yùn)行Linux操作系統(tǒng)作為控制平面,其余的core運(yùn)行SE做為數(shù)據(jù)處理平面。該軟件平臺(tái)充分利用了Linux和SE本身所具有的特點(diǎn),既發(fā)揮了Linux系統(tǒng)化管理和調(diào)度的優(yōu)勢(shì),又簡(jiǎn)化了代碼的開發(fā)結(jié)構(gòu),提高了數(shù)據(jù)轉(zhuǎn)發(fā)效率,使得平臺(tái)處理得以加速,可以應(yīng)用于基于多核處理器的路由器、SDN、防火墻和負(fù)載均衡等通信產(chǎn)品。
關(guān)鍵字:路由加速平臺(tái);Linux模式;SE模式;混合模式
中圖分類號(hào):TP393
文獻(xiàn)標(biāo)識(shí)碼:A
1 引言
隨著網(wǎng)絡(luò)技術(shù)和計(jì)算機(jī)通訊技術(shù)的飛速發(fā)展,人們不僅對(duì)網(wǎng)絡(luò)應(yīng)用的多樣性有了新的要求,而且對(duì)網(wǎng)絡(luò)產(chǎn)品的處理性能也有了新的需求。這就對(duì)網(wǎng)絡(luò)核心設(shè)備——路由器提出了全新的要求。一方面?zhèn)鬏斁€路帶寬的增長(zhǎng)極大地推動(dòng)了路由器性能的不斷提升,以滿足通信網(wǎng)絡(luò)的高速需求;另一方面,多種業(yè)務(wù)集成的發(fā)展驅(qū)動(dòng)著路由器具備更強(qiáng)的業(yè)務(wù)處理能力。目前針對(duì)網(wǎng)絡(luò)數(shù)據(jù)處理的處理器主要有多核處理器、硬件并行處理器、可編程的硬件處理器[1,2]。其中,軟件平臺(tái)在多核處理器上的運(yùn)行模式?jīng)Q定了軟件實(shí)現(xiàn)模式,多核處理器支持三種模式[3],分別是全部Linux模式、全部SE模式和Linux與SE混合模式。
全部Linux模式是將多核處理器完全交給Linux操作系統(tǒng)進(jìn)行管理,系統(tǒng)SMP支持多核處理器的調(diào)度工作[4,5],軟件加速平臺(tái)代碼全部在Linux平臺(tái)上通過進(jìn)程的方式完成,表項(xiàng)資源的同步互斥由操作系統(tǒng)保證。上述方式同時(shí)存在運(yùn)行的內(nèi)核態(tài)和用戶態(tài)的區(qū)別,從內(nèi)核到用戶態(tài)需要進(jìn)行數(shù)據(jù)的拷貝。由于操作系統(tǒng)的特殊結(jié)構(gòu)模式,在一定程度上影響了軟件平臺(tái)的運(yùn)行效率。這種模式在中高端網(wǎng)絡(luò)路由加速軟件平臺(tái)中很少被采用,在處理器核數(shù)較少的低端路由器中常被采用。
全部SE模式是讓多核處理器完全運(yùn)行SE的模式,它是一個(gè)輕量級(jí)的操作系統(tǒng),具有高效的運(yùn)行效率。SE上運(yùn)行的代碼需要開發(fā)者自行完成,表項(xiàng)的同步互斥也由軟件平臺(tái)實(shí)現(xiàn),軟件的處理流程由軟件自身控制。但芯片接口和管理接口的數(shù)據(jù)收發(fā)驅(qū)動(dòng)等全部需要軟件平臺(tái)維護(hù),這會(huì)導(dǎo)致軟件平臺(tái)工作量有所增加。
針對(duì)上述問題,采用一種Linux與SE混合的模式,該模式讓linux作為管理控制平面,對(duì)管理接口進(jìn)行全面系統(tǒng)化管理,并引導(dǎo)SE在多核處理器上啟動(dòng);SE上運(yùn)行軟件平臺(tái)的流程處理代碼,實(shí)現(xiàn)數(shù)據(jù)平面的數(shù)據(jù)加速轉(zhuǎn)發(fā),發(fā)揮其高效的運(yùn)行特點(diǎn)。對(duì)比上述兩種模式,混合模式具有兩者相同的共性特點(diǎn),具有與全SE幾乎相當(dāng)?shù)膱?zhí)行效率,并擁有Linux開源的操作系統(tǒng)對(duì)芯片外部設(shè)備的統(tǒng)一化管理,選擇混合模式是中高端路由加速平臺(tái)最合理選擇。
2 平臺(tái)總體設(shè)計(jì)方案
網(wǎng)絡(luò)路由加速平臺(tái)運(yùn)行在多核處理器上[6],并采用混合模式,一個(gè)core運(yùn)行Linux操作系統(tǒng),其余的core運(yùn)行SE(多核處理器專用操作方式)做為數(shù)據(jù)處理平面,在core的分配上[7,8],也可以根據(jù)實(shí)際應(yīng)用來調(diào)整,可以讓多個(gè)core運(yùn)行Linux操作系統(tǒng),相應(yīng)的減少運(yùn)行SE模式的core數(shù)量。
軟件主要分兩個(gè)部分,一部分是運(yùn)行在Linux平面的,主要負(fù)責(zé)調(diào)用命令向SE平面?zhèn)鬟f通道和命令管理,另外一部分是SE環(huán)境下運(yùn)行的數(shù)據(jù)面相關(guān)軟件模塊,本軟件平臺(tái)的各開發(fā)模塊主要集中在SE下的功能模塊。
從系統(tǒng)結(jié)構(gòu)中可知系統(tǒng)采用的Linux加SE的混合系統(tǒng)架構(gòu),充分利用了Linux和SE本身所具有的優(yōu)勢(shì)特點(diǎn),在發(fā)揮了Linux系統(tǒng)化管理和調(diào)度的優(yōu)勢(shì)的同時(shí),SE簡(jiǎn)化了代碼的開發(fā)結(jié)構(gòu),提高了數(shù)據(jù)轉(zhuǎn)發(fā)效率,使得平臺(tái)處理得以加速。
運(yùn)行在Linux平面的軟件主要有:控制通道網(wǎng)絡(luò)接口管理、接口報(bào)文向SE層報(bào)文格式轉(zhuǎn)換、簡(jiǎn)單網(wǎng)絡(luò)管理命令行、定時(shí)統(tǒng)計(jì)上報(bào)等。
SE環(huán)境下運(yùn)行的模塊主要有:IPv4/IPv6轉(zhuǎn)發(fā)、IPSec、NAT、Tunnel、VLAN、VPN、 組播、ACL、Net-Flow、IPsec、PPPoE/L2TP以及安全模塊等。
Linux平面與SE平面運(yùn)行在不同的核上,兩者之間的表項(xiàng)通過共享內(nèi)存的方式獲取[7],表項(xiàng)的實(shí)際創(chuàng)建和插刪改的操作由SE完成,表項(xiàng)插刪改的控制命令需要通過發(fā)送消息隊(duì)列的方式從Linux上發(fā)送到SE上。
3 平臺(tái)業(yè)務(wù)流程
對(duì)于軟件平臺(tái)業(yè)務(wù)流程有兩個(gè)方面:一是從Linux平面來的配置命令下發(fā)和表項(xiàng)狀態(tài)獲取;二是SE平面對(duì)數(shù)據(jù)報(bào)文的接收、處理、輸出的一連串業(yè)務(wù)處理流程。
3.1 Linux平面業(yè)務(wù)流程
配置命令從管理以太網(wǎng)接口進(jìn)入Linux內(nèi)核態(tài),用戶態(tài)通過socket[9,10]從內(nèi)核態(tài)獲取配置命令,如果屬于Linux平面當(dāng)前需要處理的命令,則直接對(duì)通過共享內(nèi)存[11]讀到的表項(xiàng)進(jìn)行獲取操作;如果是涉及插刪改一系列寫命令的操作,則需要通過發(fā)送消息隊(duì)列的方式發(fā)送到SE平面。Linux平面同時(shí)負(fù)責(zé)對(duì)NetFlow表項(xiàng)數(shù)據(jù)統(tǒng)計(jì)和表項(xiàng)內(nèi)容上報(bào)的工作業(yè)務(wù),通過啟用的進(jìn)程定期對(duì)共享內(nèi)存的表項(xiàng)進(jìn)行循環(huán)輪詢,統(tǒng)計(jì)表項(xiàng)數(shù)據(jù)結(jié)構(gòu)并把統(tǒng)計(jì)結(jié)果通過socket發(fā)送到管理網(wǎng)口到上層,業(yè)務(wù)處理流程圖如下圖所示:
3.2 SE平面業(yè)務(wù)流程
數(shù)據(jù)報(bào)文[12]從接口進(jìn)入SE平面,首先進(jìn)行報(bào)文合法性校驗(yàn)、剝?nèi)?bào)文二層頭部、通過VLAN恢復(fù)報(bào)文的入接口、判斷報(bào)文是否為IP報(bào)文還是非IP報(bào)文、對(duì)于非IP報(bào)文分別送入MPLS或PPPoE的處理模塊、對(duì)于IP報(bào)文分別判斷是否需要進(jìn)行NetFlow的數(shù)據(jù)流統(tǒng)計(jì)、判斷是否需要進(jìn)行NAT轉(zhuǎn)換、判斷是否需要進(jìn)行IPsec模塊的處理、判斷是否需要進(jìn)行ACL的處理、對(duì)于組播報(bào)文進(jìn)行組播報(bào)文模塊的處理、對(duì)IP報(bào)文分IPv4和IPv6數(shù)據(jù)報(bào)文,分別送兩個(gè)不同的協(xié)議棧中處理、處理過程中根據(jù)是否存在快表,如果存在則快速進(jìn)行二層分裝進(jìn)行轉(zhuǎn)發(fā)、如果不存在則進(jìn)行普通轉(zhuǎn)發(fā)處理流程,并構(gòu)建快表項(xiàng)、出方向報(bào)文先后經(jīng)過判斷決定是否需要NAT轉(zhuǎn)換、是否需要進(jìn)行IPsec處理、是否需要進(jìn)行ACL的處理、以及是否需要進(jìn)行NetFlow的數(shù)據(jù)流統(tǒng)計(jì)功能、完成上述處理流程后報(bào)文被轉(zhuǎn)發(fā)至輸出接口。
4 關(guān)鍵技術(shù)設(shè)計(jì)與實(shí)現(xiàn)
4.1 高速流表轉(zhuǎn)發(fā)
路由表在設(shè)計(jì)時(shí)采用兩層的設(shè)計(jì)結(jié)構(gòu),簡(jiǎn)稱“總表”和“流表”。在多核并行執(zhí)行環(huán)境中,利用處理器的高速緩存,在Cache中申請(qǐng)與CPU核數(shù)相等(N)個(gè)數(shù)的空間來存放流表的空間塊。每個(gè)“流表”內(nèi)路由表項(xiàng)的集合構(gòu)成了“總表”的一個(gè)子集,這些流表在路由初始化后隨著數(shù)據(jù)流轉(zhuǎn)發(fā)過程逐步建立。處理器的核每次接收到數(shù)據(jù)包,需要進(jìn)行路由查找時(shí),先去對(duì)應(yīng)的流表中進(jìn)行匹配,如果找到,則根據(jù)路由信息中的出端口將數(shù)據(jù)包直接進(jìn)行轉(zhuǎn)發(fā);如果匹配不到,則再進(jìn)入總表中查找,在總表中查找到路由后,將該條路由添加到子表中。
4.2 大容量ACL
大容量ACL的實(shí)現(xiàn)方法是將ACL的鏈表存儲(chǔ)結(jié)構(gòu)設(shè)成雙向鏈表的方式,建立ACL中各表項(xiàng)之間的結(jié)構(gòu)關(guān)系。這里將ACL的表項(xiàng)設(shè)計(jì)成兩級(jí)結(jié)構(gòu)是算法的特殊化處理,為算法的實(shí)現(xiàn)提供數(shù)據(jù)結(jié)構(gòu)支撐。如下圖所示:
多核處理器(Cores)對(duì)初次進(jìn)入的數(shù)據(jù)流(Pl、P2' - Pj)進(jìn)行流的劃分,建立流表(Flow tables),同時(shí)查找合適的訪問控制列表表項(xiàng),建立流表與訪問控制列表表項(xiàng)的關(guān)聯(lián);其中,多核處理器將接收到的數(shù)據(jù)流中的數(shù)據(jù)包(P)分發(fā)到各個(gè)空閑的核上,核抽取數(shù)據(jù)包中對(duì)應(yīng)的條件字段進(jìn)行哈希(Hash)運(yùn)算,根據(jù)哈希值的不同將數(shù)據(jù)包劃分到不同的流表中,每張流表中可以容納3條Hash沖突的數(shù)據(jù)流單元(Entry),每個(gè)單元(Entry)結(jié)構(gòu)中分別由有效位Valid、數(shù)據(jù)流條件字段Key、控制訪問列表動(dòng)作有效位Flag和控制訪問列表動(dòng)作結(jié)構(gòu)體的指針Act。后續(xù)進(jìn)入的數(shù)據(jù)流直接從流表表項(xiàng)中獲取訪問控制列表的執(zhí)行動(dòng)作。
4.3 多業(yè)務(wù)的實(shí)現(xiàn)
多核上的多業(yè)務(wù)是指增值業(yè)務(wù)(防火墻、NAT等)以嵌入的形式存在,數(shù)據(jù)處理過程中符合相關(guān)條件的數(shù)據(jù)包通過調(diào)用相關(guān)業(yè)務(wù)處理模塊的鉤子函數(shù),來實(shí)現(xiàn)相關(guān)業(yè)務(wù)的功能。例如二層業(yè)務(wù)NAT的鉤子函數(shù)定義為ipnet_natjnput,當(dāng)消息進(jìn)入時(shí)首先判斷端口(in/out方向)是否使能NAT,若使能則調(diào)用鉤子函數(shù)直接進(jìn)入NAT處理模塊,若未使能則繼續(xù)往下處理。流程如下圖所示:
5 實(shí)驗(yàn)測(cè)試
實(shí)驗(yàn)在高端路由器上進(jìn)行,環(huán)境基于網(wǎng)絡(luò)路由加速平臺(tái),實(shí)驗(yàn)儀表為Spirent Test Center,在路由器上配置相關(guān)功能,在儀表上查看數(shù)據(jù)轉(zhuǎn)發(fā)相關(guān)情況。該結(jié)果表明網(wǎng)絡(luò)路由加速平臺(tái)能實(shí)現(xiàn)數(shù)據(jù)快速、高效的處理、轉(zhuǎn)發(fā)和接收。
在儀表上查看數(shù)據(jù)收發(fā)情況,數(shù)據(jù)全部轉(zhuǎn)發(fā):
5 結(jié)束語
介紹了一種網(wǎng)絡(luò)路由加速平臺(tái)的實(shí)現(xiàn)方法,設(shè)計(jì)了該系統(tǒng)的總體架構(gòu),并對(duì)其平面業(yè)務(wù)流程進(jìn)行了說明。目前,用戶對(duì)網(wǎng)絡(luò)通信設(shè)備的功能和處理速度的需求不斷變化,怎么合理分配core的數(shù)量,發(fā)揮其高效的運(yùn)行特點(diǎn),以及在該軟件平臺(tái)上,靈活擴(kuò)展軟件功能以最大化地滿足用戶需求,成為下一步研究的重點(diǎn)。
參考文獻(xiàn)
[1]王鵬.基于網(wǎng)絡(luò)處理器的高性能路由器轉(zhuǎn)發(fā)面的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:西南交通大學(xué),2011.
[2]朱佳.網(wǎng)絡(luò)路由仿真平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2007.
[3]王學(xué)龍.嵌入式Linux系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版,2001.
[4]張修琪.基于Linux多核進(jìn)程調(diào)度的研究[D].成都:電子科技大學(xué),2012
[5]黃道穎,張安琳.Linux系統(tǒng)對(duì)SMP并行處理的支持[J].鄭州輕工業(yè)學(xué)院學(xué)報(bào),2001,16 (4):26-30.
[6]葉永春,多核網(wǎng)絡(luò)處理器驅(qū)動(dòng)軟件關(guān)鍵技術(shù)研究[D].西安電子科技大學(xué),2010.
[7] 齊斌.網(wǎng)絡(luò)處理器內(nèi)核體系結(jié)構(gòu)研究[D].西安:西北工業(yè)大學(xué),2004.
[8]張宏科,蘇偉,武勇.網(wǎng)絡(luò)處理器原理與技術(shù)[M].北京郵電大學(xué)出版社,2004.
[9]王楓,羅家融.Linux下多線程Socket通訊的研究與應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2004,16:106-109.
[10]郭東升,田秀華.Linux環(huán)境下基于Socket的網(wǎng)絡(luò)通信[J].軟件導(dǎo)刊,2009,8(1):116-118.
[11]沈劍光,淺析Linux中的共享內(nèi)存機(jī)制[J].中國(guó)科技信息,2006,15:146-149.
[12]王海濤,田暢,鄭少仁.路由器并行交換體系結(jié)構(gòu)的研究[J].數(shù)據(jù)通信,2001,7 (3):4-7.