安勤玲
煙臺市食品藥品檢驗所 山東 264000
網(wǎng)絡地址轉(zhuǎn)換-協(xié)議轉(zhuǎn)換(NAT-PT)是一種IPv4/IPv6過渡時期采用的轉(zhuǎn)換技術,通過NAT-PT網(wǎng)關設備連接IPv6網(wǎng)絡和IPv4網(wǎng)絡,可以實現(xiàn)純IPv6節(jié)點和純IPv4節(jié)點之間的透明通信。當IPv4和IPv6節(jié)點之間通信時,NAT-PT網(wǎng)關實現(xiàn)兩種IP協(xié)議的格式翻譯和地址的映射:NAT-PT網(wǎng)關將維護一個IPv4地址池,支持為IPv6網(wǎng)絡中的節(jié)點動態(tài)分配IPv4地址和端口,并通過建立 NAT表維護地址端口映射關系,完成IPv4協(xié)議和IPv6協(xié)議的轉(zhuǎn)換。
NAT-PT技術對 v4/v6網(wǎng)絡兩端的主機是透明的,運行在不同版本網(wǎng)絡協(xié)議上的應用程序不需做修改就能完成業(yè)務,較好地解決IPv4和IPv6的互通問題。但對于需要在應用層協(xié)議的負載中攜帶IP層信息的應用,可能會導致不能正確通信,如DNS地址查詢應答報文中對應被查詢域名的IP,在跨越v4/v6網(wǎng)絡時需要轉(zhuǎn)換成對應協(xié)議格式,F(xiàn)TP協(xié)議在其控制連接中攜帶有FTP數(shù)據(jù)連接相關的IP地址/端口信息,SIP協(xié)議 INVITE應答等消息中也攜帶該對應主機所在網(wǎng)絡版本的IP地址,這些信息不做相應的轉(zhuǎn)換翻譯在另一端將不能被正確識別,因此這些轉(zhuǎn)換工作都需要對應的 ALG功能實現(xiàn)。
本文不側(cè)重于NAT-PT協(xié)議和應用層網(wǎng)關ALG功能的具體實現(xiàn),而側(cè)重于從整體上討論具有廣泛參考意義的基于網(wǎng)絡處理器的高性能應用層網(wǎng)關設計。
傳統(tǒng)的網(wǎng)絡設備的開發(fā),在硬件體系結(jié)構(gòu)上一般采取通用CPU和專用標準設備組成,或者采取基于ASIC的設計方案。第一種方案主要依靠軟件來實現(xiàn)功能,可擴展性較強,但是其缺點也十分明顯的,處理能力較低,無法適應現(xiàn)代高速網(wǎng)絡的要求。第二種方案以硬件的方式實現(xiàn)功能,能夠有效提高網(wǎng)絡設備的處理性能和速度,但是缺乏了靈活性,且成本較高。近年來,網(wǎng)絡處理器(Network Processor,NP)的出現(xiàn)給網(wǎng)絡設備的設計帶來新的選擇。網(wǎng)絡處理器采用了與傳統(tǒng)的處理器不同的設計,既有ASIC的高速處理能力,又有完全的可編程特性,是一種具備線速轉(zhuǎn)發(fā)和智能處理的方案。為了設計一個高性能的NAT-PT網(wǎng)關設備,使之能夠適應高速的網(wǎng)絡環(huán)境,能夠達到線速1Gbps的要求,并且能夠?qū)?ALG數(shù)據(jù)處理進行較為復雜的處理,我們采用 Intel IXP2400網(wǎng)絡處理器及其提供的IXA SDK軟件框架來做為NAT-PT設備的基礎框架。系統(tǒng)參考原型的系統(tǒng)框架結(jié)構(gòu)圖如圖1所示。
在NAT-PT系統(tǒng)原型的設計中,主要參考INTEL提供的IXP SDK設計模型,利用IXP2400網(wǎng)絡處理器中的8個微引擎(Micro Engine,ME)進行普通網(wǎng)絡數(shù)據(jù)包的快速翻譯和收發(fā)功能,利用IXP2400的Xscale處理器進行應用層數(shù)據(jù)(異常)包的處理和實現(xiàn)系統(tǒng)的管理功能,其中異常包的處理包括需要進行較為復雜轉(zhuǎn)換的 ALG數(shù)據(jù)包的處理。經(jīng)過測試,基于網(wǎng)絡處理的NAT-PT網(wǎng)關設備,能夠很好的達到了普通數(shù)據(jù)包1Gbps線速轉(zhuǎn)發(fā)的要求。但是,其應用層網(wǎng)關(ALG)的處理性能不很理想,吞吐率低,不足 10Mbps。根據(jù)已有的網(wǎng)絡流量統(tǒng)計數(shù)據(jù)表明,網(wǎng)絡中數(shù)據(jù)流量的6%的數(shù)據(jù)屬于ALG處理的數(shù)據(jù)范疇,因此以設計總吞吐率為1Gbps的 NAT-PT設備為標準,ALG的吞吐率要求至少要達到60Mbps。
ALG功能是保證NAT-PT能夠順利進行IPv4/IPv6網(wǎng)絡互聯(lián)互通的關鍵,因此如何設計出高性能的ALG,是NAT-PT網(wǎng)關設備能否成功的關鍵之一。下節(jié)將以FTP數(shù)據(jù)包從數(shù)據(jù)從輸入到輸出經(jīng)過的處理流程為例,逐步分析整個 ALG處理流程中可能的性能瓶頸,并提出對應的解決方案。本系統(tǒng)支持的其他需要做應用層翻譯的協(xié)議,如 SIP、DNS,對數(shù)據(jù)包的處理流程基本相同,對 FTP-ALG性能的分析和設計也適用于SIP-ALG,DNS-ALG。
圖1 原系統(tǒng)參考框架結(jié)構(gòu)圖
圖2 新設計系統(tǒng)體系結(jié)構(gòu)圖
以FTP數(shù)據(jù)包的流程為例,數(shù)據(jù)包的處理主要經(jīng)過以下處理流程:
(1) 底層微引擎執(zhí)行數(shù)據(jù)包的接收和解包工作,并對數(shù)據(jù)包進行分類,若此數(shù)據(jù)包需要ALG處理,則將此數(shù)據(jù)包的描述符通過 IXA 3.1 SDK的消息機制傳遞到Xscale層;
(2) Xscale接收到處理ALG的消息之后,通過IXP2400系統(tǒng)內(nèi)部總線讀取數(shù)據(jù)包緩沖,進行IP頭部的V4/V6轉(zhuǎn)換,分析數(shù)據(jù)包的負載,將負載中需要翻譯的字段進行數(shù)據(jù)轉(zhuǎn)換,并更新其傳輸層相關字段,此為 ALG的主要功能。最后進行路由表的查找;
(3) Xscale將處理之后的ALG數(shù)據(jù)包描述符通過消息機制發(fā)送到ME,由ME查L2(MAC層)表,組成完整的以太網(wǎng)幀,從相應的端口發(fā)送。
IXP2400中的核心部件是8個ME,ME擁強大的指令執(zhí)行單元,并且每個微引擎內(nèi)部有8個硬件線程,ME上的程序由微碼實現(xiàn)。經(jīng)測試,ME在接收包、解封裝包、包分類以及發(fā)送處理過程中可以達到 1Gbps的處理能力,相對與10Mbps的ALG流量而言,ME并不是ALG處理流程中的瓶頸。ALG處理功能大部分屬于字符串處理,ME使用的是類匯編的微碼來編程,不適合處理較為復雜的 ALG功能,因此必需傳遞給Xscale進行處理。 Xscale主頻為600M,屬于嵌入式精簡指令集處理器,雖然能夠使用高級語言編程進行通用數(shù)據(jù)處理,但是其處理能力比其它通用CPU存在差距,同時Xscale還負責執(zhí)行整個系統(tǒng)的管理功能。經(jīng)過測試試驗表明,在ALG輸入吞吐率從0-10Mbps的過程中,Xscale的負載迅速提高,當?shù)竭_吞吐率達到10Mbps時,其CPU使用率接近100%,因此Xscale有限的處理能力是制約NAT-PT設備處理ALG性能的瓶頸之一。
為了解決Xscale的處理能力瓶頸,在單NP(1個Xscale+8個ME)的基礎上,我們提出基于PMC方式外接了一個處理能力更強的通用CPU(PowerPC,主頻1G, 512M DDR內(nèi)存,內(nèi)存總線64bit/133MHz,PCI總線64bit/66MHz)的方案,將ALG的處理功能任務轉(zhuǎn)移到PowerPC上,當ME接收到數(shù)據(jù)包,并判斷其為 ALG數(shù)據(jù)時,不再提交給 Xscale,而直接提交給PowerPC進行ALG處理,利用PowerPC在通用計算上的優(yōu)勢解決Xscale處理能力的瓶頸問題。新的系統(tǒng)框架結(jié)構(gòu)圖如圖2。
在新設計的系統(tǒng)中,在BSP驅(qū)動層面將IXP2400的內(nèi)存直接映射到PCI地址空間之上,因此PowerPC可以直接通過PCI總線訪問到 IXP2400的內(nèi)存空間。同時也將原來的在Xscale的管理層面和應用數(shù)據(jù)層面分開,使系統(tǒng)模塊功能更為清晰和獨立。
在系統(tǒng)原型的設計中,Xscale和ME通過系統(tǒng)內(nèi)部總線共享內(nèi)存,因此當Xscale讀取數(shù)據(jù)包的緩沖數(shù)據(jù)時,訪存延遲低。而在新的設計中,PowerPC作為IXP 2400的一個外部設備,PowerPC只能通過PCI總線訪問IXP 2400的內(nèi)存。在PowerPC處理ALG數(shù)據(jù)之前,必需通過PCI總線讀取對應數(shù)據(jù)包的數(shù)據(jù),在處理結(jié)束之后再次通過PCI總線將新的數(shù)據(jù)包寫回,提交給ME進行轉(zhuǎn)發(fā)。其中PrPMC的PCI總線的頻率僅為66MHz,因此PowerPC在拷貝數(shù)據(jù)包的過程中訪存延遲比Xscale直接通過系統(tǒng)內(nèi)部總線大。
為了更好測試拷貝對整體 ALG處理性能的影響,我們首先對 PowerPC在沒有數(shù)據(jù)包拷貝的情況下進行純數(shù)據(jù)翻譯處理,然后再加上數(shù)據(jù)包的功能進行測試,比較不同包拷貝方式之間的性能差異。
測試結(jié)果表明PowerPC在沒有數(shù)據(jù)包拷貝的條件下,至少能夠達到每秒處理15,000個FTP數(shù)據(jù)包的性能,若每個FTP數(shù)據(jù)包為72byte,則吞吐率超過100Mbps。在此基礎之上,加入通過PCI總線,以PIO(Programmable I/O)方式進行數(shù)據(jù)包拷貝的處理,并使用長度為72byte的FTP包進行測試,測試結(jié)果顯示PowerPC吞吐率下降至34Mbps。因此數(shù)據(jù)包拷貝的性能是整個新系統(tǒng)ALG處理吞吐率的瓶頸。
DMA(Direct Memory Access)是一種無需CPU的參與就可以讓外設與系統(tǒng) RAM 之間進行雙向數(shù)據(jù)傳輸?shù)挠布C制,使用DMA可以使系統(tǒng)CPU從實際的I/O數(shù)據(jù)傳輸過程中擺脫出來,從而大大提高系統(tǒng)的吞吐率。經(jīng)過測試,以DMA方式代替PIO方式進行數(shù)據(jù)包拷貝,PowerPC處理ALG的吞吐率可以提高到50Mbps。DMA方式是提高數(shù)據(jù)包拷貝速度的有效途徑,但是DMA方式的讀寫優(yōu)勢體現(xiàn)在處理大數(shù)據(jù)量的時候。在測試中,每次 DMA讀取的數(shù)據(jù)大小僅為72Bytes,因此并沒有發(fā)揮DMA的最佳性能。通過測試單純的DMA數(shù)據(jù)讀取,每次讀取的數(shù)據(jù)大小從逐漸變大,可以統(tǒng)計出DMA讀取性能與讀取數(shù)據(jù)大小之間的變化趨勢。測試時每一種大小的數(shù)據(jù)包大小均進行 10次測試,記錄下每次讀取所消耗的時間,然后取其平均值作為讀取此該數(shù)值大小的數(shù)據(jù)包所消耗的時間,并根據(jù)計算出平均傳輸速率。圖 3為各種數(shù)據(jù)包大小與其平均速率之間的變化曲線圖。
測試結(jié)果中證明了DMA讀取速度隨著每次讀取數(shù)據(jù)的大小增大而提高,同時隨著每次讀取數(shù)據(jù)大小的增加,DMA讀取的速度提高的幅度也隨之減小。圖4是根據(jù)測試結(jié)果計算出的平均讀取每一個字節(jié)的耗時變化趨勢。不難得出如下結(jié)論:當每次讀取大小增加到一定程度之后,再增加每次讀取數(shù)據(jù)的大小,對提高平均讀取速度已經(jīng)沒有太多作用,其平均每字節(jié)耗時已經(jīng)趨于穩(wěn)定。在DMA讀取中,為了保證高速讀取,PowerPC端的緩沖區(qū)必需是在SRAM中分配的,而PowerPC的SRAM是片內(nèi)的二級緩沖,預留給應用程序使用的空間很小,因此必需選擇一個合適的緩沖大小,使其發(fā)揮最大效率。當平均增加一個字節(jié)帶來的速率提高小于1Kbps的時,我們認為沒有實際性能提高。因此,通過計算我們確定每次讀取大小為 5120Bytes的數(shù)據(jù)能夠發(fā)揮 DMA讀取方式的最佳性能。
圖3 DMA數(shù)據(jù)讀取速率測試結(jié)果
圖4 每字節(jié)平均耗時變化趨勢
ALG要處理的數(shù)據(jù)包一般大小在 64Bytes到 512Bytes之間,采取組包之后再使用DMA方式進行拷貝的方案可以充分利用DMA讀取的性能。即在IXP2400中利用ME先將多個數(shù)據(jù)包組合成大小為5120Bytes的數(shù)據(jù)包集,并將此數(shù)據(jù)包集拷貝到指定的內(nèi)存空間中,然后再發(fā)送消息給PowerPC,通知其從指定內(nèi)存地址中使用 DMA方式整體拷貝到PowerPC的本地內(nèi)存,再進行逐個數(shù)據(jù)包的拆分處理。經(jīng)過測試,在輸入數(shù)據(jù)包大小為72Bytes時,組包DMA拷貝方式的ALG處理吞吐率能夠達到65Mbps。此性能指標較好的滿足系統(tǒng)對ALG的吞吐率的要求。
影響 ALG處理性能除了硬件體系結(jié)構(gòu)上的因素之外,程序本身的效率也是關鍵因素之一。在設計 ALG過程中,針對IXA3.1的SDK中一些如計算Hash值的算法進行了優(yōu)化,以及優(yōu)化的系統(tǒng)函數(shù)調(diào)用,避免內(nèi)存波動等措施。優(yōu)化后的測試表明,通過算法層面的優(yōu)化,能夠提高 ALG處理的性能。
本節(jié)對NAT-PT網(wǎng)關設備ALG性能進行全面的測試,主要考察在各種設計方案實施前后NAT-PT對FTP-ALG處理性能。以 Spirent公司的 SmartBits作為測試工具,通過SmartBits給NAT-PT發(fā)送v4 FTP數(shù)據(jù)包,同時接收轉(zhuǎn)化后的v6 FTP數(shù)據(jù)包,不斷提高發(fā)送速率,以NAT-PT開始出現(xiàn)丟包時 SmartBits的發(fā)送速率作為最高吞吐率。試驗連接圖如圖5所示。
圖5 測試環(huán)境拓撲結(jié)構(gòu)
表1 改進方案測試統(tǒng)計數(shù)據(jù)
由于 ALG數(shù)據(jù)大多屬于控制信息,因此單個數(shù)據(jù)包比較小,因此我們選取64Bytes,72Bytes,128Bytes,256Bytes和512Bytes的包作為性能測試包,可以較好的反應出系統(tǒng)的實際性能。表1為具體的測試數(shù)據(jù)結(jié)果。
本文從網(wǎng)絡設備的硬件體系結(jié)構(gòu)分析開始,逐步分析制約NAT-PT 實現(xiàn)ALG的性能關鍵瓶頸,得出Xscale是網(wǎng)絡處理器中在進行大量通用計算處理時瓶頸的結(jié)論,提出了以外接方式添加通用處理器(PowerPC)的方案,以彌補 Xscale的處理能力不足;為了解決PowerPC與網(wǎng)絡處理之間數(shù)據(jù)通信速度的問題,提出以DMA方式進行數(shù)據(jù)讀取方案,并通過一系列的測試,分析測試數(shù)據(jù)確定出DMA方式數(shù)據(jù)讀取的最佳性能的參數(shù),最后結(jié)合 ALG的具體實現(xiàn),進行的相關程序算法優(yōu)化,完成整個NAT-PT網(wǎng)關設備處理ALG性能的提升。最終經(jīng)過測試,證明按照方案實現(xiàn)的 ALG處理性能比原型系統(tǒng)提高了6倍,最小包達到60Mbps的性能,較好的達到系統(tǒng)要求。同時也給出基于網(wǎng)絡處理器的高性能網(wǎng)絡設備設計提供了參考。
[1] Tsarists G,Srisuresh P.Network Address Translation-Protocol Translation (NAT-PT).RFC 2766.2000.
[2] P.Srisuresh,G.Tsirtsis.DNS extensions to Network Address Translators (DNS_ALG).RFC 2694.1999.
[3] M.Altman,NASA Lewis/Sterling Software,S.Oysterman.FTP Extensions for IPv6 and NATs.RFC 2428.1998.
[4] 陳沫.基于IXP2400網(wǎng)絡處理器的高性能IPv4/IPv6互通網(wǎng)關.計算機工程.2006.
[5] 張宏科.網(wǎng)絡處理器原理與技術.北京:北京郵電大學出版社.2004.
[6] Brayant,R,E.Computer System a Programmer’s Perspective深入理解計算機系統(tǒng).北京:中國電力出版社.2004.