網絡處理器軟件開發信研究論文
時間:2022-06-23 11:47:00
導語:網絡處理器軟件開發信研究論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
摘要:網絡處理器的高速處理和靈活的可編程性,使它成為當今網絡中數據處理的有效解決方案。本文深入探討網絡處理器的軟件開發模型。首先,介紹IntelIXP2400網絡處理器硬件結構和軟件開發平臺,然后給出基于網絡處理器的路由轉發系統的設計實例,闡述網絡處理器開發的關鍵環節,最后提出網絡處理器軟件開發所面臨的主要問題和挑戰。
關鍵詞:網絡處理器軟件開發模型微引擎微模塊核心組件
引言
隨著當今網絡規模和性能迅速增長,Internet主干網絡流量的指數性增長及新業務接連的出現,這就要求網絡設備具有線速和智能的處理能力。網絡處理器NP(NetworkProcessor)便是一種新興、有效的統一解決方案。它適用于各層網絡處理,具有ASIC高速處理性能和可編程特性,既能保證系統靈活性,又能完成線速處理數據包所要求的高性能硬件功能。目前,網絡處理器已經涌現出了一些成功的應用范例。這些應用主要包括:基于網絡處理器的路由交換設備、智能安全設備和入侵檢測設備等。比如,北京聯想使用IBM的PowerNP構成了電信級的防火墻設備。與此同時,圍繞著網絡處理器應用展開的相關研究也得到了飛速發展,一些企業和科研機構也給予了足夠重視。例如,Intel專門投資支持全球100所大學進行網絡處理器及其相關應用的研究。
由于網絡處理器特殊的體系結構,它的軟件編程模型與傳統網絡應用/嵌入式應用開發有較大不同,更為復雜。本文將以IntelIXP2400網絡處理器為例,對網絡處理器軟件開發模型進行較為詳細地探討。
1網絡處理器硬件架構
在一般程序設計中,可以不考慮操作系統和編譯程序、線程調度的細節、寄存器的數量和容量,而在網絡處理器的程序設計中,忽略這些因素就不能編寫出優化的程序。在對網絡處理器,尤其是微引擎編程之前,需要仔細了解網絡處理器的系統結構和硬件平臺。下面以Intel的IXP2400為例來說明。
IXP2400網絡處理器是Intel在2002年推出的第二代互聯網交換架構(IXA)網絡處理器。其中,IXP2400是面向中高端應用的網絡處理器,可用于實現OC-48的網絡路由交換設備。
Intel的IXP2400網絡處理器結構允分體現了SoC(SystemonChip)的思想。如圖1所示,它的內部主要包括8個完全可編程的4線程微引擎(Mev2)和1個XScale核。此外,還有用于連接外部MAC設備的MSF單元、連接各種存儲器和總線的接口單元等。這些單元通過內部的高速數據總線和控制總線彼些協作。
XScale核(core)是ARM系列處理器的一種,它在IXP2400中起控制和管理作用。具體包括:對系統初始化;提供系統的時鐘;建立并管理路由表;提供一個對應于IXP2400各寄存器、存儲器和外部存儲器的地址映射表等。XScale核在系統啟動時,從BootROM開始執行引導程序,對整個IXP2400系統進行初始化。
IXP2400中的每一個微引擎其它就是一個32位RISC處理器,可以由4個并行硬件線程共享。數據包的接收、處理和發送等任務,均由微引擎中的各線程并行執行微引擎指令存儲區中的微代碼程序來完成。網絡處理器數據的高速轉發正是因為充分利用了硬件的并行性,來彌補線速轉發中的內存訪問的延遲。
IXP2400嵌在開發板的中心,周圍通過數據線連接著各種設備,如SRAM,SDRAM等。SDRMA主要用來存放需要處理和轉發的數據包等,也作為XScale核的內存;SRAM主要存放對數據包包頭進行處理所需的重要信息和數據包的隊列描述等內容。通過IXP2400的數據單元是一個64字節的MAC包(MPKT),在每收到一個包的時候,MAC將一個數據分成若干個MPKT,MPKT就是網絡處理器處理數據的單位。
綜上所述,IXP2400擁有網絡處理的一般特點,從系統角度看,IXP2400屬于一個并行式的多算是器共享總線的計算機系統。對于網絡處理器的程序設計和一般計算機的程序設計有很大不同。
2網絡處理器軟件開發模型
網絡設備性能和可編程能力最終由運行在網絡處理器平臺上的軟件決定,其中,選擇何種編程模式是關鍵。評價網絡處理器編程模式有兩個基本準則:一個是編程模式所能涉及的層,即哪些功能能夠編程以及編程能達到的層;另一個重要方面就是處理器襯淫的編程模型。由于網絡處理器平臺服務于軟件功能需要,所以編程方法的關鍵是在不犧牲設備性能的前提下,使用成熟技術和現有軟件模式,保證產品的可靠性,加快開發速度。
基于運行在核心處理器和協處理器的不同硬件之上,網絡處理器可分成數據平面與控制平臺。
數據平面主要運行在微引擎處理之上,是實現輸入端口和輸出端口間高速轉發數據包的處理功能,具有線速執行特點,并充分利用數據包的無關性,采取并行處理方式??刂破矫嬉话氵\行在網絡處理器核上,處理路由表更新、管理數據平面任務與狀態、完成高層的QoS控制等。這些操作的性能要求低于數據層面,因此通常采用高性能通用處理器硬件平臺。為了有效支持網絡處理功能,控制平面與數據平面之間存在復雜的信息交互與依賴關系。
IXP2400的軟件開發也分為內核程序和微代碼兩部分。XScale內核的開發通常可以使用基于ARM平臺嵌入式操作系統開發工具鏈,如WindRiver公司的Tornado或基于GNU的Linux工具鏈等;另一部分是對微引擎的編程,這部分使用Intel公司提供的DeveloperWorkbench開發環境,主要使用微代碼來進行編程。DeveloperWorkbench提供了完善的編譯、鏈接、仿真和調試功能。為了方便開發人員開發,消除平面之間通信等一些細節,Intel提供了它的網絡處理器開發模型,稱為IXA可移植框架(portabilityframework)如圖2所示。
IntelIXA可移植框架中最重要的組成部分就是在微引擎上和XScale核上開發的代碼模型?;诓煌布祥_發的代碼模塊分別為微模塊(microblock)和核心組件(corecomponent)。每一個模塊都代表了一個進行包處理的代碼單元。這里實際上引入了構件的思想,開發人員將各種模塊以一定的順序組織在一起,組成一個特定的應用。下面分別對框架中的各個層次進行討論。
(1)微模塊
數據平面的微引擎在邏輯上分成一個或多個微模塊(microblock)。每一個微模塊都是一個宏或者一個微引擎或由Intel提供的一些底層庫寫成的函數。微模塊之間彼此獨立,這些就提高了代碼的可重用性,同時也簡化了微引擎手代碼的編寫。微引擎與IntelXScale核共享一部分內存,大部分網絡包的處理都通過微引擎來進行,一些例外的包將傳遞給IntelXScale核心組件來處理。微模塊從功能上一般包括與一些高層協議相關包的處理微模塊和與硬件緊密相關的微模塊。前者包括IPv4轉發、網橋、網絡地址轉換(NAT)等;后者包括包的接收和發送模塊及分組隊列管理模塊等。
(2)核心組件
核心組件(CoreComponent)運行在XScale核上,實現了相關微模塊的配置、管理和例外處理等工作。一個核心組件可能管理著多于一個微模塊。具體來講,核心組件主要完成以下一些功能:配置微模塊(通過引入變量的靜態配置和控制模塊的動態配置);初始化維護一些可能被其它應用程序修改的數據結構;提供了一個例外處理和控制消息處理機制來處理微模塊發送過來的包和消息。
(3)微引擎數據平面優化庫
微引擎數據平面優化庫(optimizedmicroenginedataplanelibrary)包括一些底層的微引擎宏指令和用微引擎的特殊C語言寫的函數庫,用來編寫微模塊和一些微引擎的代碼。這些為是經過Intel優化的,非常高效,代碼的占用小,同時也是非常底層的。庫主要包含三信方面:對處理器硬件單元的操作,比如對微引擎內部的本地內存(localmemory)、臨界區(criticalsections)操作等;協議頭的解析函數,如IPv4、IPv6協議等;哈希單元的查找,CRC等。
(4)微模塊基本設施庫
微模塊基本設施庫(microblocksinfrastructurelibrary)提供了訪問暫存包描述符的API,DispatchLoop的實現是通過它來完成的。一個DispatchLoop將運行在一個微引擎內部線程之間的多個微模塊組成一個microblock組。關鍵的地方是,DispatchLoop提供了一種多個微模塊之間高效共享包的描述符、包頭信息等重要數據結構的方式,實現了多個微模塊間的數據傳遞。DispatchLoop也提供了向其它DispatchLoop也提供了向其它DispatchLoop和XScale核之間發送和接收包的接口。
(5)資源管理庫
資源管理庫(resourcemanagementlibrary)是XScale核的一個軟件組件,它向內核提供了微引擎的API,比如硬件的資源管理接口,大大簡化了硬件初始化的任務,配置和資源的共享;微模塊與核心組件之間的通信API,開發者屏蔽了微引擎與XScale核之間通道的一些細節。
(6)核心組件基本設施庫
核心組件基本設施庫(corecomponentsinfrastructurelibrary)為XScale核心組件設計和構造提供了一些底層的API,同時也提供了組件之間傳遞包和消息的機制。其于核心組件基本設施庫的一個核心組件一般都要包含以下函數:1個初始化函數;1個結束函數;1個或多個包的處理名句柄;1個或多個消息處理句柄。
(7)操作系統服務層
操作系統服務層(operatingsystemserviceslayer)對運行在XScale核上的代碼提供了一個抽象層。開發人員編寫的XScale核心運行代碼包括資源管理庫。應該利用這一層,而不是直接去利用操作系統提供的API,從而提高系統的可移植性。OSSL主要提供了以下幾類接口:線程管理、同步原語、互斥操作、定時器、內存管理和消息日志。
(8)控制平面平臺開發工具包
控制平面的PDK(PlatformDevelopmentKit)為XScale核心組件與運行控制平面的軟件之間提供了接口。它所提供的API編程接口現在是符合國際網絡處理器論壇(NPF)提出的標準的,各種控制平面的網絡協議棧和用它可以很方便的集成進來。
3網絡處理器應用實例
利用IntelIXA可移植框架來實現IntelIXP2400的一個簡單路由轉發系統。數據分組在IXP2400中的流動過程如下:以太網MAC器件接收數據,放入MSD單元的接收緩存當中,向微引擎發出信號,表示數據已經收到,微引擎將接收緩存中數據傳輸到SDRAM,微引擎通過對MSF總線單元的訪問命令將前幾個字節(分組頭)傳送到傳輸寄存器中,微引擎對分組的以太網頭進行修改,而將數據分組寫入發送隊列,然后通知MSF單元將數據分組傳送給適當的MAC器件。圖3所示為典型路由器應用系統中的數據流。
在圖3所示的處理轉發結構中,每一個模塊代表一個微模塊。發送和接收模塊和MSF硬件緊密相關。處理器芯片的MSF總線接口單元中有一對BUFFER,即輸入BUFFER和輸出BUFFER,分別用作接收和發送的緩沖區。開發者通過用這些相應的硬件寄存器,硬件設備可自動進行相應的轉發處理。
圖3
接收線程將自己的信息寫入MSF的FREELIST單元控制豁口,其中包括了線程號、微引擎號與存放接收控制字(RSW)的寄存器地址,等待MSF的信號將數據從RBUFFER中移入SDRAM。發送微模塊要選擇并等待一個有效的TBUFFER,再將數據從SDRAM中移入TBUFFER,并寫入相應的控制寄存器,標識分組要發送的端口,分組的發送由TSM硬件自動完成。
在中間處理包的各個模塊中,代碼首先從便存儲器(SCRATCHPADMEMORY)中將接收線程放入的包信息取出,進行以太網頭的有效性驗證,根據IP頭的信息查找路由表,將以太網頭更新。其中每一個處理都是由一個微模塊來實現的。各個模塊合在一起構成了一個DispatchLoop,各個模塊在便存儲器中共享包描述符信息,其中dlNextBlock全局變量為下一個處理微模塊的標識。DispatchLoop的部分代碼如下(簡略)。
while(1){
dl_source();//從接收線程取下包描述符
if(dlBufHandle==0){//dlBufHandle是Dispatch
//Loop維護的一個全局變量
continue;
}
Ethernet_validate();//驗證這個包是一個有效的以太網頭
Ethernet_strip_header();//去掉以太網頭
Ipv4_five_tuple_class();//進行IPv4classifier的轉發
If(dlNextBlock==IX_DROP){//clNextBlock也是全局變量,表示下一個
Gotodrop;//跳轉到丟棄包的處理模塊
}
Ethernet_add_header();//添加新的以太網頭
D1_sink();//將處理后的包描述符放入發送緩沖區中
Drop:
Dl_BufDrop(dlBufHandle);//丟棄包的處理
}
IntelIXP2400開發平臺中,微代碼的源文件是*.uc格式的,經過預處理生成*.ucp的中間文件,進而進行匯編生成*.list匯編文件。微引擎程序的連接器將匯編程序的多個輸出文件轉變成一個可下載的微程序映像(image)。缺省情況下,連接器生成的微代碼映像文件的擴展名為uof。連接器也可以生成C結構的程序格式,這樣的輸出文件與內核程序一起進行編譯和連接。
Intel提供的資源管理庫中,對微引擎部分的函數提供了接口,可以將uof文件當作Flash文件系統的一個普通文件進行處理。在內核代碼初始化時,將uof文件讀入內存,然后加載。但是如果要作成最終產品時,Intel推薦采用.c格式的文件,并直接鏈入到所開發的內核工程中。
4網絡處理器軟件開發的關鍵環節
基于網絡處理器開發工作的重點是對數據平面代碼的開發,開發者要在以下三個方面進行設計和代碼優化:多線程的任務分配和調度策略;數據結構的定義和存儲分配;分組隊列的管理和調度。
(1)多線程的分配和調度策略
對微引擎和線程分配任務是否合理,是影響系統性能的一個很重要因素。開發人員需要根據具體的網絡應用和硬件平臺的特點來科學合理的分配任務。比如,對一個一般的網絡應用來說,可以分為包的接收、處理、發送幾個階段。對于包的處理階段來說,又可以分成多個階段來執行,每一個階段可以由一個微模塊來執行。這多個微模塊是如何在每個微引擎中分配,就是一個任務分配的問題。如果分配才能使負載盡可能的達到平衡,處理器的資源得到最大效率的利用,這些都要進行研究、分析和實驗。
網絡處理器微引擎基于硬件的靜態多線程調度基礎上,即在一個微引擎內部中的線程調度是由硬件來實現的,通常采用輪詢的策略。不同策引擎的線程間存在多種通信方法,線程之間在數據包處理過程中的同步方式也有多種。因此,開發者根據具體不同應用功能特點,不同數據處理相關功能需求,對圍繞處理器的多個微引擎的并行調度算法進行選擇,以盡可能達到系統負載的平衡。
IntelIXP2400提出了三種網絡處理器數據平面的多線程編程模型:流水模型(contextpipeline)、并行處理模型的順序模式(orderedmode)和亂序的模式(unorderedmode)。在任務的分配方面,Intel正在考慮對現有的微引擎編程語言進行擴展,提出了新的微引擎自動分配任務的編程模型,以加快網絡處理器軟件開發的效率。
(2)數據結構的這義和存儲分配
影響網絡處理器線速轉發的一個最關鍵問題是存儲器的訪問延遲。網絡處理器中往往有多層不同的存儲體(在IXP2400中,就存在寄存器、LocalMemory、ScratchpadMemory、SRAM、SDRAM等不同級別的存儲器,它們的速度差別很大),不同層次的內存用于滿足不同數據結構的需要。另一方面,定義在網絡處理器中的數據結構是非常精密的,比如,一個包頭的描述符(packetdescriptormetadata)。但同時也是非常龐大和復雜,比如包體的信息、路由表和隊列管理的數據結構。舉例來說,開發者在微引擎中定義多個線程共享的變量時,應最先考慮使用全局寄存器,但有時全局寄存器的容量有限,可以考慮LocalMemory。多微引擎共享的變量存放在SRAM中,而DispatchLoop變量存放在便(Scartchpad)中。不同數據結構定義和分配的不同策略都會對系統性能產生較大的影響。
(3)分組調度
網絡處理器是典型的RISC內核的并行實時處理結構,同時存在著大量共享資源,比如內存、總線、SHAC等一些特殊硬件單元,這就必然需要系統對這些共享資源進行調度和仲裁。未來計算機網絡的趨勢是能夠提供多種不同服務,支持多種不同應用需求。提高網絡集成服務支持能力的一個很重要問題就是分組調度算法問題,分組隊列的管理還是實現QoS的基礎。
分組調度及處理算法的核心是鏈路層調度器的算法設計。在一般分組處理的存儲-轉發過程中,設計調度器必然要對分組處理時間進行預測,但處理器在調度器中要精確的獲取并更新這些虛擬時間是十分困難的。這就要根據具體的應用,通過研究數據包的長度、數據類型、處理方式與處理時間之間的關系,提出合理的數據包處理時間預測方案,選擇適當的分組調度算法,達到比較好的系統性能。
5網絡處理器面臨的挑戰
當今的網絡處理咕嘟仍面臨著許多挑戰,例如采用什么技術擴展,如何簡化編程模式等問題都需要進一步研究。數據平面上運行的軟件開發通常僅提供微代碼匯編和低通讀C語言技術,這大大限制了網絡處理器技術的發展和應用。因為缺乏高效的軟件開發支持,軟件問題已經成為網絡處理器應用的一大障礙,必須研究面向網絡處理器系統的高效系統軟件平臺。
網絡處理器微引擎指令的提供非常有限,僅有不足40條,這遠遠不能滿足開發人員的需求,僅用它去構造一些復雜的網絡處理任務不太現實。在Intel提出的網絡處理器開發框架中,給出了一些非常底層的數據平面的函數庫,還給開發者提供了一些面向特定應用的更優化的接口和宏指令集。
目前,開發環境主要由各NP生產廠商提供,微引擎上運行的數據平面只提供微代碼匯編和C語言編譯器支持,有代表性的產品是IntelWorkbench??刂破矫嫔系奶幚砥鲀群?,普遍采用Linux或VxWorks作為操作系統。兩個平面的開發相對獨立,沒有一種統一的開發手段,這給開發者帶來了很大的不便。目前,也沒有特別針對網絡處理特點的操作系統,常見的RTOS由于并不是特別針對網絡處理器的操作系統,因此并不能充分發揮網絡處理器的潛能。
為了滿足下一代Internet服務需求,網絡處理器除了要滿足局域網和廣域網對帶寬的需求增長外,還要能夠以線速對數據、語音以及視頻信號進行排序和處理。網絡處理器官方論壇(NetworkProcessingForum)的成立,加快了網絡處理器接口標準的制定和軟件發展的步伐。
結語
網絡處理器通過十分靈活的體系結構和強大的處理能力,將可編程能力和ASIC的處理能力有機的結合在一起,它的出現是網絡設備開發的一次革命,它的發展必須對傳統ASIC和MPU造成前所未有的沖擊。在今后幾年里,網絡處理器將有著非常巨大的發展空間。本文以IntelIXP2400網絡處理器為例,全面討論了網絡處理器軟件開發技術,并提出網絡處理器軟件開發中的關鍵環節及面臨的主要問題和挑戰。
- 上一篇:農村青年就業創業啟動儀式講話
- 下一篇:DTMF產生器性能分析論文