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