国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      線速分組并行轉(zhuǎn)發(fā)方法和裝置的制作方法

      文檔序號:7591065閱讀:530來源:國知局

      專利名稱::線速分組并行轉(zhuǎn)發(fā)方法和裝置的制作方法
      技術(shù)領(lǐng)域
      :本發(fā)明涉及分組轉(zhuǎn)發(fā)方法和裝置,特別涉及線速分組并行轉(zhuǎn)發(fā)方法和裝置。
      背景技術(shù)
      :分組轉(zhuǎn)發(fā)是構(gòu)建因特網(wǎng)(Internet)的核心技術(shù)。盡管不同的廠家采用不同的技術(shù)設(shè)計各種型號的交換機和路由器,運行的操作系統(tǒng)和處理性能上也有很大的差別,但最核心的工作相同,就是進行數(shù)據(jù)的分組轉(zhuǎn)發(fā)。分組轉(zhuǎn)發(fā)的過程大體上可以概括為接收分組,提取分組中的目的地址,查找轉(zhuǎn)發(fā)表,決定分組下一跳的出端口,之后將分組從出端口中發(fā)送。對于任一分組,這幾個過程一直在網(wǎng)絡(luò)中持續(xù)下去,直到分組到達目的地。當(dāng)前Internet中的數(shù)據(jù)處理設(shè)備多種多樣,但處理分組的方式可以劃分為兩種(1)非并行的分組處理方式。這是較為傳統(tǒng)的分組處理,系統(tǒng)中的單個中央處理單元(CPU)通過運行分組處理進程來完成分組的轉(zhuǎn)發(fā),這種設(shè)備占領(lǐng)了數(shù)據(jù)產(chǎn)品市場的較大份額,但性能較差。文中針對這種分組處理設(shè)備的不足進行了深刻的剖析;(2)并行的分組處理方式。通過多個處理器并行地進行分組的處理,來提高系統(tǒng)的整體性能提高吞吐量、減少時延、減少丟包率、減少實時業(yè)務(wù)的抖動等等。盡管實現(xiàn)并行分組轉(zhuǎn)發(fā)的方法很多,但能達到線速處理的并行處理方法很少。本文介紹的并行分組處理方法經(jīng)過F-Engine系列設(shè)備的多次測試,證明性能優(yōu)異,并行分組處理能力能達到線速。對分組處理的實現(xiàn)方法研究很多,大部分是采用非并行的分組處理方式。不少的路由器和交換機采用通用的CPU或是嵌入式的CPU(俗稱通訊處理器)進行分組轉(zhuǎn)發(fā)。在這種系統(tǒng)中,系統(tǒng)依靠唯一的處理器資源,運行系統(tǒng)中的多個進程來完成系統(tǒng)中的多項任務(wù),如進程調(diào)度、資源分配、異常處理、系統(tǒng)日志等,分組處理進程只是其中一個。當(dāng)前較為流行的解決方案中,不少是采用MotorolaMPC860或是MotorolaMPC8240進行分組的處理。Cisco2600路由器就是采用MPC860的一個典型的應(yīng)用,與眾不同的是,Cisco2600采用高速緩沖存儲器(Cache)作為分組處理加速器,雖然如此,其10/100M以太網(wǎng)的處理能力仍然不能達到線速處理的能力。類似的實現(xiàn)方案還有D-LinkDI-1750,清華同方TFR2501和TFR2502,等等。QuidwayR3600E、港灣NetHammerM262均是基于MPC8240的實現(xiàn),華為QuidwayR1760則采用了MPC8241進行分組處理。在市場感召力下,Intel也推出了通信處理器IXP425,其分組處理借助于嵌入式、低功耗ARMCPU來完成。IXP425也是通過采用加速的方式來提高分組的處理能力。這些分組處理的實現(xiàn),均有一個共同點,就是CPU參與分組的處理,但處理能力不高,為了提高系統(tǒng)的處理能力,往往借助于Cache或其它的加速處理模塊來提高系統(tǒng)的性能,但性能提升的幅度有限,不能達到線速處理,這種現(xiàn)象是此類設(shè)備的嚴(yán)重缺陷,它們占用了網(wǎng)絡(luò)上的接口資源,同時又讓這些接口成為數(shù)據(jù)轉(zhuǎn)發(fā)的瓶頸。當(dāng)前網(wǎng)絡(luò)上眾多的設(shè)備當(dāng)中,不少的中低端交換機和路由器均是采用單CPU單分組處理進程的方式來完成分組轉(zhuǎn)發(fā)的。非并行的分組處理方法中,分組處理進程在運行一段時間后,可能由于別的原因(如系統(tǒng)中有中斷產(chǎn)生)而被操作系統(tǒng)換出。如此一來,分組處理的進程就被掛起,放在分組緩沖區(qū)中的分組被無限的排隊等候,此時有兩種可能的情況發(fā)生(1)下次分組處理進程被操作系統(tǒng)調(diào)度時,繼續(xù)分組的處理,這時分組已經(jīng)在排隊緩沖區(qū)中等候多時,造成了分組較大的時延,如圖1A和1B所示。圖1A和1B圖解說明了傳統(tǒng)路由器中分組時延的產(chǎn)生,其中圖1A圖示了連續(xù)發(fā)送的兩個語音分組,而圖1B圖示了時延造成語音分組的抖動。用戶端在t=0的時刻,發(fā)送了兩個語音分組,間隔為Δt,在線路中經(jīng)過了一跳(onehop)非并行的分組處理路由器,由于調(diào)度上的原因,分組到達接收端,分組間的間隔變成了χ·Δt,當(dāng)χ·Δt>50ms時,接收端就會明顯地感覺到語音抖動。在基于傳統(tǒng)的分組處理方式上,出現(xiàn)上述現(xiàn)象是很常見的事情。(2)分組處理進程被再次調(diào)度之前,網(wǎng)絡(luò)接口中可能已經(jīng)有大量的分組到來,放在隊列中的分組被“淹沒”,造成大量的分組丟失,這是實時業(yè)務(wù)傳送中造成傳輸質(zhì)量下滑的主要原因。圖2A和2B圖解說明了傳統(tǒng)分組處理設(shè)備中分組的丟失,其中圖2A圖示了在某一時刻系統(tǒng)中的排隊分組,而圖2B圖示了系統(tǒng)中的分組因處理不及時被“淹沒”。在圖2B中,圖2A中的P2,P3,...,Pn分組被P8,P9,...,Pm分組所覆蓋,對于實時語音業(yè)務(wù)而言,接收端就會感覺到語音不連貫;對于TCP連接,有可能造成連接丟失;對于動態(tài)路由協(xié)議,如OSPF,BGP等,長時間的網(wǎng)絡(luò)擁塞,易出現(xiàn)鄰居關(guān)系的丟失,造成路由的翻轉(zhuǎn),網(wǎng)絡(luò)不穩(wěn)定。另外一種較大的缺陷就是系統(tǒng)的吞吐量小。非并行處理的情況下,系統(tǒng)的吞吐量大打折扣。假設(shè)系統(tǒng)中僅有5個進程,其中一個為系統(tǒng)調(diào)度進程,一個為資源管理進程,一個為日志進程,一個為輸入輸出處理進程,另一個是分組處理進程。這樣的系統(tǒng)中,分組處理進程最多只能有20%的CPU時鐘周期在進行分組的處理,其它大部分時間在執(zhí)行系統(tǒng)中的其它處理。這是最簡單的系統(tǒng)模型,在傳統(tǒng)的路由器和交換機中,分組進程能擁有20%的處理機時間已經(jīng)是理論極限值。總之,就是CPU無法專注做好“分組轉(zhuǎn)發(fā)”這一任務(wù),因此系統(tǒng)的吞吐量相對于多轉(zhuǎn)發(fā)引擎上的并行分組處理來說,大為降低,而且整個系統(tǒng)中由于沒有進行轉(zhuǎn)發(fā)平面和控制平面的分離,致使系統(tǒng)的穩(wěn)定性和安全性也較差。綜合上述,主要的弊端有以下幾點(1)系統(tǒng)中CPU資源由于處理各種事務(wù),如內(nèi)核調(diào)度,中斷處理等原因,導(dǎo)致分組處理進程被調(diào)出,致使分組的轉(zhuǎn)發(fā)時延不確定;(2)用于分組處理的時間短,容易導(dǎo)致大量的分組由于來不及及時處理而被丟失;往往使實時業(yè)務(wù)出現(xiàn)抖動,而非實時業(yè)務(wù)如TCP報文丟失,必須進行重傳;(3)系統(tǒng)的吞吐量小,不可能達到線速處理分組的能力;(4)安全性較差。當(dāng)系統(tǒng)中出現(xiàn)非法流量的攻擊,如網(wǎng)絡(luò)上較流行的沖擊波病毒時,系統(tǒng)中的某些進程由于資源耗盡無法繼續(xù)運行,如ARP進程,當(dāng)出現(xiàn)這種狀況時,系統(tǒng)只能借助重新啟動才能恢復(fù)正常;(5)穩(wěn)定性較差。當(dāng)存在設(shè)計上的邏輯錯誤時,如內(nèi)存泄漏,非法地址操作等,就會導(dǎo)致整個系統(tǒng)(轉(zhuǎn)發(fā)平面和控制平面)一起崩潰。
      發(fā)明內(nèi)容本文的目的在于提供一種具有線速轉(zhuǎn)發(fā)能力的并行分組處理方法及裝置。根據(jù)本發(fā)明的一個方面,提供了一種分組轉(zhuǎn)發(fā)方法,用于將來自至少一個入端口的分組數(shù)據(jù)從至少一個出端口轉(zhuǎn)發(fā)出去,該方法包括提供相互分離的控制平面和轉(zhuǎn)發(fā)平面,在控制平面中進行系統(tǒng)控制操作,而在轉(zhuǎn)發(fā)平面中進行分組轉(zhuǎn)發(fā)操作,在轉(zhuǎn)發(fā)平面中提供至少一個并行的轉(zhuǎn)發(fā)引擎,每個轉(zhuǎn)發(fā)引擎上運行多個線程,所述線程包括至少一個接收線程和至少一個發(fā)送線程,由所述接收線程從所述入端口接收分組;以及由所述發(fā)送線程將所接收到的分組并行發(fā)送到出端口。根據(jù)本發(fā)明的另一個方面,提供了一種分組轉(zhuǎn)發(fā)裝置,用于將來自至少一個入端口的分組數(shù)據(jù)從至少一個出端口轉(zhuǎn)發(fā)出去,該裝置包括控制平面,用于進行系統(tǒng)控制操作;轉(zhuǎn)發(fā)平面,和控制平面相互分離,用于進行分組轉(zhuǎn)發(fā)操作,所述轉(zhuǎn)發(fā)平面包括至少兩個轉(zhuǎn)發(fā)引擎,轉(zhuǎn)發(fā)引擎包括接收線程處理單元,用于產(chǎn)生至少一個接收線程,所述接收線程用于從所述入端口接收分組;以及發(fā)送線程處理單元,用于產(chǎn)生至少一個發(fā)送線程,所述發(fā)送線程用于將所接收到的分組并行發(fā)送到出端口。本發(fā)明還提供了一種擴展分組轉(zhuǎn)發(fā)裝置,其通過使用交叉背板,將至少一個根據(jù)本發(fā)明的分組轉(zhuǎn)發(fā)裝置連接在一起。相對于傳統(tǒng)分組轉(zhuǎn)發(fā)方法和裝置的分析,本發(fā)明主要作出的改進有(1)控制平面和轉(zhuǎn)發(fā)平面分離,增強系統(tǒng)的穩(wěn)定性和安全性;轉(zhuǎn)發(fā)線程只在數(shù)據(jù)平面運行,對非法的數(shù)據(jù)流造成的不穩(wěn)定性在該平面中進行了隔離,不會波及到控制平面;同樣,控制平面上的誤操作(如非法地址訪問,內(nèi)存泄漏等)不會波及到轉(zhuǎn)發(fā)平面;(2)采用多處理器進行分組的并行轉(zhuǎn)發(fā);轉(zhuǎn)發(fā)的執(zhí)行單元為線程,相對于進程而言,運行過程中開銷更小,速度更快,效率更高,對存儲空間的訪問采用直接定位的方式進行,而不需要操作系統(tǒng)進行地址分配(如執(zhí)行malloc操作);(3)系統(tǒng)中的進程調(diào)度、中斷處理、資源分配等任務(wù)全部在控制平面完成,轉(zhuǎn)發(fā)平面只是并行地進行分組的處理;所有的轉(zhuǎn)發(fā)線程只是專注完成同一個任務(wù)處理分組;(4)在同一處理器上,轉(zhuǎn)發(fā)線程有多個,當(dāng)其中的一個線程因訪問系統(tǒng)中的資源等待完成,如存放分組,等待信號量時,它立刻進入“休眠”狀態(tài),切換出處理器,讓其它的線程執(zhí)行,進行分組的轉(zhuǎn)發(fā);當(dāng)?shù)却€程的等待事件發(fā)生時,“休眠”的線程立即被調(diào)度線程喚醒;(5)調(diào)度線程非常簡單,在調(diào)度的過程中,占用處理器的時間很短,不同于非并行轉(zhuǎn)發(fā)方法中操作系統(tǒng)的調(diào)度機制,后者需要耗費大量的處理器時間;(6)獲取分組存放位置的方法簡單,直接采用線性映射的方法完成;而非并行方法中,分組的存放位置由操作系統(tǒng)確定,進行分組存放時,必須運行系統(tǒng)中的資源分配進程,整個分組處理過程的效率大大降低。圖1A和1B圖解說明了傳統(tǒng)路由器中分組時延的產(chǎn)生,其中圖1A圖示了連續(xù)發(fā)送的兩個語音分組,而圖1B圖示了時延易造成語音分組的抖動;圖2A和2B圖解說明了傳統(tǒng)分組處理設(shè)備中分組的丟失,其中圖2A圖示了在某一時刻系統(tǒng)中的排隊分組,而圖2B圖示了系統(tǒng)中的分組因處理不及時被“淹沒”;圖3圖示了實現(xiàn)并行分組轉(zhuǎn)發(fā)的系統(tǒng)結(jié)構(gòu);圖4圖示了分組并行通過轉(zhuǎn)發(fā)引擎的邏輯視圖;圖5圖示了并行分組轉(zhuǎn)發(fā)的軟件體系結(jié)構(gòu);圖6圖示了空閑分組描述符隊列;圖7圖示了線程的狀態(tài)切換;圖8圖示了對發(fā)送線程進行的發(fā)送調(diào)度;圖9圖示了基于郵箱的線程間通訊;圖10圖示了發(fā)送調(diào)度線程和發(fā)送線程之間的協(xié)調(diào)調(diào)度工作;圖11圖示了單個分組的處理過程;圖12圖示了并行度的擴展。具體實施例方式下面參考附圖3至圖12詳細描述本發(fā)明的線速分組并行轉(zhuǎn)發(fā)方法和裝置。1.系統(tǒng)的體系結(jié)構(gòu)首先描述本發(fā)明所采用的系統(tǒng)的體系結(jié)構(gòu)。本發(fā)明的算法主要是基于圖3所示的網(wǎng)絡(luò)并行處理器。值得一提的是,本發(fā)明的分組并行轉(zhuǎn)發(fā)算法并不具有平臺依賴性(Platform-independent),稍作修改就可以移植到其它的網(wǎng)絡(luò)處理器上。為了討論的方便,文中的敘述以以太網(wǎng)為例。圖3圖示了實現(xiàn)并行分組轉(zhuǎn)發(fā)的系統(tǒng)結(jié)構(gòu)。圖3中,μP是實現(xiàn)分組并行轉(zhuǎn)發(fā)的微處理器(稱之為轉(zhuǎn)發(fā)引擎),多個微處理器上通過運行多個發(fā)送和接收線程來實現(xiàn)分組的并行處理。與轉(zhuǎn)發(fā)引擎相連的SDRAM是實現(xiàn)存儲轉(zhuǎn)發(fā)的分組緩存,在SRAM中則駐留了為了實現(xiàn)高速分組查找的轉(zhuǎn)發(fā)表(forwardingtable)。本發(fā)明中作為示例采用了SDRAM和SRAM作為第一和第二存儲器,但是應(yīng)該明白,采用其它存儲器也可以實現(xiàn)本發(fā)明的技術(shù)方案。為了進一步減少轉(zhuǎn)發(fā)操作的時間,用于存儲轉(zhuǎn)發(fā)表以及下文中將提到的分組描述符的第二存儲器的存取速度最好比用于存儲分組的第一存儲器快。主控CPU和μP之間提供了信令控制通道(ControlPath),當(dāng)轉(zhuǎn)發(fā)引擎收到協(xié)議分組,如OSPF、BGP報文的時候,通過該通道傳送到主控CPU,由主控CPU進行相關(guān)的處理。以太網(wǎng)接口接收鏈路上的幀,送到接收FIFO(先入先出)(RFIFO)中,等待轉(zhuǎn)發(fā)引擎的進一步轉(zhuǎn)發(fā)處理。分組經(jīng)由轉(zhuǎn)發(fā)引擎并行處理的邏輯視圖可參考圖4描述如下。其中,C表示分組的分類,F(xiàn)表示轉(zhuǎn)發(fā)引擎上多個線程并行地對分組進行轉(zhuǎn)發(fā),S表示在接口上進行分組的發(fā)送。數(shù)據(jù)總線(databus)可以根據(jù)具體的硬件配置進行適配,如我們采用的POS-PHYL3數(shù)據(jù)總線,64位寬,設(shè)定32位用來接收數(shù)據(jù),32位用來發(fā)送數(shù)據(jù),接收和發(fā)送時鐘從60MHZ到104MHZ可配,在我們的系統(tǒng)設(shè)計原形中,我們選用了80MHZ的發(fā)送時鐘和接收時鐘??偩€上的RSOP、REOP和TSOP、TEOP是POS-PHYL3數(shù)據(jù)總線上分組開始和結(jié)束的信號,前者是接收方向上的信號,后者是發(fā)送方向上的信號,考慮到文中的敘述容易辨別這兩對信號,所以后面統(tǒng)稱為SOP和EOP。圖5是并行分組轉(zhuǎn)發(fā)的體系結(jié)構(gòu)。其中接收線程的運行軌跡表明接收線程在進行分組處理時要完成的主要任務(wù)。發(fā)送線程的運行軌跡則表示發(fā)送線程在系統(tǒng)中要完成的發(fā)送任務(wù)。數(shù)據(jù)平面主要進行分組的處理,通常稱之為快速通道。從數(shù)據(jù)平面到控制平面的路徑就是圖3中的控制通道(ControlPath),主要負責(zé)將控制分組從轉(zhuǎn)發(fā)平面發(fā)送到控制平面,并由控制平面進行相應(yīng)的處理。2.數(shù)據(jù)結(jié)構(gòu)接下來,描述本發(fā)明所采用的數(shù)據(jù)結(jié)構(gòu)。分組在系統(tǒng)中被分割成大小相等的數(shù)據(jù)塊(cell),每塊的大小為64字節(jié)。不足64字節(jié)的塊稱為殘塊。在存儲轉(zhuǎn)發(fā)機制中,轉(zhuǎn)發(fā)引擎在將分組發(fā)往出端口之前,分組必須在系統(tǒng)中暫存。為了提高系統(tǒng)的轉(zhuǎn)發(fā)性能,需要迅速地確定分組的存放位置,在訪問完轉(zhuǎn)發(fā)表并進行IP頭的修改之后,又必須快速的提取該分組,按照查找的結(jié)果進行發(fā)送。文獻“SundarIyer,AmrAwadallah,andNickMcKeown,Analysisofapacketswitchwithmemoriesrunningslowerthantheline-rate(有關(guān)使用運行速度低于線路速度的存儲器的分組交換的分析),IEEE/ACMTransactionsonNetworking(TON),volumell,Issue(2),2003.4”的研究顯示,存儲器的存取速度會直接影響到系統(tǒng)的轉(zhuǎn)發(fā)效率。所以為了提高轉(zhuǎn)發(fā)性能,必須減少存儲器的訪問次數(shù),特別是SDRAM的訪問。為達到這一目的,我們定義了分組描述符,作為分組的索引,將其存放在SRAM中。分組描述符的數(shù)據(jù)結(jié)構(gòu)如下structpkt_descriptor{unsignedintport7;/*入端口號*/unsignedintnotused1;/*未使用*/unsignedintsop1;/*分組起始(startofpackets)*/unsignedinteop1;/*分組結(jié)束(endofpackets)*/unsignedintnum_of_bytes6;/*字節(jié)數(shù)*/unsignedintnum_of_cell6;/*cell字節(jié)數(shù)*/unsignedintres10;/*保留*/structpkt_descriptor*p_dsc;/*指向下一個包描述符的指針*/}對于每一個分組,均有一個分組描述符進行表述,以反映其基本情況,分組描述符的num_of_cell和num_of_bytes定義了分組的大小,為(num_of_cell×64+num_of_bytes)字節(jié)。同一個分組的所有數(shù)據(jù)塊(包括殘塊)按照固定的順序存放在一起。SOP被置位,表示數(shù)據(jù)塊是分組的第一個數(shù)據(jù)塊,EOP被置位表示數(shù)據(jù)塊是分組的最后一個數(shù)據(jù)塊(或殘塊)。系統(tǒng)在初始化的時候,所有尚未用于描述分組的空閑分組描述符通過指針鏈接在一起,形成一個隊列,如圖6所示。圖6圖示了空閑分組描述符隊列,其中Header是隊列頭指針,而Tailor是隊列尾指針。分組描述符pkt_dsc在SRAM中的存儲地址和分組在SDRAM中的存放地址pkt_buffer之間存在映射關(guān)系。映射函數(shù)f定義為pkt_buffer=f(pkt_dsc),考慮到映射函數(shù)的效率,通常將其定義為線性函數(shù),使映射過程能在有限的機器周期內(nèi)完成,如pkt_buffer=((pkt_dsc-sram_descriptor_base)<<bufsize_factor)+sdram_base其中,bufsize_factor為分組的大小因子,在實現(xiàn)中我們將每個分組的緩存大小定義為2K。sram_descriptor_base是描述符在SRAM中的基地址,而sdram_base是SDRAM中的基地址。通過將分組描述符在SRAM中的相對地址移位適當(dāng)?shù)姆纸M大小因子bufsize_factor次,獲得分組SDRAM中的相對地址,加上SDRAM中的基地址就是分組在SDRAM中的絕對地址。由于上述的映射函數(shù)是線性函數(shù),所以具有較高的轉(zhuǎn)換效率,能在有限的機器指令周期內(nèi)完成,通過分組描述符的地址來定位分組在SDRAM中的存放位置。值得一提的是,分組描述符的地址空間在SRAM中,這樣安排的目的主要是由于系統(tǒng)會對分組描述符訪問的次數(shù)較多,而SRAM的存取速度較快,在我們的實現(xiàn)中,SRAM與SDRAM的速度相差幾倍以上。除了分組描述符隊列外,還為每個端口均形成了8個由分組描述符組成的發(fā)送隊列,分別對應(yīng)于8個不同的優(yōu)先級。通過上面定義的映射關(guān)系,在完成轉(zhuǎn)發(fā)表的查找后,發(fā)送線程能根據(jù)分組描述符很快地定位到分組存放的位置,將其從發(fā)送端口發(fā)送出去。在接收分組時,從空閑分組描述符隊列中取出一個分組描述符,將分組存放到該分組描述符所對應(yīng)的存放地址,并根據(jù)所接收的分組的狀況,填寫該分組描述符,并在分組接收結(jié)束時,將修改后的分組描述符插入到對應(yīng)的發(fā)送隊列中。在發(fā)送分組時,從發(fā)送隊列中取出一個分組描述符,相應(yīng)地發(fā)送其所對應(yīng)的分組,并在發(fā)送成功之后,將分組描述符回收到空閑分組描述符隊列中。需要注意的是,將分組描述符從隊列中“取出”或“插入”隊列中的操作并不意味著改變分組描述符在SRAM中實際存儲位置,而只是改變其在隊列中指針指向關(guān)系。3.并行轉(zhuǎn)發(fā)處理下面詳細描述轉(zhuǎn)發(fā)引擎上的線程并行轉(zhuǎn)發(fā)分組的處理。在轉(zhuǎn)發(fā)引擎中,使用接收線程將分組從端口的RFIFO中接收到網(wǎng)絡(luò)處理器內(nèi)進行處理,而使用發(fā)送線程將分組從SDRAM中拷貝到TFIFO中。轉(zhuǎn)發(fā)引擎上的線程有三種狀態(tài),運行(executing)、休眠(sleeping)和就緒(ready)。為了達到實時分組處理的要求,線程間采用的是非搶占性的調(diào)度方式。正在執(zhí)行的線程因等待I/O執(zhí)行完成或收到上下文換出信號時進入休眠狀態(tài),當(dāng)I/O執(zhí)行完成或收到上下文換入時則轉(zhuǎn)入就緒狀態(tài)。引擎空閑時,調(diào)度線程將處于就緒狀態(tài)的某個線程進行調(diào)度,轉(zhuǎn)為運行狀態(tài),如圖7所示。圖7圖示了線程的狀態(tài)切換。通常轉(zhuǎn)發(fā)引擎上的每個線程均有自己的上下文寄存器,可以實現(xiàn)零開銷的上下文切換。調(diào)度線程的調(diào)度有兩種,一是接收線程的調(diào)度,它喚醒接收線程,接收狀態(tài)機在相應(yīng)端口的RFIFO中接受分組,接收線程則將分組傳送到分組緩存中進行處理,并等待轉(zhuǎn)發(fā);二是發(fā)送線程的調(diào)度,它喚醒發(fā)送線程,將分組從計算出的分組緩存中移出到出端口的TFIFO中,等待發(fā)送。圖3所示的網(wǎng)絡(luò)處理器中具有多個轉(zhuǎn)發(fā)引擎,轉(zhuǎn)發(fā)引擎并行工作,進行分組的處理。而每個轉(zhuǎn)發(fā)引擎上并發(fā)運行著多個接收線程或發(fā)送線程,這些線程在調(diào)度線程的統(tǒng)一調(diào)度下,進行分組的存儲轉(zhuǎn)發(fā)?;趯崿F(xiàn)上的考慮,調(diào)度線程分為兩部分,即接收調(diào)度(接收調(diào)度線程)和發(fā)送調(diào)度(發(fā)送調(diào)度線程)。調(diào)度線程本身也要占用μP時間片和相應(yīng)的資源,因此,提高調(diào)度的效率和合理安排線程運行的時間片對提高系統(tǒng)的吞吐量至關(guān)重要。在轉(zhuǎn)發(fā)引擎中,這些線程并行地對多個分組進行轉(zhuǎn)發(fā)處理。而就一個分組的轉(zhuǎn)發(fā)處理而言,包括以下幾個步驟。首先,響應(yīng)分組的到達,接收調(diào)度線程喚醒接收線程。接下來,接收線程將分組接收到SDRAM中。然后,發(fā)送調(diào)度線程向發(fā)送線程分配發(fā)送任務(wù)。最后,發(fā)送線程將分組從SDRAM拷貝到TFIFO中。下面以接收調(diào)度線程、接收線程、發(fā)送調(diào)度線程、發(fā)送線程的順序依次描述這幾個線程的處理。需要注意的是,這些線程在轉(zhuǎn)發(fā)引擎中實際上是并行執(zhí)行的。3.1接收調(diào)度線程接收調(diào)度線程輪詢32位的接收控制寄存器Rev_control,當(dāng)寄存器Rev_control中有相應(yīng)的位被置位時,表示對應(yīng)的端口有分組到達。接收調(diào)度線程就進行調(diào)度,喚醒一個接收線程,向其分配接收任務(wù),同時將接收控制寄存器中對應(yīng)的位清零,以便清除已經(jīng)調(diào)度了的接收請求??梢詾槊總€入端口提供對應(yīng)的接收線程,當(dāng)該入端口有分組到達時,如果其所對應(yīng)的接收線程當(dāng)前在休眠的話,就直接將其喚醒。接收線程與入端口也可以不對應(yīng),當(dāng)有分組到達時,就尋找一個休眠的線程,并將其喚醒。其調(diào)度算法如算法1所示。算法1接收調(diào)度算法系統(tǒng)初始化;while(1)讀Rev_control到rec_task中;for(j=0;j<32,j++){if(rec_task&amp;&amp;(1<<j))thread_lock;/*實現(xiàn)調(diào)度過程中線程的原子切換*/clearbitjinRev_control;/*清除已經(jīng)調(diào)度了的接收請求*/signalrec_thread[j];/*喚醒接收線程*/thread_unlock;context_swap;/*上下文切換,接收線程開始工作*/endif}/*endfor*/}/*endwhile*/3.2接收線程(receiving_thread)接收線程主要完成從端口的RFIFO中將分組接收到網(wǎng)絡(luò)處理器內(nèi)進行處理。接收線程由接收調(diào)度線程喚醒,表明某個物理端口有分組到達。接收線程被喚醒后首先使一個分組描述符出列,提供給該分組,計算該分組描述符對應(yīng)的分組存放地址pkt_buffer,并向接收狀態(tài)機發(fā)送一個接收請求,然后繼續(xù)休眠,等待接收狀態(tài)機的回應(yīng)。接收狀態(tài)機的回應(yīng)再次喚醒接收線程,使之開始進行分組的接收處理。接收線程從指定的RFIFO單元讀取數(shù)據(jù)塊存放到SDRAM中。若是IP分組,就同時進行解析,查轉(zhuǎn)發(fā)表,找到輸出端口號,并將分組描述符在相應(yīng)的出端口的輸出隊列中排隊。若不是IP分組,則把分組送到主控CPU上,由主控CPU進行處理。在接收IP分組的同時,修改分組描述符中包的字節(jié)數(shù)等內(nèi)容,以反映分組的狀況,并根據(jù)查找轉(zhuǎn)發(fā)表的結(jié)果將分組描述符插入到相應(yīng)出端口相應(yīng)優(yōu)先級的發(fā)送隊列中。在上述各步驟完成之后,IP分組的接收處理就已經(jīng)完成。接收線程的算法用算法2描述如下。算法2接收算法初始化信號量,寄存器初始化;while(1){sleep;/*等待被接收調(diào)度線程喚醒*/使一個分組描述符(packetdescriptor)出列(dequeue),計算該packetdescriptor對應(yīng)的pkt_buffer;發(fā)送接收請求;/*與接收狀態(tài)機進行分組接收的交互*/sleep;/*切換出處理器,等待被接收狀態(tài)機喚醒*/檢查寄存器接收狀態(tài)(rec_state),如果出錯,就進行出錯處理;if(notSOPandnotEOP)更新packet_descripter中分組的字節(jié)數(shù),并把RFIFO中的數(shù)據(jù)塊寫到分組緩沖(packet_buffer)中的相應(yīng)位置;elifsop則進行分組的處理提取IP報頭(header);驗證IPheader的正確性;出錯,則丟棄;進行IPheader的修正處理,如減TTL,重新計算分組頭校驗和等;提取目的IP;查找轉(zhuǎn)發(fā)表,確定分組的出端口,并提取出端口的MAC地址;修改以太網(wǎng)幀的源MAC和目的MAC,重新進行以太網(wǎng)幀的封裝;將新的分組頭(含以太網(wǎng)幀頭)寫回packet_buffer;endif/*endifof(notSOPandnotEOP)*/ifEOPif(notdiscarded)修改packetdescripter中包的字節(jié)數(shù);根據(jù)查找轉(zhuǎn)發(fā)表的結(jié)果將packetdescripter插入到相應(yīng)優(yōu)先級的發(fā)送隊列;else丟棄處理;endifendif/*endifofEOP*/}/*endofwhile*/3.3發(fā)送調(diào)度線程發(fā)送調(diào)度線程依次從低到高輪詢發(fā)送向量寄存器XMIT_VECTOR,該向量寄存器由接收線程設(shè)置,其中的某一位置位表示對應(yīng)端口的發(fā)送隊列非空。如果發(fā)送調(diào)度線程輪詢到XMIT_VECTOR中的某一位置位,則喚醒一個發(fā)送線程,并為其分配一個發(fā)送任務(wù),指明要發(fā)送的端口,然后繼續(xù)輪詢。如果輪詢到下一位為零,則為下一個發(fā)送線程分配空任務(wù),依次反復(fù)。圖8是發(fā)送調(diào)度線程thd0通過發(fā)送信號1、2、3給發(fā)送線程thd1、thd2、thd3輪流分配發(fā)送任務(wù)的示意圖。如圖8所示,當(dāng)系統(tǒng)中有發(fā)送請求時,發(fā)送調(diào)度線程就向輪到接收發(fā)送任務(wù)的發(fā)送線程發(fā)送喚醒信號,使之就緒,并占領(lǐng)引擎資源開始運行。相應(yīng)的算法如下。算法3發(fā)送調(diào)度算法常量定義;硬件寄存器初始化;初始化三個發(fā)送線程;while(1){輪詢發(fā)送向量寄存器XMIT_VECTOR第(i++mod32)位;if對應(yīng)位為1向(j++modnum_of_XMIT_thd)號發(fā)送線程分配一個發(fā)送任務(wù);喚醒該發(fā)送線程;/*j為發(fā)送任務(wù)計數(shù),循環(huán)分配給線程,num_of_XMIT_thd為發(fā)送線程的數(shù)目*/else向(j++modnum_of_XMIT_thd)號發(fā)送線程分配一個空任務(wù);喚醒該發(fā)送線程;/*j為發(fā)送任務(wù)計數(shù),循環(huán)分配給線程,num_of_XMIT_thd為發(fā)送線程的數(shù)目*/context_swap;......}3.4發(fā)送線程(transmitting_thread)發(fā)送線程主要是以數(shù)據(jù)塊為單位,將數(shù)據(jù)塊從SDRAM中拷貝到TFIFO中。當(dāng)數(shù)據(jù)塊拷貝完畢,就發(fā)送相應(yīng)的發(fā)送控制字,指示發(fā)送狀態(tài)機進行發(fā)送。當(dāng)發(fā)送調(diào)度線程為發(fā)送線程分配了發(fā)送任務(wù)時,發(fā)送線程從發(fā)送隊列中取出一個分組描述符并更新分組描述符隊列結(jié)構(gòu),確定該分組描述符所對應(yīng)的SDRAM中的分組存放位置,并將SDRAM中與該分組描述符對應(yīng)的存放地址暫存的分組拷貝到TFIFO中,同時修改該分組描述符中的長度計數(shù),在發(fā)送結(jié)束后,回收一個分組描述符到空閑分組描述符隊列中。發(fā)送線程的發(fā)送算法用算法4描述如下。算法4發(fā)送算法常量定義,相關(guān)寄存器初始化;while(1){等待發(fā)送任務(wù)并為該任務(wù)設(shè)置輸出隊列(outputqueue),TFIFO單元(element)等信息;ifSOP從發(fā)送隊列中取一個分組描述符并更新分組描述符隊列結(jié)構(gòu);ifEOP/*SOPandEOP*/將最后一個cell傳送到TFIFOelement中;設(shè)置發(fā)送狀態(tài)控制字;等待目標(biāo)端口準(zhǔn)備好,使目標(biāo)TFIFOelement有效;if發(fā)送成功回收一個分組描述符到空閑分組描述符隊列中;else保存端口信息,下次重發(fā);endifelse/*SOPbutnotEOP*/將數(shù)據(jù)寫到TFIFOelement中,設(shè)置發(fā)送狀態(tài)控制字;等待目標(biāo)端口準(zhǔn)備好,使目標(biāo)TFIFOelement有效;if發(fā)送成功更新發(fā)送相關(guān)信息,為發(fā)送下一個數(shù)據(jù)塊作準(zhǔn)備;else保存剩余的element數(shù),狀態(tài)字節(jié)以及buffer偏移量;endifendif/*SOPbutnotEOP*/else/*notSOP*/ifEOP/*notSOPbutEOP*/將最后一個cell傳送到TFIFOelement中;設(shè)置發(fā)送狀態(tài)控制字;等待目標(biāo)端口準(zhǔn)備好,使目標(biāo)TFIFOelement有效;if發(fā)送成功回收一個分組描述符到空閑分組描述符隊列中;更新端口信息;endifelse/*notSOPandnotEOP*/將數(shù)據(jù)傳送到TFIFOelement中;設(shè)置發(fā)送狀態(tài)控制字;等待目標(biāo)端口準(zhǔn)備好,使目標(biāo)TFIFOelement有效;if發(fā)送成功更新端口信息;endifendif/*notSOPandnotEOP*/endif/*endofSOP*/}/*endofwhile*/上面描述了接收調(diào)度線程、接收線程、發(fā)送調(diào)度、發(fā)送線程借助于分組描述符對分組進行并行轉(zhuǎn)發(fā)的處理方法。從上面的分析可以看出,接收調(diào)度和發(fā)送調(diào)度的設(shè)計都很簡潔。這樣處理的主要目的是讓調(diào)度過程盡可能的簡單,較少地占用引擎資源,使引擎上運行的接收和發(fā)送線程有足夠的處理機時間來進行分組的接收和發(fā)送,從而提高系統(tǒng)的吞吐量(throughput),減少分組的轉(zhuǎn)發(fā)時延。需要注意的是,這里所給出的算法1-4只是作為例子來說明本發(fā)明的實施例,而不是用于限制本發(fā)明。本領(lǐng)域一般技術(shù)人員完全可以對本文中所描述的調(diào)度線程、接收線程、發(fā)送調(diào)度、發(fā)送線程的處理做出各種修改和替換。這樣的修改和替換同樣落在本發(fā)明的范圍之內(nèi)。4.線速分組并行轉(zhuǎn)發(fā)裝置上文中描述的線速分組并行轉(zhuǎn)發(fā)方法可以通過,例如,下文中描述的線速分組并行轉(zhuǎn)發(fā)裝置來執(zhí)行。該分組轉(zhuǎn)發(fā)裝置具有相互分離的控制平面和轉(zhuǎn)發(fā)平面??刂破矫嬗糜谶M行系統(tǒng)控制操作,而轉(zhuǎn)發(fā)平面用于進行分組轉(zhuǎn)發(fā)操作。轉(zhuǎn)發(fā)平面包括至少兩個轉(zhuǎn)發(fā)引擎。轉(zhuǎn)發(fā)引擎包括接收線程處理單元,用于產(chǎn)生至少一個接收線程,所述接收線程用于從所述入端口接收分組;發(fā)送線程處理單元,用于產(chǎn)生至少一個發(fā)送線程,所述發(fā)送線程用于將所接收到的分組并行發(fā)送到出端口;接收調(diào)度線程處理單元,用于產(chǎn)生接收調(diào)度線程,以在有分組到達入端口時,向?qū)?yīng)的接收線程分配接收任務(wù);以及發(fā)送調(diào)度線程處理單元,用于產(chǎn)生發(fā)送調(diào)度線程,以在接收所述分組之后,向所述至少一個發(fā)送線程分配發(fā)送任務(wù)。該分組轉(zhuǎn)發(fā)裝置通過線程分配裝置,將所述接收調(diào)度線程以及所述至少一個接收線程分配在某一個引擎上,并將所述發(fā)送調(diào)度線程以及所述至少一個發(fā)送線程分配在另一個引擎上。響應(yīng)接收線程的指令,用于產(chǎn)生描述所接收到的分組的分組描述符的裝置根據(jù)該分組填寫分組描述符。響應(yīng)接收線程的指令,用于將描述要由同一個端口發(fā)送的分組的分組描述符排成發(fā)送隊列的裝置將該分組描述符插入發(fā)送隊列中。用于檢測發(fā)送隊列是否為空的裝置響應(yīng)發(fā)送調(diào)度線程的指令進行其操作。而用于在發(fā)送隊列非空時,從發(fā)送隊列中取出分組描述符,以便向出端口發(fā)送所述分組描述符所描述的分組的裝置響應(yīng)發(fā)送線程的指令進行其操作。使用第一存儲器(SDRAM)在將分組發(fā)送到出端口之前暫存所述分組。在第二存儲器(SRAM)中存儲至少一個分組描述符,用于描述接收到的分組,所述分組描述符與所述分組在第一存儲器中的暫存位置對應(yīng),本實施例中,兩者存在線性映射關(guān)系。相應(yīng)地為該分組轉(zhuǎn)發(fā)裝置提供一個裝置,以在向出端口發(fā)送所述分組時,使用分組描述符確定所述分組在第一存儲器中的暫存位置。該分組轉(zhuǎn)發(fā)裝置具有用于使尚未用于描述分組的至少一個空閑分組描述符形成空閑分組描述符隊列的裝置;用于形成發(fā)送隊列的裝置,所述發(fā)送隊列由用于描述分組的分組描述符組成。所述用于形成發(fā)送隊列的裝置為所述至少一個入端口中的每一個提供了至少一個發(fā)送隊列,各個發(fā)送隊列具有不同的優(yōu)先級。該分組轉(zhuǎn)發(fā)裝置中還提供了用于在從入端口接收到分組之后,從所述空閑分組描述符隊列中取出一個分組描述符,并更新所述空閑分組描述符隊列的結(jié)構(gòu)的裝置;用于將所述分組暫存到所述第一存儲器中與用來對所述分組進行描述的分組描述符相對應(yīng)的暫存地址的裝置;用于修改所取出的分組描述符,以描述所述分組的裝置;以及用于將修改后的分組描述符插入到發(fā)送隊列中的裝置。這些裝置都響應(yīng)接收線程的指令執(zhí)行其操作。該分組轉(zhuǎn)發(fā)裝置中還提供了用于在所述發(fā)送隊列非空時,從發(fā)送隊列中取出一個分組描述符,并更新發(fā)送隊列的結(jié)構(gòu)的裝置;以及用于在成功地發(fā)送了所取出的分組描述符所描述的分組之后,將所述分組描述符回收到所述空閑分組描述符隊列中的裝置。這些裝置都響應(yīng)發(fā)送線程的指令執(zhí)行其操作。5.線程間的通訊引擎上的不同線程可以通過消息的方式進行彼此間的通訊。如,接收線程完成數(shù)據(jù)分組的處理之后,可以進入休眠狀態(tài),等待調(diào)度線程喚醒發(fā)送線程來完成分組的發(fā)送。它也可以通過寫消息的方式,告知發(fā)送線程相關(guān)的發(fā)送事件,當(dāng)發(fā)送線程被喚醒時,從郵箱(mailbox)中取出消息,進行相應(yīng)的處理。存放消息的數(shù)據(jù)結(jié)構(gòu)稱之為郵箱,系統(tǒng)中所有的線程可以通過互斥的方式對郵箱進行訪問。當(dāng)郵箱中有多個消息事件時,就形成了基于郵箱的消息隊列,如圖9所示。圖9圖示了基于郵箱的線程間通訊。消息分成消息頭和消息體,消息頭中指明了發(fā)送線程和接收線程的線程號,而消息體則表明了具體的消息事件。也就是說,在本發(fā)明的線速并行分組轉(zhuǎn)發(fā)裝置中,可以提供線程間通信裝置,其形成上述消息隊列。線程間通信裝置響應(yīng)接收線程的指令,向消息隊列寫入用于告知相關(guān)的發(fā)送事件的消息,并由發(fā)送線程讀取。6.多個μP間的并行性和同一個μP上多個線程的并發(fā)性在實現(xiàn)的時候,必須充分地考慮到系統(tǒng)的開銷。進行跨引擎的線程調(diào)度在實現(xiàn)上是可行的,但造成系統(tǒng)的延時卻是不可預(yù)知。因此,采用靜態(tài)的方法進行線程的引擎調(diào)度,雖然會使系統(tǒng)缺乏靈活性,但可以減少系統(tǒng)在調(diào)度過程中的開銷,至少系統(tǒng)不必花大量的時間來收集當(dāng)前多個引擎的運行狀態(tài)。因此,在進行引擎上的線程分配時,采用先分類再分配的靜態(tài)分配方式,即將接收線程(包括接收調(diào)度線程)分配到相同的引擎上,而將發(fā)送線程(包括發(fā)送調(diào)度線程)分配到相同的引擎上。在上述的調(diào)度算法中,體現(xiàn)了這一分配原則。另外,由于接收任務(wù)相對于發(fā)送任務(wù)來說要復(fù)雜,所以接收線程與發(fā)送線程的數(shù)目之比也直接影響到系統(tǒng)的吞吐量。經(jīng)過多次實驗,我們發(fā)現(xiàn),當(dāng)接收線程與發(fā)送線程的比例為2∶1時,發(fā)送與接收的配合最為協(xié)調(diào),系統(tǒng)獲得的吞吐量最大,分組轉(zhuǎn)發(fā)時延最小。圖10是這一引擎分配原則下,發(fā)送線程的并發(fā)示意圖。圖中,調(diào)度線程T0喚醒T1,進行分組P0發(fā)送任務(wù)的處理;假設(shè)這是P1發(fā)送任務(wù)已經(jīng)到達,T2就被喚醒,執(zhí)行發(fā)送任務(wù)P1,從而通過并發(fā)的方式完成系統(tǒng)中分組的發(fā)送。圖11中描述了分組在系統(tǒng)中的處理過程。其中的接收狀態(tài)機將分組從鏈路上收入到RFIFO中,發(fā)送狀態(tài)機則將分組發(fā)送到與出端口相連的鏈路上??梢钥闯?,分組從進入系統(tǒng)開始,分成幾個不同的處理階段。就單個分組而言,這幾個過程是串行執(zhí)行的,但從多個分組的角度看,分組之間的處理是并行的。圖中Δt1和Δt3是訪問存儲器引起的延遲,Δt2則是由于接收線程進行分組的處理如解析分組頭、查找轉(zhuǎn)發(fā)表等引起的延遲。S0、S1、S2、S3則分別表示整個分組轉(zhuǎn)發(fā)的四個處理過程。其中響應(yīng)接收信號Rcv_signal開始接收處理S1,而響應(yīng)發(fā)送信號Xmit_signal開始發(fā)送處理S2。7.采用本發(fā)明的效果性能分析。網(wǎng)絡(luò)性能的評價通常是用一些具體的參數(shù)值來進行度量的。網(wǎng)絡(luò)帶寬、時延、吞吐率、及丟包率是進行網(wǎng)絡(luò)性能評價的幾個主要參數(shù),也是檢驗并行分組轉(zhuǎn)發(fā)算法的重要依據(jù)。在我們的測試平臺中,主控CPU及轉(zhuǎn)發(fā)引擎的時鐘頻率均為200M,SRAM和SDRAM總線的時鐘頻率均為100M,數(shù)據(jù)總線為64位的POS_PHYL3總線,時鐘為80M。2001年,武漢烽火網(wǎng)絡(luò)公司進行了文中算法的實現(xiàn),并推出了F-engine系列交換和路由設(shè)備。表1-表3是用測試儀表SmartBits測出的性能參數(shù)。表1.10/100M以太網(wǎng)并行分組轉(zhuǎn)發(fā)帶寬/吞吐量的性能測試表2.10/100M以太網(wǎng)并行分組轉(zhuǎn)發(fā)丟包率測試表3.10/100M以太網(wǎng)并行分組轉(zhuǎn)發(fā)的網(wǎng)絡(luò)時延測試根據(jù)上表測試所得到的參數(shù),我們可以進行兩方面的討論。7.1吞吐量分析。整個系統(tǒng)的測試結(jié)果表明,線程間的并發(fā)和引擎間的并行分組處理,使系統(tǒng)獲得了較好的轉(zhuǎn)發(fā)性能,每個端口均達到了線速處理分組能力,時延小,分組丟失率為0。按照我國《高端路由器的測試規(guī)范》,該系統(tǒng)的算法設(shè)計和實現(xiàn)均是成功的。如果以吞吐量作為性能指標(biāo),我們可以算出這種線程間并發(fā)、引擎間并行的分組處理,使整個系統(tǒng)獲得的性能加速比。我們同時測定,非并行分組處理(單線程單引擎對單端口進行轉(zhuǎn)發(fā))時,其吞吐量的值如表4所示。表4.單端口單引擎單線程時系統(tǒng)的吞吐量注上表中單線程的吞吐量測試是在過100M的鏈路上進行的表1-表3中的值是在16端口的情況下單端口的吞吐量。就吞吐量而言,我們定義系統(tǒng)的性能加速比為其中,下標(biāo)L表示分組的長度。因此,不同包長的情況下,系統(tǒng)獲得的加速比為a64=148810&times;16734375=3.24;a128=84459&times;16419921=3.21;]]>a256=45290&times;16234375=3.09;a521=23496&times;16122953=3.06;]]>a1024=11973&times;1663016=3.04;a1518=8127&times;1642819=3.03;]]>從中可以看出,采用多引擎并發(fā)式的并行分組處理可以提高系統(tǒng)的處理能力。我們的實現(xiàn)中采用的是六引擎并行分組轉(zhuǎn)發(fā)方式,從理論上分析,系統(tǒng)應(yīng)該獲得加速比為6的并行處理能力,但基于下列的一些制約因素,致使系統(tǒng)的性能維持在3以上。(1)上述設(shè)計中引入了必不可少的線程調(diào)度,會占用引擎處理機時間,I/O操作的時間往往也較長,因此,當(dāng)線程進行I/O操作時,通常立刻進行線程的切換;操作完成后再進行喚醒并調(diào)度;(2)由于線程間是并行工作的,但使用的系統(tǒng)資源并不是彼此分離的,對許多資源的訪問必須采用互斥的方式進行,如對分組描述符的訪問就必須互斥進行,導(dǎo)致某些線程在對公共資源的訪問時出現(xiàn)互斥等待的現(xiàn)象發(fā)生,從而較低了系統(tǒng)的吞吐量;(3)對存儲器的訪問也是一個重要的制約因素。隨著系統(tǒng)的吞吐量增加,存儲器的制約因素就更加明顯;并成為提高系統(tǒng)瓶頸的主要因素;(4)從64字節(jié)的分組到1518字節(jié)的分組中,我們可以看出,系統(tǒng)的加速必呈現(xiàn)出減小的趨勢,主要原因是,雖然分組數(shù)目的增加,導(dǎo)致分組頭的處理時間加長,但相比之下小的分組存取時間短,因而性能更優(yōu)。(5)線程間的通訊也會占用參與通訊的引擎的處理機的時間,導(dǎo)致它們的工作在一段時間內(nèi)與分組的收發(fā)無關(guān),降低了系統(tǒng)的吞吐量。7.2性能上的擴展。文中所介紹的并行分組處理,可以實現(xiàn)100M、16個端口的全線速轉(zhuǎn)發(fā)。但在大規(guī)模的組網(wǎng)應(yīng)用上,存在端口密度不夠的情形。但我們可以進一步進行并行分組處理的擴展,在系統(tǒng)結(jié)構(gòu)上采用交叉背板(SwitchFabric)相連,文中所述的測試平臺作為分組處理線卡的方式進行拓展,即采用分布并行的方式,使系統(tǒng)的并行處理能力進一步加強,如圖12所示。圖12圖示了并行度的擴展。圖中所示的擴展規(guī)模(即線卡數(shù))受交叉背板容量的制約,擴展的設(shè)備可以用在網(wǎng)絡(luò)核心層上。也就是說,可以采用交叉背板將多個根據(jù)本發(fā)明的分組轉(zhuǎn)發(fā)裝置連接在一起,以作為擴展分組轉(zhuǎn)發(fā)裝置使用。7.3與非并行處理的對照相對于非并行分組處理,吞吐量大、時延小、無抖動是本方法中并行分組處理的主要特征。最為主要的是,系統(tǒng)通過并行處理獲得了線速分組處理的能力。不論分組的大小,時延均較小,最大平均時延與最小平均時延之差不足6μS,而且在滿線速的情況下,分組丟失率為0。另外,簡化調(diào)度機制,提高分組的處理能力,也是本方法的重要特征。8.總結(jié)分組轉(zhuǎn)發(fā)是構(gòu)建Internet網(wǎng)絡(luò)的核心技術(shù)。本文首先分析了傳統(tǒng)的分組處理方式的弊端,然后提出了一個并行的分組轉(zhuǎn)發(fā)方法。文中就分組轉(zhuǎn)發(fā)涉及到的數(shù)據(jù)結(jié)構(gòu)進行了介紹,并就發(fā)送和接收分組的具體實現(xiàn)算法進行了詳細的描述。著重闡述了多個轉(zhuǎn)發(fā)引擎間的并行工作行為和單個引擎上的并發(fā)工作模式。線程調(diào)度是提高系統(tǒng)性能的關(guān)鍵,文中就發(fā)送和接收調(diào)度也作了詳細的介紹。最后討論了在該并行轉(zhuǎn)發(fā)方法的基礎(chǔ)上,設(shè)計的系統(tǒng)的性能,主要是測定了系統(tǒng)的吞吐量、時延、帶寬和丟包率。測試的結(jié)果符合我國《高端路由器的測試規(guī)范》。根據(jù)測定的參數(shù),計算了并行分組轉(zhuǎn)發(fā)方法下系統(tǒng)的加速比,并與理想的并行值進行了對照,分析了兩者之間差異的主要原因。由于篇幅的限制,文中對分組緩沖隊列的管理、發(fā)送隊列的調(diào)度及QOS的控制等略去。盡管參考本發(fā)明的優(yōu)選實施例具體展示和描述了本發(fā)明,但是本領(lǐng)域一般技術(shù)人員應(yīng)該明白,在不脫離所附權(quán)利要求限定的本發(fā)明的精神和范圍的情況下,可以對其進行形式和細節(jié)上的各種修改。權(quán)利要求1.一種分組轉(zhuǎn)發(fā)方法,用于將來自至少一個入端口的分組數(shù)據(jù)從至少一個出端口轉(zhuǎn)發(fā)出去,該方法包括提供相互分離的控制平面和轉(zhuǎn)發(fā)平面,在控制平面中進行系統(tǒng)控制操作,而在轉(zhuǎn)發(fā)平面中進行分組轉(zhuǎn)發(fā)操作,在轉(zhuǎn)發(fā)平面中提供至少一個并行的轉(zhuǎn)發(fā)引擎,每個轉(zhuǎn)發(fā)引擎上運行多個線程,所述線程包括至少一個接收線程和至少一個發(fā)送線程,由所述接收線程從所述入端口接收分組;以及由所述發(fā)送線程將所接收到的分組并行發(fā)送到出端口。2.如權(quán)利要求1所述的分組轉(zhuǎn)發(fā)方法,其特征在于,所述線程還包括接收調(diào)度線程和發(fā)送調(diào)度線程,當(dāng)有分組到達入端口時,所述接收調(diào)度線程向接收線程分配接收任務(wù);所述發(fā)送調(diào)度線程向所述至少一個發(fā)送線程輪流分配發(fā)送任務(wù)。3.如權(quán)利要求2所述的分組轉(zhuǎn)發(fā)方法,還包括將所述接收調(diào)度線程以及所述至少一個接收線程分配在某一引擎上運行;以及將所述發(fā)送調(diào)度線程以及所述至少一個發(fā)送線程分配在另一引擎上運行。4.如權(quán)利要求1所述的分組轉(zhuǎn)發(fā)方法,還包括接收線程填寫用于描述其所接收到的所述分組的分組描述符;將同一個出端口發(fā)送的分組的分組描述符排成發(fā)送隊列;以及發(fā)送線程從發(fā)送隊列中取出分組描述符,以便向出端口發(fā)送所述分組描述符所對應(yīng)的分組。5.如權(quán)利要求1所述的分組轉(zhuǎn)發(fā)方法,還包括接收線程通過寫消息的方式,向發(fā)送線程告知相關(guān)的發(fā)送事件。6.如權(quán)利要求1所述的分組轉(zhuǎn)發(fā)方法,其特征在于,每個線程具有運行、休眠、就緒三種狀態(tài)。7.如權(quán)利要求1-6中任何一個所述的分組轉(zhuǎn)發(fā)方法,還包括在將分組發(fā)送到出端口之前,將分組暫存在第一存儲器中。8.如權(quán)利要求7所述的分組轉(zhuǎn)發(fā)方法,還包括對每一個分組提供分組描述符,所述分組描述符與所述分組在第一存儲器中的暫存位置相對應(yīng);在向出端口發(fā)送所述分組時,使用分組描述符確定所述分組在第一存儲器中的暫存位置。9.如權(quán)利要求8所述的分組轉(zhuǎn)發(fā)方法,其特征在于,所述分組描述符存儲在第二存儲器中,所述第二存儲器的存取速度比所述第一存儲器快。10.如權(quán)利要求9所述的分組轉(zhuǎn)發(fā)方法,其特征在于,所述第一存儲器為SDRAM,而所述第二存儲器為SRAM。11.如權(quán)利要求9所述的分組轉(zhuǎn)發(fā)方法,其特征在于,所述分組在所述第一存儲器中的暫存位置與所述分組描述符在所述第二存儲器中的存儲位置之間的對應(yīng)關(guān)系為線性映射關(guān)系。12.如權(quán)利要求9所述的分組轉(zhuǎn)發(fā)方法,該方法還包括在所述第二存儲器中存儲至少一個分組描述符,每個分組描述符與所述第一存儲器上的分組存儲位置對應(yīng);使尚未用于描述分組的至少一個空閑分組描述符形成空閑分組描述符隊列;形成發(fā)送隊列;在從入端口接收到分組之后,從所述空閑分組描述符隊列中取出一個分組描述符,并自動更新所述空閑分組描述符隊列的結(jié)構(gòu);在將所述分組暫存到所述第一存儲器的同時,修改所取出的分組描述符,以反映所述分組的狀況;經(jīng)查表后,將修改后的分組描述符插入到發(fā)送隊列中,13.如權(quán)利要求12所述的分組轉(zhuǎn)發(fā)方法,還包括為所述每個端口提供至少一個發(fā)送隊列。14.如權(quán)利要求13所述的分組轉(zhuǎn)發(fā)方法,其特征在于所述每個端口的多個發(fā)送隊列具有不同的發(fā)送優(yōu)先級。15.如權(quán)利要求12所述的分組轉(zhuǎn)發(fā)方法,還包括當(dāng)所述發(fā)送隊列非空時,從發(fā)送隊列中取出一個分組描述符,并更新發(fā)送隊列的結(jié)構(gòu);在成功地發(fā)送了所取出的分組描述符所描述的分組之后,將所述分組描述符回收到所述空閑分組描述符隊列中。16.一種分組轉(zhuǎn)發(fā)裝置,用于將來自至少一個入端口的分組數(shù)據(jù)從至少一個出端口轉(zhuǎn)發(fā)出去,該裝置包括控制平面,用于進行系統(tǒng)控制操作;轉(zhuǎn)發(fā)平面,和控制平面相互分離,用于進行分組轉(zhuǎn)發(fā)操作,所述轉(zhuǎn)發(fā)平面包括至少兩個轉(zhuǎn)發(fā)引擎,轉(zhuǎn)發(fā)引擎包括接收線程處理單元,用于產(chǎn)生至少一個接收線程,所述接收線程用于從所述入端口接收分組;以及發(fā)送線程處理單元,用于產(chǎn)生至少一個發(fā)送線程,所述發(fā)送線程用于將所接收到的分組并行發(fā)送到出端口。17.如權(quán)利要求16所述的分組轉(zhuǎn)發(fā)裝置,其中所述轉(zhuǎn)發(fā)引擎還包括接收調(diào)度線程處理單元,用于產(chǎn)生接收調(diào)度線程,以在有分組到達入端口時,向?qū)?yīng)的接收線程分配接收任務(wù);以及發(fā)送調(diào)度線程處理單元,用于產(chǎn)生發(fā)送調(diào)度線程,以在接收所述分組之后,向所述至少一個發(fā)送線程分配發(fā)送任務(wù)。18.如權(quán)利要求17所述的分組轉(zhuǎn)發(fā)裝置,還包括線程分配裝置,用于將所述接收調(diào)度線程以及所述至少一個接收線程分配在某一個引擎上,并將所述發(fā)送調(diào)度線程以及所述至少一個發(fā)送線程分配在另一個引擎上。19.如權(quán)利要求16所述的分組轉(zhuǎn)發(fā)裝置,還包括線程間通信裝置,用于形成消息隊列,以使所述線程之間可以通過發(fā)送消息的方式互相通訊。20.如權(quán)利要求19所述的分組轉(zhuǎn)發(fā)裝置,其特征在于,所述線程間通信裝置響應(yīng)所述接收線程的指令,向消息隊列寫入用于告知相關(guān)的發(fā)送事件的消息,并由發(fā)送線程讀取。21.如權(quán)利要求16所述的分組轉(zhuǎn)發(fā)裝置,還包括用于產(chǎn)生描述所接收到的分組的分組描述符的裝置;用于將描述要由同一個端口發(fā)送的分組的分組描述符排成發(fā)送隊列的裝置;用于檢測發(fā)送隊列是否為空的裝置;以及用于在發(fā)送隊列非空時,從發(fā)送隊列中取出分組描述符,以便向出端口發(fā)送所述分組描述符所描述的分組的裝置。22.如權(quán)利要求16-21中任何一個所述的分組轉(zhuǎn)發(fā)裝置,還包括第一存儲器,用于在將分組發(fā)送到出端口之前暫存所述分組。23.如權(quán)利要求22所述的分組轉(zhuǎn)發(fā)裝置,還包括第二存儲器,其上存儲了至少一個分組描述符,用于描述接收到的分組,所述分組描述符與所述分組在第一存儲器中的暫存位置相對應(yīng);用于在向出端口發(fā)送所述分組時,使用分組描述符確定所述分組在第一存儲器中的暫存位置的裝置。24.如權(quán)利要求23所述的分組轉(zhuǎn)發(fā)裝置,其特征在于,所述第二存儲器的存取速度比所述第一存儲器快。25.如權(quán)利要求24所述的分組轉(zhuǎn)發(fā)裝置,其特征在于,所述第一存儲器為SDRAM,而所述第二存儲器為SRAM。26.如權(quán)利要求23所述的分組轉(zhuǎn)發(fā)裝置,其特征在于,所述第一存儲器中暫存所述分組的位置與所述第二存儲器中存儲所述分組描述符的位置之間的對應(yīng)關(guān)系為線性映射關(guān)系。27.如權(quán)利要求23所述的分組轉(zhuǎn)發(fā)裝置,還包括用于使尚未用于描述分組的至少一個空閑分組描述符形成空閑分組描述符隊列的裝置;用于形成發(fā)送隊列的裝置,所述發(fā)送隊列由用于描述分組的分組描述符組成;用于在從入端口接收到分組之后,從所述空閑分組描述符隊列中取出一個分組描述符,并更新所述空閑分組描述符隊列的結(jié)構(gòu)的裝置;用于將所述分組暫存到所述第一存儲器中與用來對所述分組進行描述的分組描述符相對應(yīng)的暫存地址的裝置;用于修改所取出的分組描述符,以描述所述分組的裝置;用于將修改后的分組描述符插入到發(fā)送隊列中的裝置。28.如權(quán)利要求27所述的分組轉(zhuǎn)發(fā)裝置,其特征在于,所述用于形成發(fā)送隊列的裝置為所述至少一個入端口中的每一個提供了至少一個發(fā)送隊列。29.如權(quán)利要求28所述的分組轉(zhuǎn)發(fā)裝置,其特征在于所述各個發(fā)送隊列具有不同的優(yōu)先級。30.如權(quán)利要求27所述的分組轉(zhuǎn)發(fā)裝置,還包括用于在所述發(fā)送隊列非空時,從發(fā)送隊列中取出一個分組描述符,并更新發(fā)送隊列的結(jié)構(gòu)的裝置;用于在成功地發(fā)送了所取出的分組描述符所描述的分組之后,將所述分組描述符回收到所述空閑分組描述符隊列中的裝置。31.一種擴展分組轉(zhuǎn)發(fā)裝置,包括至少一個如權(quán)利要求16所述的分組轉(zhuǎn)發(fā)裝置;以及交叉背板,用于連接所述至少一個分組轉(zhuǎn)發(fā)的裝置。全文摘要本發(fā)明提供了一種線速分組并行轉(zhuǎn)發(fā)的方法和裝置。其中提供了相互分離的控制平面和轉(zhuǎn)發(fā)平面,轉(zhuǎn)發(fā)平面上具有多個轉(zhuǎn)發(fā)引擎。還提供了兩個存儲器SDRAM和SRAM,其中SDRAM用于暫存分組,而SRAM用于存儲分組描述符。SRAM中的分組描述符與SDRAM中的分組存放地址之間存在線性映射關(guān)系。當(dāng)有分組到達入端口時,接收調(diào)度線程調(diào)度多個接收線程執(zhí)行接收任務(wù);接收線程將分組存放到一個分組描述符所對應(yīng)的存放地址,修改該分組描述符,查找分組轉(zhuǎn)發(fā)表后將其插入發(fā)送隊列;發(fā)送調(diào)度線程調(diào)度多個發(fā)送線程輪流執(zhí)行發(fā)送任務(wù);發(fā)送線程從發(fā)送隊列中取出一個分組描述符,將該分組描述符所對應(yīng)的分組拷貝到TFIFO中。文檔編號H04L12/56GK1677952SQ20041003186公開日2005年10月5日申請日期2004年3月30日優(yōu)先權(quán)日2004年3月30日發(fā)明者董喜明,余少華,王強申請人:武漢烽火網(wǎng)絡(luò)有限責(zé)任公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1