安勤玲
煙臺市食品藥品檢驗所 山東 264000
網絡地址轉換-協議轉換(NAT-PT)是一種IPv4/IPv6過渡時期采用的轉換技術,通過NAT-PT網關設備連接IPv6網絡和IPv4網絡,可以實現純IPv6節點和純IPv4節點之間的透明通信。當IPv4和IPv6節點之間通信時,NAT-PT網關實現兩種IP協議的格式翻譯和地址的映射:NAT-PT網關將維護一個IPv4地址池,支持為IPv6網絡中的節點動態分配IPv4地址和端口,并通過建立 NAT表維護地址端口映射關系,完成IPv4協議和IPv6協議的轉換。
NAT-PT技術對 v4/v6網絡兩端的主機是透明的,運行在不同版本網絡協議上的應用程序不需做修改就能完成業務,較好地解決IPv4和IPv6的互通問題。但對于需要在應用層協議的負載中攜帶IP層信息的應用,可能會導致不能正確通信,如DNS地址查詢應答報文中對應被查詢域名的IP,在跨越v4/v6網絡時需要轉換成對應協議格式,FTP協議在其控制連接中攜帶有FTP數據連接相關的IP地址/端口信息,SIP協議 INVITE應答等消息中也攜帶該對應主機所在網絡版本的IP地址,這些信息不做相應的轉換翻譯在另一端將不能被正確識別,因此這些轉換工作都需要對應的 ALG功能實現。
本文不側重于NAT-PT協議和應用層網關ALG功能的具體實現,而側重于從整體上討論具有廣泛參考意義的基于網絡處理器的高性能應用層網關設計。
傳統的網絡設備的開發,在硬件體系結構上一般采取通用CPU和專用標準設備組成,或者采取基于ASIC的設計方案。第一種方案主要依靠軟件來實現功能,可擴展性較強,但是其缺點也十分明顯的,處理能力較低,無法適應現代高速網絡的要求。第二種方案以硬件的方式實現功能,能夠有效提高網絡設備的處理性能和速度,但是缺乏了靈活性,且成本較高。近年來,網絡處理器(Network Processor,NP)的出現給網絡設備的設計帶來新的選擇。網絡處理器采用了與傳統的處理器不同的設計,既有ASIC的高速處理能力,又有完全的可編程特性,是一種具備線速轉發和智能處理的方案。為了設計一個高性能的NAT-PT網關設備,使之能夠適應高速的網絡環境,能夠達到線速1Gbps的要求,并且能夠對 ALG數據處理進行較為復雜的處理,我們采用 Intel IXP2400網絡處理器及其提供的IXA SDK軟件框架來做為NAT-PT設備的基礎框架。系統參考原型的系統框架結構圖如圖1所示。
在NAT-PT系統原型的設計中,主要參考INTEL提供的IXP SDK設計模型,利用IXP2400網絡處理器中的8個微引擎(Micro Engine,ME)進行普通網絡數據包的快速翻譯和收發功能,利用IXP2400的Xscale處理器進行應用層數據(異常)包的處理和實現系統的管理功能,其中異常包的處理包括需要進行較為復雜轉換的 ALG數據包的處理。經過測試,基于網絡處理的NAT-PT網關設備,能夠很好的達到了普通數據包1Gbps線速轉發的要求。但是,其應用層網關(ALG)的處理性能不很理想,吞吐率低,不足 10Mbps。根據已有的網絡流量統計數據表明,網絡中數據流量的6%的數據屬于ALG處理的數據范疇,因此以設計總吞吐率為1Gbps的 NAT-PT設備為標準,ALG的吞吐率要求至少要達到60Mbps。
ALG功能是保證NAT-PT能夠順利進行IPv4/IPv6網絡互聯互通的關鍵,因此如何設計出高性能的ALG,是NAT-PT網關設備能否成功的關鍵之一。下節將以FTP數據包從數據從輸入到輸出經過的處理流程為例,逐步分析整個 ALG處理流程中可能的性能瓶頸,并提出對應的解決方案。本系統支持的其他需要做應用層翻譯的協議,如 SIP、DNS,對數據包的處理流程基本相同,對 FTP-ALG性能的分析和設計也適用于SIP-ALG,DNS-ALG。

圖1 原系統參考框架結構圖

圖2 新設計系統體系結構圖
以FTP數據包的流程為例,數據包的處理主要經過以下處理流程:
(1) 底層微引擎執行數據包的接收和解包工作,并對數據包進行分類,若此數據包需要ALG處理,則將此數據包的描述符通過 IXA 3.1 SDK的消息機制傳遞到Xscale層;
(2) Xscale接收到處理ALG的消息之后,通過IXP2400系統內部總線讀取數據包緩沖,進行IP頭部的V4/V6轉換,分析數據包的負載,將負載中需要翻譯的字段進行數據轉換,并更新其傳輸層相關字段,此為 ALG的主要功能。最后進行路由表的查找;
(3) Xscale將處理之后的ALG數據包描述符通過消息機制發送到ME,由ME查L2(MAC層)表,組成完整的以太網幀,從相應的端口發送。
IXP2400中的核心部件是8個ME,ME擁強大的指令執行單元,并且每個微引擎內部有8個硬件線程,ME上的程序由微碼實現。經測試,ME在接收包、解封裝包、包分類以及發送處理過程中可以達到 1Gbps的處理能力,相對與10Mbps的ALG流量而言,ME并不是ALG處理流程中的瓶頸。ALG處理功能大部分屬于字符串處理,ME使用的是類匯編的微碼來編程,不適合處理較為復雜的 ALG功能,因此必需傳遞給Xscale進行處理。 Xscale主頻為600M,屬于嵌入式精簡指令集處理器,雖然能夠使用高級語言編程進行通用數據處理,但是其處理能力比其它通用CPU存在差距,同時Xscale還負責執行整個系統的管理功能。經過測試試驗表明,在ALG輸入吞吐率從0-10Mbps的過程中,Xscale的負載迅速提高,當到達吞吐率達到10Mbps時,其CPU使用率接近100%,因此Xscale有限的處理能力是制約NAT-PT設備處理ALG性能的瓶頸之一。
為了解決Xscale的處理能力瓶頸,在單NP(1個Xscale+8個ME)的基礎上,我們提出基于PMC方式外接了一個處理能力更強的通用CPU(PowerPC,主頻1G, 512M DDR內存,內存總線64bit/133MHz,PCI總線64bit/66MHz)的方案,將ALG的處理功能任務轉移到PowerPC上,當ME接收到數據包,并判斷其為 ALG數據時,不再提交給 Xscale,而直接提交給PowerPC進行ALG處理,利用PowerPC在通用計算上的優勢解決Xscale處理能力的瓶頸問題。新的系統框架結構圖如圖2。
在新設計的系統中,在BSP驅動層面將IXP2400的內存直接映射到PCI地址空間之上,因此PowerPC可以直接通過PCI總線訪問到 IXP2400的內存空間。同時也將原來的在Xscale的管理層面和應用數據層面分開,使系統模塊功能更為清晰和獨立。
在系統原型的設計中,Xscale和ME通過系統內部總線共享內存,因此當Xscale讀取數據包的緩沖數據時,訪存延遲低。而在新的設計中,PowerPC作為IXP 2400的一個外部設備,PowerPC只能通過PCI總線訪問IXP 2400的內存。在PowerPC處理ALG數據之前,必需通過PCI總線讀取對應數據包的數據,在處理結束之后再次通過PCI總線將新的數據包寫回,提交給ME進行轉發。其中PrPMC的PCI總線的頻率僅為66MHz,因此PowerPC在拷貝數據包的過程中訪存延遲比Xscale直接通過系統內部總線大。
為了更好測試拷貝對整體 ALG處理性能的影響,我們首先對 PowerPC在沒有數據包拷貝的情況下進行純數據翻譯處理,然后再加上數據包的功能進行測試,比較不同包拷貝方式之間的性能差異。
測試結果表明PowerPC在沒有數據包拷貝的條件下,至少能夠達到每秒處理15,000個FTP數據包的性能,若每個FTP數據包為72byte,則吞吐率超過100Mbps。在此基礎之上,加入通過PCI總線,以PIO(Programmable I/O)方式進行數據包拷貝的處理,并使用長度為72byte的FTP包進行測試,測試結果顯示PowerPC吞吐率下降至34Mbps。因此數據包拷貝的性能是整個新系統ALG處理吞吐率的瓶頸。
DMA(Direct Memory Access)是一種無需CPU的參與就可以讓外設與系統 RAM 之間進行雙向數據傳輸的硬件機制,使用DMA可以使系統CPU從實際的I/O數據傳輸過程中擺脫出來,從而大大提高系統的吞吐率。經過測試,以DMA方式代替PIO方式進行數據包拷貝,PowerPC處理ALG的吞吐率可以提高到50Mbps。DMA方式是提高數據包拷貝速度的有效途徑,但是DMA方式的讀寫優勢體現在處理大數據量的時候。在測試中,每次 DMA讀取的數據大小僅為72Bytes,因此并沒有發揮DMA的最佳性能。通過測試單純的DMA數據讀取,每次讀取的數據大小從逐漸變大,可以統計出DMA讀取性能與讀取數據大小之間的變化趨勢。測試時每一種大小的數據包大小均進行 10次測試,記錄下每次讀取所消耗的時間,然后取其平均值作為讀取此該數值大小的數據包所消耗的時間,并根據計算出平均傳輸速率。圖 3為各種數據包大小與其平均速率之間的變化曲線圖。
測試結果中證明了DMA讀取速度隨著每次讀取數據的大小增大而提高,同時隨著每次讀取數據大小的增加,DMA讀取的速度提高的幅度也隨之減小。圖4是根據測試結果計算出的平均讀取每一個字節的耗時變化趨勢。不難得出如下結論:當每次讀取大小增加到一定程度之后,再增加每次讀取數據的大小,對提高平均讀取速度已經沒有太多作用,其平均每字節耗時已經趨于穩定。在DMA讀取中,為了保證高速讀取,PowerPC端的緩沖區必需是在SRAM中分配的,而PowerPC的SRAM是片內的二級緩沖,預留給應用程序使用的空間很小,因此必需選擇一個合適的緩沖大小,使其發揮最大效率。當平均增加一個字節帶來的速率提高小于1Kbps的時,我們認為沒有實際性能提高。因此,通過計算我們確定每次讀取大小為 5120Bytes的數據能夠發揮 DMA讀取方式的最佳性能。

圖3 DMA數據讀取速率測試結果

圖4 每字節平均耗時變化趨勢
ALG要處理的數據包一般大小在 64Bytes到 512Bytes之間,采取組包之后再使用DMA方式進行拷貝的方案可以充分利用DMA讀取的性能。即在IXP2400中利用ME先將多個數據包組合成大小為5120Bytes的數據包集,并將此數據包集拷貝到指定的內存空間中,然后再發送消息給PowerPC,通知其從指定內存地址中使用 DMA方式整體拷貝到PowerPC的本地內存,再進行逐個數據包的拆分處理。經過測試,在輸入數據包大小為72Bytes時,組包DMA拷貝方式的ALG處理吞吐率能夠達到65Mbps。此性能指標較好的滿足系統對ALG的吞吐率的要求。
影響 ALG處理性能除了硬件體系結構上的因素之外,程序本身的效率也是關鍵因素之一。在設計 ALG過程中,針對IXA3.1的SDK中一些如計算Hash值的算法進行了優化,以及優化的系統函數調用,避免內存波動等措施。優化后的測試表明,通過算法層面的優化,能夠提高 ALG處理的性能。
本節對NAT-PT網關設備ALG性能進行全面的測試,主要考察在各種設計方案實施前后NAT-PT對FTP-ALG處理性能。以 Spirent公司的 SmartBits作為測試工具,通過SmartBits給NAT-PT發送v4 FTP數據包,同時接收轉化后的v6 FTP數據包,不斷提高發送速率,以NAT-PT開始出現丟包時 SmartBits的發送速率作為最高吞吐率。試驗連接圖如圖5所示。

圖5 測試環境拓撲結構

表1 改進方案測試統計數據
由于 ALG數據大多屬于控制信息,因此單個數據包比較小,因此我們選取64Bytes,72Bytes,128Bytes,256Bytes和512Bytes的包作為性能測試包,可以較好的反應出系統的實際性能。表1為具體的測試數據結果。
本文從網絡設備的硬件體系結構分析開始,逐步分析制約NAT-PT 實現ALG的性能關鍵瓶頸,得出Xscale是網絡處理器中在進行大量通用計算處理時瓶頸的結論,提出了以外接方式添加通用處理器(PowerPC)的方案,以彌補 Xscale的處理能力不足;為了解決PowerPC與網絡處理之間數據通信速度的問題,提出以DMA方式進行數據讀取方案,并通過一系列的測試,分析測試數據確定出DMA方式數據讀取的最佳性能的參數,最后結合 ALG的具體實現,進行的相關程序算法優化,完成整個NAT-PT網關設備處理ALG性能的提升。最終經過測試,證明按照方案實現的 ALG處理性能比原型系統提高了6倍,最小包達到60Mbps的性能,較好的達到系統要求。同時也給出基于網絡處理器的高性能網絡設備設計提供了參考。
[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網絡處理器的高性能IPv4/IPv6互通網關.計算機工程.2006.
[5] 張宏科.網絡處理器原理與技術.北京:北京郵電大學出版社.2004.
[6] Brayant,R,E.Computer System a Programmer’s Perspective深入理解計算機系統.北京:中國電力出版社.2004.