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