国产精品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>

      用于在網(wǎng)絡(luò)處理器中動態(tài)排序的系統(tǒng)和方法

      文檔序號:7605220閱讀:385來源:國知局
      專利名稱:用于在網(wǎng)絡(luò)處理器中動態(tài)排序的系統(tǒng)和方法
      技術(shù)領(lǐng)域
      本發(fā)明一般地涉及微處理器系統(tǒng),更具體地說,本發(fā)明涉及多個處理器執(zhí)行指令的順序。
      背景技術(shù)
      高性能計算機系統(tǒng)通常采用多個處理器或中央處理單元(CPU)。每個處理器可訪問共享和/或個人數(shù)據(jù),如存儲在耦合到處理器的存儲器中的程序指令,例如算法。另外,每個處理器可支持一個或多個線程,其中每個線程對應(yīng)于分離的指令或執(zhí)行序列。一種更常用的多處理器體系結(jié)構(gòu)被稱為脈動陣列(systolic array),其中在網(wǎng)格狀拓撲中每個處理器耦合到其最近的鄰居,并且處理器對在其間流動的數(shù)據(jù)執(zhí)行操作序列。一般來說,脈動陣列的處理器以“鎖定步驟(lock-step)”方式操作,其中每個處理器在計算相位和通信相位之間交替。
      脈動陣列通常用于要解決的問題可被分區(qū)為離散的工作單位的情形。在包括單“行”處理器的一維脈動陣列的情形中,每個處理器負責(zé)對輸入數(shù)據(jù)執(zhí)行相異的一組指令以便生成輸出數(shù)據(jù),輸出數(shù)據(jù)隨后被傳遞到陣列的下一個處理器(可能與另外的輸入數(shù)據(jù)一同)。為了使吞吐量最大化,對問題進行劃分從而使得每個處理器需要大致相同的時間量來完成它的那部分工作。以這種方式,新的輸入數(shù)據(jù)可以以等于每個處理器的處理時間的速率被以流水線方式輸入到陣列,其中輸入數(shù)據(jù)被并行處理的單位數(shù)等于陣列中處理器的數(shù)目。通過將更多的處理器加入到陣列中就可以提高性能,只要問題可繼續(xù)被劃分為更小的工作單位即可。一旦達到了劃分極限,就可以通過并行配置多個行來進一步提高處理容量,其中新的輸入數(shù)據(jù)被順序分配到陣列中下一行的第一處理器。
      可有利地采用諸如脈動陣列這樣的多處理器體系結(jié)構(gòu)的一種場合是數(shù)據(jù)通信領(lǐng)域。具體地說,脈動陣列已用于諸如路由器這樣的中間網(wǎng)絡(luò)站點或節(jié)點的轉(zhuǎn)發(fā)引擎中。中間節(jié)點通過一系列端口互連計算機網(wǎng)絡(luò)的通信鏈路和子網(wǎng),以在計算機網(wǎng)絡(luò)的兩個或更多個末端節(jié)點之間進行數(shù)據(jù)交換。末端節(jié)點一般通過根據(jù)預(yù)定義的協(xié)議交換離散分組或幀來進行通信,所述預(yù)定義的協(xié)議例如是傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)或因特網(wǎng)分組交換(IPX)協(xié)議。中間節(jié)點通常使用轉(zhuǎn)發(fā)引擎來處理在各種端口上接收的分組。該處理可包括確定分組的目的地,例如輸出端口,以及將分組放置在與目的地相關(guān)聯(lián)的輸出隊列上。
      中間節(jié)點通常采用輸出隊列來控制放置到計算機網(wǎng)絡(luò)中的分組流。在一般部署中,輸出隊列被配置為先進先出(FIFO)隊列,其中分組被放置(進入隊列)在隊列末尾(尾部),并被從隊列起點(頭部)移除(退出隊列)。放置和移除操作通常必須訪問隊列,這包括向隊列中寫入/從隊列中讀出分組或與分組有關(guān)的信息,如分組頭部。
      在某些中間節(jié)點中,分組由轉(zhuǎn)發(fā)引擎進入隊列/退出隊列。在采用包含多個處理器的轉(zhuǎn)發(fā)引擎的中間節(jié)點中,輸出隊列可被視為共享資源,這意味著多于一個處理器可在給定時間內(nèi)訪問給定隊列。然而,共享資源的一個問題是,由中間節(jié)點按給定順序接收的分組可以按不同的順序來處理和轉(zhuǎn)發(fā)。
      為了解決這個問題,脈動陣列可被配置為保證上下文數(shù)據(jù)處理的先進先出(FIFO)排序。如這里所使用的,上下文數(shù)據(jù)或“上下文”被定義為整個分組,或更優(yōu)選地,分組頭部。根據(jù)FIFO排序,由陣列行的處理器處理的上下文在陣列的行前進之前,必須按照處理器的接收順序完成。每個處理器被分配一個預(yù)定的時間間隔或“相位”,在該時間間隔或“相位”內(nèi)完成其上下文處理。當(dāng)每個處理器在相位內(nèi)完成其上下文處理時,該控制機制是足夠的。然而,如果處理器在相位間隔內(nèi)停止其處理或無法完成其處理,則陣列中的所有處理器也順序停止,以維持FIFO排序。這里,F(xiàn)IFO排序控制機制既懲罰了停止的處理器那一行的處理器,又懲罰了多處理器陣列的剩余行的處理器。
      對于脈動陣列所執(zhí)行的大部分應(yīng)用程序,F(xiàn)IFO排序不是必要的。然而,可能需要FIFO排序來保持彼此之間具有依賴性的上下文的順序。對應(yīng)于相同“應(yīng)用程序流”(或更簡單的說,“流”)的分組通常需要被視為相互具有依賴性。流被定義為具有相同的第三層(如,因特網(wǎng)協(xié)議)源和目的地地址、相同的第四層(如,傳輸控制協(xié)議)端口號以及相同的第四層協(xié)議類型的分組序列。

      發(fā)明內(nèi)容
      簡要地說,本發(fā)明針對一種用于在多線程處理系統(tǒng)的多個線程之間保持順序的系統(tǒng)和方法。在圖示實施例中,處理系統(tǒng)有被組織為一個或多個陣列的多個處理器,每個處理器支持多個線程。處理系統(tǒng)可被放置在中間網(wǎng)絡(luò)設(shè)備處,如路由器的轉(zhuǎn)發(fā)引擎處,以便處理網(wǎng)絡(luò)消息,如分組。排序系統(tǒng)包括向自由線程分配諸如處理接收到的分組這樣的工作的分發(fā)器、跟蹤其中每一個正在處理不同分組的多個線程的相對順序的順序管理器、以及與每個線程相關(guān)聯(lián)的用于加強相對順序的線程客戶端。當(dāng)分組被接收時,其被基于所選的標(biāo)準(zhǔn)或?qū)傩苑峙涞降谝豁樞蚪M,其中所選的標(biāo)準(zhǔn)或?qū)傩岳缡墙邮辗纸M的到達物理接口。在處理給定分組期間,各個線程響應(yīng)于識別其他更詳細的或不同的分組標(biāo)準(zhǔn)或?qū)傩?如),請求重新分配到其他順序組,其中其他更詳細的或不同的分組標(biāo)準(zhǔn)或?qū)傩岳缡欠纸M的網(wǎng)絡(luò)協(xié)議類型的標(biāo)識、其應(yīng)用流、其發(fā)送隧道等。順序管理器優(yōu)選地管理順序組之間線程的切換,并且對于每個順序組,順序管理器和線程客戶端的協(xié)同操作確保了對應(yīng)于該順序組的線程根據(jù)其相對順序處理其分組。
      更具體地說,分發(fā)器優(yōu)選地生成接收的分組的上下文,并選擇該上下文的初始或主組標(biāo)識符(ID)。初始組ID指定了上下文的第一順序組。然后,分發(fā)器標(biāo)識自由線程,并將分組上下文傳遞到該自由線程以進行處理。分發(fā)器還將組ID和分組上下文所分配到的線程ID注冊到順序管理器。在圖示實施例中,順序管理器將該信息存儲在多個表中,這多個表用來生成順序狀態(tài),該順序狀態(tài)指示對于每個組ID,從而對于每個順序組,哪一個線程在該組ID的隊頭(Head of Line,HOL)處。線程客戶端防止其各個線程執(zhí)行某些動作,如訪問諸如存儲器這樣的共享資源,或者釋放正處理的分組,直到線程到達其順序組的HOL為止。但是,線程可以在該線程到達HOL之前執(zhí)行對順序不敏感的動作。此外,線程可以在處理單個分組期間動態(tài)改變順序組。但是,屬于每個順序組的線程被保持了相對于彼此的順序。


      本發(fā)明以下的描述參考附圖,在附圖中圖1是計算機網(wǎng)絡(luò)的框圖,其中計算機網(wǎng)絡(luò)包括互連的通信介質(zhì)和附接到多個末端節(jié)點的子網(wǎng)的集合;圖2是可有利地用于本發(fā)明的諸如網(wǎng)絡(luò)交換機這樣的中間網(wǎng)絡(luò)節(jié)點的示意性框圖;圖3是具有用于分析分組的處理器池的圖2節(jié)點的轉(zhuǎn)發(fā)引擎的部分示意性框圖;圖4是根據(jù)本發(fā)明的優(yōu)選排序系統(tǒng)的示意性圖示;圖5是圖4的排序系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)之間的相互關(guān)系的示意性圖示;以及圖6是圖4的排序系統(tǒng)所實現(xiàn)的狀態(tài)圖的示意性圖示。
      具體實施例方式
      圖1是計算機網(wǎng)絡(luò)100的框圖,計算機網(wǎng)絡(luò)100包括互連的通信介質(zhì)和附接到多個站點(station)的子網(wǎng)絡(luò)的集合。站點一般是計算機,包括末端節(jié)點102、112和中間網(wǎng)絡(luò)節(jié)點200。中間節(jié)點200可以是路由器或網(wǎng)絡(luò)交換機,而末端節(jié)點102、112可以包括個人計算機、工作站、服務(wù)器、個人數(shù)字助理(PDA)等等。子網(wǎng)絡(luò)通常包括局域網(wǎng)(LAN)110和120,盡管本發(fā)明也可有利地用于其他通信介質(zhì)配置,如點對點網(wǎng)絡(luò)鏈路、廣域網(wǎng)(WAN)、無線網(wǎng)絡(luò)等等。網(wǎng)絡(luò)站點之間的通信一般受根據(jù)預(yù)定義的協(xié)議在通信末端節(jié)點之間交換諸如幀或分組這樣的離散網(wǎng)絡(luò)消息的影響,其中預(yù)定義的協(xié)議例如是如因特網(wǎng)協(xié)議(IP)、因特網(wǎng)分組交換(IPX)協(xié)議、AppleTalk協(xié)議、DECNet協(xié)議等等。
      圖2是中間節(jié)點200的示意性框圖,在圖示實施例中,中間節(jié)點200優(yōu)選地是網(wǎng)絡(luò)交換機。交換機通常執(zhí)行第二層(L2)處理功能,如“直通(cut-through)”操作,其中,不必在傳送到目的地之前存儲整個幀。另外,節(jié)點200也實現(xiàn)第三層(L3)轉(zhuǎn)發(fā)操作。但是,應(yīng)當(dāng)注意,中間節(jié)點200也可以被配置為路由器以執(zhí)行L3路由處理。這里所描述的體系結(jié)構(gòu)的特征是能夠?qū)?jié)點200編程以執(zhí)行L2、L3或更高層的操作。為此,節(jié)點200的操作將結(jié)合分組的IP交換來描述,盡管其也可被編程用于其他應(yīng)用程序,如數(shù)據(jù)加密。
      中間節(jié)點200包括多個互連組件,所述多個互連組件包括陣列式的轉(zhuǎn)發(fā)引擎300、諸如外部存儲器(Ext Mem)這樣的各種存儲器280、緩沖和隊列單元(BQU)210和網(wǎng)絡(luò)端口接口卡240。這些組件的操作優(yōu)選地由時鐘模塊270同步地控制,盡管轉(zhuǎn)發(fā)引擎300的陣列式元件也可被可操作地配置為異步動作。在圖示實施例中,時鐘模塊270經(jīng)由時鐘線向節(jié)點200的組件全局地分配其時鐘信號。
      外部存儲器(Ext Mem)280通常包括可由轉(zhuǎn)發(fā)引擎300尋址的隨機訪問存儲器(RAM)存儲單元,其用于存儲被組件訪問的軟件程序和數(shù)據(jù)結(jié)構(gòu)。其一部分一般駐留在存儲器280中并由引擎300所執(zhí)行的操作系統(tǒng),除其他方式外,也可通過調(diào)用支持在節(jié)點200上執(zhí)行的軟件處理的網(wǎng)絡(luò)操作,來功能性地組織節(jié)點200。本領(lǐng)域的技術(shù)人員很清楚,其他存儲器設(shè)備,包括各種計算機可讀介質(zhì),可用于存儲并執(zhí)行程序指令。
      如圖所示,陣列式轉(zhuǎn)發(fā)引擎300耦合到外部存儲器(Ext Mem)資源280,緩沖和隊列單元(BQU)210連接到用于存儲分組的分組存儲器220和用于存儲數(shù)據(jù)結(jié)構(gòu)上分組的頭部的隊列存儲器230,所述數(shù)據(jù)結(jié)構(gòu)例如是鏈接列表,其可被組織為隊列235。BQU 210還包括數(shù)據(jù)接口電路,用于經(jīng)由具有仲裁器255的選擇器電路250將轉(zhuǎn)發(fā)引擎300與多個線路卡240互連。線路卡240例如可包括OC12、OC48和快速以太網(wǎng)(FE)端口,其中每個包括傳統(tǒng)的接口電路,該傳統(tǒng)接口電路并入了信號、電和機械特性以及交換電路,該傳統(tǒng)接口電路需要接口到物理介質(zhì)和運行在該介質(zhì)上的協(xié)議。中間節(jié)點200的一般配置可包括這些接口上的許多輸入/輸出信道,每個信道與隊列存儲器230中的至少一個隊列235相關(guān)聯(lián)。轉(zhuǎn)發(fā)引擎300通常用作交換處理器,其隨著BQU 210實現(xiàn)隊列操作順次修改分組和/或頭部。
      路由處理器260執(zhí)行傳統(tǒng)的路由協(xié)議以與轉(zhuǎn)發(fā)引擎300直接通信。路由協(xié)議通常包括末端節(jié)點之間的拓撲信息交換,以例如基于目的地IP地址確定經(jīng)過網(wǎng)絡(luò)的最優(yōu)路徑。這些協(xié)議提供了路由處理器260用來創(chuàng)建并維護路由表(未示出)的信息。這些表可被加載到外部存儲器280中作為轉(zhuǎn)發(fā)信息基礎(chǔ)(FIB)表,轉(zhuǎn)發(fā)引擎300用轉(zhuǎn)發(fā)信息基礎(chǔ)(FIB)表來執(zhí)行轉(zhuǎn)發(fā)操作。當(dāng)根據(jù)IP交換處理頭部時,引擎300通過利用頭部的IP地址在FIB表中索引來確定向何處發(fā)送分組。轉(zhuǎn)發(fā)操作的執(zhí)行導(dǎo)致頭部的目的地媒體訪問控制(MAC)地址被轉(zhuǎn)發(fā)引擎300重寫以識別分組的輸出端口。
      圖3是轉(zhuǎn)發(fā)引擎300的部分示意性框圖,包括諸如處理器330這樣的處理元件的池340,每個處理元件可被獨立地標(biāo)識,如P0、P1、P2等。處理器330優(yōu)選地由各個處理器間鏈路(未示出)互連,從而使其可以相互通信。每個處理器330優(yōu)選地包括,除了其他以外,多個算術(shù)邏輯單元(ALU)和具有多個通用寄存器的寄存器文件,其中寄存器存儲ALU所處理的中間結(jié)果信息。根據(jù)本發(fā)明,處理器330可被組織為任何有利的部署,如一維(1-D)陣列、網(wǎng)格、樹、立方體、無連接的處理器池等等。還應(yīng)當(dāng)注意,支持多線程執(zhí)行的單個處理器可利用本發(fā)明。
      轉(zhuǎn)發(fā)引擎300還包括輸入緩沖器310和輸出緩沖器380,其中輸入緩沖器310接收要處理的分組(或者可能只是分組頭部),輸出緩沖器380用于在處理完成時接收分組或分組的一部分。耦合到處理器330的池340的是一個或多個存儲器控制器320。處理器330利用存儲器控制器320來訪問外部(EXT)存儲器280。根據(jù)本發(fā)明,轉(zhuǎn)發(fā)引擎300還包括一個或多個分發(fā)器404,例如分發(fā)器404a和404b,以及一個或多個順序管理器408,例如順序管理器408a和408b。在圖示實施例中,對于諸如分發(fā)器404a這樣的每個分發(fā)器404,有對應(yīng)的順序管理器,例如順序管理器408a。如這里所述,在輸入緩沖器310處接收的分組被傳遞到所選的分發(fā)器404,該分發(fā)器404又將每個分組分配到池340中可用的處理器330以進行處理。在優(yōu)選實施例中,所分配的處理器,例如P3,處理各個分組直到完成(包括修改分組頭部),并將其轉(zhuǎn)發(fā)到輸出緩沖器380。此時,處理器P3可用于處理另一個分組。在分組處理期間,處理器330可經(jīng)由存儲器控制器230訪問外部存儲器280。由于在優(yōu)選實施例中每個處理器330支持多線程,因此單個處理器可一次處理多個分組,其中每個分組被分配或指定到不同的線程。
      外部存儲器280被優(yōu)選地組織為一個或多個庫,并利用低延遲動態(tài)隨機訪問存儲器(RLDRAM)設(shè)備實現(xiàn)。但是,本領(lǐng)域技術(shù)人員應(yīng)認(rèn)識到,可以使用其他的存儲器設(shè)備,如同步隨機訪問存儲器(SRAM)等等。外部存儲器280存儲非暫態(tài)數(shù)據(jù)(例如,轉(zhuǎn)發(fā)表、隊列等),非暫態(tài)數(shù)據(jù)被組織為用于處理暫態(tài)數(shù)據(jù)的一系列數(shù)據(jù)結(jié)構(gòu)。所有的外部存儲器280優(yōu)選地都可從池340中的任意處理器330訪問。
      中間節(jié)點200的合適平臺是來自California,San Jose的思科系統(tǒng)公司的7200路由器系列。
      排序機構(gòu)圖4是根據(jù)本發(fā)明的優(yōu)選排序機構(gòu)400和多個處理器330的示意性圖示,其中多個處理器330例如是兩個處理器330,被標(biāo)識為P0和P1。處理器P0有一個或多個線程,例如三個線程402a-c。每個線程402有其自身的資源(未示出)集,如寄存器、一個或多個指令計數(shù)器和本地存儲介質(zhì)。如這里所解釋的,線程可處于自由狀態(tài)中,在該狀態(tài)下,其可用于執(zhí)行工作或可被分配到某個指令序列或過程。通常,所分配的線程在任何給定時刻工作在單個分組(或其一部分)上。排序機構(gòu)400包括分發(fā)器404、每個線程402a-c的線程客戶端406a-c和順序管理器408。另外,分發(fā)器404包括組標(biāo)識符(ID)發(fā)生器410和線程選擇引擎412。而且,每個線程客戶端406有狀態(tài)機引擎422,如這里所述,狀態(tài)機引擎422可在多個狀態(tài)之間轉(zhuǎn)換。順序管理器408包括順序保持引擎414和一個或多個表,如線程表416、組標(biāo)識符(ID)映射表418和順序組表420。
      處理器P1也包括一個或多個線程(未示出)。
      在圖示實施例中,線程表416和順序組表420被存儲在片上存儲器中,如片上SRAM或寄存器中,而組ID映射表418是通過一個或多個內(nèi)容可尋址存儲器(CAM)設(shè)備來實現(xiàn)的。
      本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,分發(fā)器404、線程客戶端406和順序管理器408可利用一個或多個邏輯電路來形成?;蛘撸@些組件可通過一個或多個軟件模塊或庫來實現(xiàn),所述軟件模塊或庫例如駐留在外部存儲器280中,并包括與這里所述的方法有關(guān)的程序指令,該程序指令可由諸如處理器330這樣的一個或多個處理元件來執(zhí)行。其他計算機可讀介質(zhì)也可用于存儲并執(zhí)行這些程序指令。但是,本領(lǐng)域的技術(shù)人員應(yīng)認(rèn)識到,也可用各種硬件和軟件的組合,包括固件,來實現(xiàn)本發(fā)明。
      圖5是放置在順序管理器408處的多個表之間的相互關(guān)系的示意性圖示。每個表至少邏輯上被優(yōu)選地組織為多個列和行,列和行的交叉點定義了用于存儲數(shù)據(jù)或信息的單元或記錄。如圖所示,線程表416優(yōu)選地包括有效性列502、序列號列504、順序組表指針列506和多個行507a-h。組ID映射表418優(yōu)選地包括組ID列508、有效性列510和行511a-h。順序組表420優(yōu)選地有隊頭(HOL)處的當(dāng)前序列(Seq.)號(No.)列512、線程計數(shù)列514、位圖或向量列516和多個行518a-h。位圖516有多個比特位置,例如五個比特位置516a-e,這五個比特位置也被標(biāo)記為“0”到“4”。
      如這里所述,在表418的條目511和表420的條目518之間有一一對應(yīng)關(guān)系。
      基本上,分發(fā)器404將接收的分組分配到自由線程,并向順序管理器408提起注冊,順序管理器408隨后利用注冊來跟蹤對屬于相同順序組的分組進行操作的那些線程的順序。線程客戶端406和順序管理器408協(xié)同操作,以確保工作在相同順序組中的線程402根據(jù)對應(yīng)順序組內(nèi)的線程的相對順序執(zhí)行其分組處理。
      在初始化之后,順序管理器408優(yōu)選地將線程表416和組ID映射表418的每個條目標(biāo)記為無效。
      將線程注冊到新的和現(xiàn)有的順序組如箭頭424所示,需要進行某種處理的分組被分發(fā)器404所接收。應(yīng)當(dāng)理解,這種分組可能來自任意多的源。例如,分組可能來自外部接口或內(nèi)部緩沖器,如入口成形器、再循環(huán)隊列或重排序隊列等。分發(fā)器404可被配置為連續(xù)地監(jiān)控這些源。當(dāng)接收到需要處理的分組時,線程選擇引擎412選擇自由線程,例如線程402b,接收到的分組被分配到該自由線程。線程選擇引擎412可維護自由線程的列表。在識別自由線程之后,分發(fā)器404優(yōu)選地生成分組上下文。在優(yōu)選實施例中,分組上下文包括分組頭部、分組句柄(例如,可由分發(fā)器404或某個其他實體生成的標(biāo)識符)和關(guān)于分組源的信息,如從其接收分組的外部接口或內(nèi)部隊列。
      隨后,組ID發(fā)生器410確定分組所屬的初始或主要順序組。如這里所述,共享公共標(biāo)準(zhǔn)或?qū)傩缘姆纸M優(yōu)選地被分配到相同順序組。此外,如這里所述,分配到相同順序組的分組是以它們被分配到該組的順序來處理的。即,分配到給定順序組的分組在所有以后分配的分組之前被處理,但是在所有先前分配的分組已被處理之后被處理。
      從相同源接收的分組被分配到相同的初始順序組,從而被賦予相同的組ID,其中相同源例如是相同的物理到達接口、相同的再循環(huán)隊列等。組ID定義了處理共享公共標(biāo)準(zhǔn)或?qū)傩圆⒈皇┘右皂樞虻姆纸M的線程集。在圖示實施例中,組ID是通過將屬性或標(biāo)準(zhǔn)類型與特定屬性或標(biāo)準(zhǔn)值連接在一起而產(chǎn)生的自由形式。初始組ID的示例如下所示“到達接口”/接口號“再循環(huán)隊列”/隊列號“內(nèi)部緩沖器”/緩沖器號組ID發(fā)生器410優(yōu)選地以上述格式生成組ID?;蛘撸MID發(fā)生器410可維護列表(未示出),該列表將分組的每個可能的源,如外部接口、內(nèi)部隊列等,與對應(yīng)的組ID值相映射。
      假定接收的分組映射到組ID值“到達接口/0017”。
      然后,分發(fā)器404通過將分配的組ID值和諸如線程402b這樣的所選線程的標(biāo)識符(ID)發(fā)送到順序管理器408,來將分組注冊到順序管理器408,如箭頭426所示。分發(fā)器404還將分組上下文發(fā)送到所選線程402b,如箭頭428所示。引擎414利用在注冊中指定的線程ID執(zhí)行其線程表416的查找。具體地說,每個線程ID索引到線程表416的對應(yīng)行507。假定線程402b索引到線程表416的行502h。在識別出各個行,即行502h之后,順序保持引擎414更新對應(yīng)于有效性列502的單元,以反映出線程402b當(dāng)前有效。然后,引擎414利用在注冊中指定的初始組ID值對組ID映射表418執(zhí)行查找。如果對于指定的組ID值沒有匹配條目,則引擎414優(yōu)選地選擇表418中的自由行或條目,例如行511b,并通過將組ID值,即“到達接口/0017”輸入到對應(yīng)于組ID列508的單元中,將該行分配給這個組ID。引擎414類似地選擇順序組表420中的對應(yīng)條目,例如行518b,并清空對應(yīng)于序列號列512、線程計數(shù)列514和近HOL列516的單元。即,這些單元中的每一個被設(shè)為0。
      當(dāng)在表418和420中創(chuàng)建新的條目后,引擎414重復(fù)其對組ID映射表418的搜索。這一次搜索返回對新創(chuàng)建的條目,即行511b的匹配,條目511b又推斷出順序組表420中的對應(yīng)條目,即行518b。然后,順序保持引擎414給線程分配序列號。在圖示實施例中,給定順序組的每個線程被分配以一個嚴(yán)格遞增的序列號,該序列號是基于線程到達或分配到給定順序組來分配的。從而,線程的序列號指定了其相對于給定順序組中的其他線程的順序。為了分配序列號,引擎414返回線程表416的條目507h,并且將對應(yīng)于序列號列504的單元設(shè)置為HOL處的當(dāng)前序列號加上來自順序組表516的行518b的對應(yīng)于列512和514的各個單元的線程計數(shù)值。這種情況下,兩個值為0,因此行507h的對應(yīng)于列504的序列單元被設(shè)為0。然后,引擎414將對應(yīng)于列506的指針單元設(shè)為指向順序組表420的行518b的指針,如這里所示的值“518b”所示。隨后,引擎414將對應(yīng)于線程計數(shù)列514的行518b的單元遞增1,如圓括號中所示,從而使線程計數(shù)單元反映出與該順序組相關(guān)聯(lián)的激活線程的當(dāng)前數(shù)目。
      每次當(dāng)順序管理器408接收到對于現(xiàn)有順序組ID值的新的注冊時,其就利用所指定的順序組ID值,例如“到達接口/0054”,來索引到組ID映射表418中,并利用匹配條目,例如行511f,來確認(rèn)順序組ID值有效(如對應(yīng)于列510的有效性單元的內(nèi)容所示),并識別順序組表420中該組ID值的對應(yīng)條目,例如行518f。然后,引擎414將來自對應(yīng)于HOL處的當(dāng)前序列號列512和線程計數(shù)列514的單元中的值,即“3”和“5”,加在一起以生成和,即“8”。然后,引擎414訪問線程表416的各個條目,例如行507c,設(shè)置對應(yīng)于列502的有效性單元以指示線程當(dāng)前有效,并且將所計算的和,即“8”,輸入到對應(yīng)列504的序列單元中。引擎414還將對應(yīng)于列506的指針單元加載為指向順序組表420中各個組ID值的條目或行,如這里所示的值“518f”所示。然后,引擎414將表420中對應(yīng)于列514的線程計數(shù)單元遞增1,如圓括號所示。
      通知線程其順序狀態(tài)順序管理器408通過維護表416-420中的信息,來跟蹤線程順序組內(nèi)的每個激活線程的順序。更具體地說,隨著每個線程402注冊到順序管理器408,該線程402被分配以一個唯一的序列號,該序列號存儲在對應(yīng)于線程表416的列504的序列單元中。如上所述,不改變的線程的序列號指定線程在其順序組內(nèi)的相對順序。在優(yōu)選實施例中,注冊到給定順序組的第一線程被分配序列號“0”,第二線程被分配序列號“1”,第三線程被分配序列號“2”,以此類推。另外,在對于給定順序組ID值的表420的條目處,對應(yīng)于列512的HOL處的當(dāng)前序列號單元指示哪一個具體序列號(即哪一個線程)恰好是在各個順序組的HOL處,而對應(yīng)于線程計數(shù)列514的單元標(biāo)識各個順序組的當(dāng)前激活的線程總數(shù)。
      為了確保與相同順序組相關(guān)聯(lián)的線程都以合適的順序執(zhí)行其處理,線程客戶端406阻止或暫停線程402執(zhí)行任何“排序的”任務(wù),除非或直到線程402在各個順序組的隊頭(HOL)為止。而且,當(dāng)在線程表416中反映出的線程被分配的序列號與順序組表420的HOL處的當(dāng)前序列號值相匹配時,認(rèn)為給定線程402處于其順序組的HOL處。隨著每個線程402到達其順序組的HOL處并完成其處理,將該線程402從順序組中移除,并遞增HOL處的當(dāng)前序列號值,從而允許隊中的下一個線程到達HOL。
      在優(yōu)選實施例中,每個線程客戶端406維護其線程402的狀態(tài),該狀態(tài)指示線程在各個順序組中的相對位置。圖6是根據(jù)本發(fā)明的示意性狀態(tài)圖600。在優(yōu)選實施例中,線程402可能處于以下五個可能狀態(tài)中的任何一個移動狀態(tài)602、非隊頭(HOL)狀態(tài)604、近HOL狀態(tài)606、HOL狀態(tài)608和獨立狀態(tài)609。移動狀態(tài)602用于當(dāng)線程移動進入第一順序組或從一個順序組移動到另一個順序組時的情形。移動狀態(tài)602用來處理順序管理器408無法即時響應(yīng)于某些請求的情形。一旦收到來自順序管理器408的關(guān)于已接受請求的指示,線程客戶端406就從移動狀態(tài)602中轉(zhuǎn)換出來。非HOL狀態(tài)604用于當(dāng)線程在順序組中但是當(dāng)前不在該順序組的HOL處的情形。近HOL狀態(tài)606用于當(dāng)線程在順序組中而且在該順序組的HOL的某個預(yù)定義的范圍內(nèi)的情形。HOL狀態(tài)408用于當(dāng)線程在順序組中而且是該順序組的HOL處的線程的情形。獨立狀態(tài)609用于當(dāng)線程不再與順序組相關(guān)聯(lián)的情形。另外,這些狀態(tài)之間的某些轉(zhuǎn)換是允許的。箭頭610-624指示狀態(tài)602-609之間的可允許轉(zhuǎn)換。放置在每個線程客戶端406處的各個狀態(tài)機422響應(yīng)于線程402發(fā)射到順序管理器408的請求,以及響應(yīng)于從順序管理器408接收的順序狀態(tài)通知,使各個線程402在狀態(tài)602-609之間轉(zhuǎn)換。
      如上所述,順序管理器408還經(jīng)由線程客戶端406向線程402提供關(guān)于線程在其順序組內(nèi)的相對順序的信息。優(yōu)選地,順序保持引擎414連續(xù)地生成線程表416中所列出的每個有效線程402的狀態(tài)信息。具體地說,對于表416的每個有效條目507,引擎414首先確定各個線程是否在其順序組的隊頭(HOL)處。如果線程的序列號(存儲在線程表416中)與來自該順序組的順序組表420的HOL處的當(dāng)前序列號值匹配,則線程處于其順序組的HOL處。如果線程處于HOL處,則引擎414生成“HOL”狀態(tài)通知,并將該“HOL”狀態(tài)通知發(fā)射到線程,如箭頭430所指示。如果線程不在HOL處,則引擎414確定其是否在近HOL處。如果線程的序列號在該順序組的順序組表420中所指定的處于HOL處的當(dāng)前序列號的定義的范圍內(nèi),則線程在近HOL處。定義的范圍對應(yīng)于釋放位圖516的長度,在此情況下是五個比特。釋放位圖516跟蹤請求從其順序組中釋放出來,但是還未到達HOL處的線程。如果線程在定義的范圍內(nèi),則引擎414生成“近HOL”狀態(tài)通知,并將該“近HOL”狀態(tài)通知發(fā)射到線程,也如箭頭430所指示。如果線程不在近HOL處,則引擎414生成“非HOL”狀態(tài)通知,并將該“非HOL”狀態(tài)通知發(fā)射到線程。
      理想情況下,釋放位圖516的長度是線程總數(shù)減1。這允許任何線程402在任何時刻請求從其順序組中釋放出去,從而消除了線程客戶端406中“非HOL”狀態(tài)通知以及非HOL狀態(tài)604的必要性。然而,實際的限制,例如邏輯電路上的可用空間,一般要求更小的尺寸。
      響應(yīng)于來自順序保持引擎414的狀態(tài)通知,線程客戶端406處的狀態(tài)機422將線程402在上述狀態(tài)之間轉(zhuǎn)換。例如,當(dāng)線程402從分發(fā)器404接收到要處理的分組上下文時,線程的狀態(tài)機422優(yōu)選地進入移動狀態(tài)602,如箭頭610所指示。假定已經(jīng)有多于五個其他的線程當(dāng)前被分配給相同順序組,則線程客戶端406將會從順序管理器408接收到非HOL狀態(tài)通知。如箭頭612所指示,狀態(tài)機422通過從移動狀態(tài)602轉(zhuǎn)換到非HOL狀態(tài)604來作出響應(yīng)。如果在該線程前的該組ID的激活線程數(shù)目降到或低于5,則線程客戶端406將會從順序管理器408接收到近HOL狀態(tài)通知。作為響應(yīng),狀態(tài)機422從非HOL狀態(tài)604轉(zhuǎn)換到近HOL狀態(tài),如箭頭614所指示。隨后,線程客戶端可接收到HOL狀態(tài)通知,指示線程已到達其順序組的HOL處,并使得狀態(tài)機422轉(zhuǎn)換到HOL狀態(tài)608,如箭頭616所指示。應(yīng)當(dāng)理解,線程402可以從非HOL狀態(tài)604直接轉(zhuǎn)換到HOL狀態(tài)608,如箭頭618所指示。在完成其分組處理后,線程從HOL或近HOL狀態(tài)608、606轉(zhuǎn)換到獨立狀態(tài)609,如箭頭624和622所指示。
      應(yīng)當(dāng)理解,也可用其他狀態(tài)來補充或替代上述狀態(tài)中的任何一個。事實上,本發(fā)明可根本不用任何狀態(tài),或只用兩個狀態(tài),如非HOL狀態(tài)和HOL狀態(tài)。
      當(dāng)線程402需要執(zhí)行有序任務(wù),如訪問諸如存儲器這樣的共享的或全局的資源時,線程402優(yōu)選地例如通過在該線程402上執(zhí)行的微代碼被配置為向其線程客戶端406發(fā)射“等待HOL(Wait_HOL)”原語。響應(yīng)于等待HOL原語,線程客戶端406暫停線程402的進一步活動,直到線程客戶端406從順序管理器408接收到狀態(tài)通知指示線程402已到達其順序組的HOL處為止。一旦接收到HOL狀態(tài)通知,線程客戶端406就取消暫停線程402,從而允許其執(zhí)行有序任務(wù)。
      線程402可在任何時刻執(zhí)行“無序”任務(wù),而不論其在順序組中的當(dāng)前順序如何。為了執(zhí)行無序任務(wù),如確定分組的協(xié)議類型、生成轉(zhuǎn)發(fā)判決、訪問共享的外部存儲器280、重寫分組頭部等等,線程402僅僅執(zhí)行各個任務(wù),而不是發(fā)射等待HOL原語到線程客戶端406。即,根據(jù)本發(fā)明,線程402既可執(zhí)行有序任務(wù),也可執(zhí)行無序任務(wù)。在圖示實施例中,運行或執(zhí)行在線程402上的微代碼自身確定哪些任務(wù)是有序任務(wù),要求線程在順序組的HOL處,以及哪些任務(wù)是無序任務(wù),可在任何時刻執(zhí)行。
      發(fā)射順序組交換請求線程402也可在處理給定分組的同時改變其所屬的順序組。例如,假定在相同外部接口,如接口45上接收一系列分組。如上所述,分發(fā)器404最初將這些分組中的每一個分配到相同順序組,例如順序組“到達接口/0044”,并將其分配到不同的線程402以進行處理。進一步假定在接口45上接收的這一系列分組屬于不同的協(xié)議類型,如因特網(wǎng)協(xié)議(IP)、因特網(wǎng)協(xié)議交換(IPX)、簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)等,并且只有對應(yīng)于相同協(xié)議類型的分組需要相對彼此保持一定的順序。即,在接口45上接收的所有IP分組需要被保持有序,而相對于在接口45上接口IPX和SNMP分組,則可以不按順序處理IP分組。
      如果在其分組的處理期間,線程402確定其分組是IP分組,則線程402優(yōu)選地發(fā)射請求,將其順序組從用于在物理接口45上接收的分組的順序組,即順序組“到達接口/0044”,改變?yōu)橛糜谠谖锢斫涌?5上接收的IP分組的順序組,即順序組“到達接口/0044/協(xié)議類型/IP”。應(yīng)當(dāng)理解,線程402可通過將現(xiàn)有組ID值與新屬性或標(biāo)準(zhǔn)及其對應(yīng)值連接到一起,來生成新的組ID值?;蛘撸€程可訪問存儲在外部存儲器280中的預(yù)定義的數(shù)據(jù)結(jié)構(gòu)。作為響應(yīng),運行在線程402上的微代碼優(yōu)選地生成“交換(Exchange)”原語,并將該原語發(fā)射到其線程客戶端406。線程客戶端406又將交換請求發(fā)射到順序管理器408,如箭頭432所指示。交換請求指定了新的順序組,即,順序組“到達接口/0044/協(xié)議類型/IP”。在圖示實施例中,線程402必須在其當(dāng)前順序組的HOL處,即“到達接口/0044”的HOL處,以發(fā)射交換原語。如果線程402不在HOL處,則當(dāng)其發(fā)射交換原語時,線程客戶端406將停止線程402,直到線程到達HOL。
      一旦接收到交換請求,順序保持引擎414就在線程表416中查找請求線程,以確定線程所屬的當(dāng)前順序組,并取得指向順序組表420的對應(yīng)條目的指針。然后,引擎414將存儲在對應(yīng)于列512的HOL處的當(dāng)前序列號單元中的值遞增1,以指示該順序組中的下一個線程目前在HOL處,并將存儲在對應(yīng)于列514的線程計數(shù)單元中的值遞減1,以指示該順序組少了一個激活線程,即發(fā)射交換請求的線程。隨后,引擎414檢查該順序組條目的釋放位圖。如果釋放位圖的最左端比特,即條目516a被斷言,例如被設(shè)為“1”,則指示順序中的下一個線程已預(yù)先請求被從其順序組中釋放出來。這種情況下,引擎414將釋放位圖往左移1位(也稱為填充0操作),遞增對應(yīng)于列512的HOL處的當(dāng)前序列號單元,并將對應(yīng)于列514的線程計數(shù)單元遞減1。引擎414重復(fù)這些步驟,直到釋放位圖516的最左端比特516a為0。
      在從其當(dāng)前順序組中移除目標(biāo)線程后,引擎414將線程加到新的順序組,即,順序組“到達接口/0044/協(xié)議類型/IP”。具體地說,引擎414利用在交換請求中指定的組ID值,來執(zhí)行對組ID映射表418的查找。如果沒有匹配條目,則創(chuàng)建新的條目,如上結(jié)合注冊過程所述。如果發(fā)現(xiàn)新的順序組的條目,則引擎414返回到對應(yīng)于目標(biāo)線程402的線程表416的條目,并將對應(yīng)于列504的序列號單元設(shè)為HOL處的當(dāng)前序列號的值加上來自順序組“到達接口/0044/協(xié)議類型/IP”的順序組表516中條目的線程計數(shù)單元的值。然后,引擎414將對應(yīng)于目標(biāo)線程的列506的指針單元設(shè)為指向新順序組的順序組表420的條目或行的指針。隨后,引擎414將對應(yīng)于列514的線程計數(shù)單元遞增1。
      目標(biāo)線程目前是新順序組的成員。其可在任何時刻執(zhí)行無序任務(wù),但是在執(zhí)行任何有序任務(wù)之前必須等到其到達新順序組的HOL處。
      為了防止競爭狀態(tài),線程402試圖通過發(fā)射后續(xù)請求進一步改變或查詢其順序組的努力會被線程客戶端406停止,直到經(jīng)由確認(rèn)(ACK)總線434確認(rèn)當(dāng)前請求后為止。
      應(yīng)當(dāng)理解,對線程可改變順序組的次數(shù)沒有限制。一般,每次當(dāng)線程402發(fā)射交換請求時,共享標(biāo)準(zhǔn)或?qū)傩缘牧6然蛟敿毘潭仍龃?。即,隨著線程402揭示分組的新的或另外的標(biāo)準(zhǔn)或?qū)傩?,進入了新的順序組。組ID的示例性序列如下所示。
      (1)到達接口/0044(2)到達接口/0044/協(xié)議類型/IP(3)到達接口/0044/協(xié)議類型/IP/應(yīng)用程序流/源地址,目的地地址,源端口,目的地端口,協(xié)議類型(4)發(fā)送接口/0071此外,線程在新順序組中的位置是基于向順序管理器408發(fā)射交換請求的時間,如上所述,這要求線程在其當(dāng)前順序組的HOL處。
      應(yīng)當(dāng)理解,可以基于可由兩個或更多個分組共享的任何選定標(biāo)準(zhǔn)或?qū)傩裕瑏斫㈨樞蚪M。例如,分組的初始或主順序組可取決于接收分組的物理接口,如時分復(fù)用(TDM)信道、多鏈路信道、電路等。后續(xù)的順序組可基于接收分組的邏輯接口,如虛擬局域網(wǎng)(VLAN)、虛擬信道(VC)、或數(shù)據(jù)鏈路連接標(biāo)識符(DLCI)。后續(xù)順序組的其他標(biāo)準(zhǔn)或?qū)傩园ǖ竭_隧道接口、第三層(L3)協(xié)議類型、發(fā)送邏輯接口、發(fā)送隧道等等。
      還應(yīng)當(dāng)理解,不同于從分組自身導(dǎo)出的某些另外細節(jié),區(qū)分兩個或更多個順序組的標(biāo)準(zhǔn)或?qū)傩钥梢允遣襟E或操作。例如,處理在相同接口上接收的IP分組的線程可能都需要順序訪問多個,例如三個不同的共享資源,并且/或者它們可能需要順序地多次訪問相同的共享資源。這種情況下,可建立下面的順序組。
      (1)到達接口/044/協(xié)議類型/IP/步驟/001(2)到達接口/044/協(xié)議類型/IP/步驟/002(3)到達接口/044/協(xié)議類型/IP/步驟/003如圖所示,唯一區(qū)分這三個順序組的屬性或標(biāo)準(zhǔn)是正執(zhí)行的具體步驟,例如要訪問的具體共享資源。當(dāng)作為第一順序組一部分的線程到達HOL時,其訪問對應(yīng)于步驟001的共享資源。然后,線程改變到第二順序組,并且當(dāng)其到達該順序組的HOL時,其訪問對應(yīng)于步驟002的共享資源,依次類推。
      本領(lǐng)域的技術(shù)人員應(yīng)認(rèn)識到,在定義順序組時也可采用其他的這種標(biāo)準(zhǔn)或?qū)傩浴?br> 發(fā)射順序組釋放請求當(dāng)線程402完成其有序分組處理時,線程402優(yōu)選地生成“釋放”原語,并將該原語發(fā)射到其線程客戶端406。然后,線程客戶端發(fā)射釋放請求到順序管理器408。在圖示實施例中,如果線程402處于HOL狀態(tài)608或近HOL狀態(tài)606,則其只能發(fā)射“釋放”原語。如果線程不在其中任何一種狀態(tài),則其線程客戶端406會響應(yīng)于“釋放”原語而暫停線程402,直到其到達其中任何一種狀態(tài)。一旦釋放請求被發(fā)射到順序管理器408,線程客戶端406就將線程402移動到獨立狀態(tài)609。
      響應(yīng)于釋放請求,順序保持引擎414在線程表416中查找目標(biāo)線程,并使用列516的單元中的指針來標(biāo)識順序組表420中的對應(yīng)條目。此時,順序保持引擎414還將該線程在線程表416中的條目標(biāo)記為無效。如果線程的序列號與順序組表420處的當(dāng)前序列號匹配,即指示線程在該順序組的HOL處,則引擎414從順序組中移除線程。具體地說,引擎414將存儲在對應(yīng)于列512的HOL處的當(dāng)前序列號單元中的值遞增1,以指示該順序組中的下一個線程目前處于HOL,并將存儲在對應(yīng)于列514的線程計數(shù)單元中的值遞減1,以指示發(fā)射釋放請求的線程不再是該順序組的成員。隨后,引擎414檢查該順序組條目的釋放位圖。如果釋放位圖的最左端比特,即條目516a被斷言,例如被設(shè)為“1”,則引擎414執(zhí)行填充0操作,如上所述。
      如果線程的序列號與該順序組的HOL處的當(dāng)前序列號不匹配,則引擎414將線程加到釋放位圖。具體地說,引擎414通過將線程的序列號減去來自對應(yīng)于列512的單元的HOL處的當(dāng)前序列號值,來計算線程在釋放位圖中的位置。然后,考慮最左端釋放比特516a作為差別“1”的情況,引擎414為發(fā)射釋放請求的線程選擇釋放位圖516中的比特位置。假定所計算的差別為5。這種情況下,引擎414選擇第五比特位置,即單元516e。然后,引擎414斷言釋放位圖516的所選比特位置516e。
      在發(fā)射釋放原語后,線程可執(zhí)行不需要排序的任何分組后處理任務(wù),如統(tǒng)計計算、資源清掃等。一旦完成任何這種分組后處理任務(wù),線程402就優(yōu)選地發(fā)射“自由線程(Free Thread)”原語到其線程客戶端406。線程客戶端406通過暫停線程并通知分發(fā)器404線程可用來作出響應(yīng)。此時,分發(fā)器404可分配新的分組到線程402以進行處理。
      線程402可選擇發(fā)射自由線程原語,而不需要首先發(fā)射釋放原語,即線程不在獨立狀態(tài)609中。這種情況下,線程客戶端406會自動地發(fā)射釋放請求到順序管理器408。如果線程不在HOL或近HOL狀態(tài),則線程客戶端406將暫停線程,并延遲發(fā)送釋放請求到順序管理器408的操作,直到其到達HOL或近HOL狀態(tài)。
      如圖所示,利用本發(fā)明,后接收的屬于一個順序組的分組不會被停止,直到從某些其他順序組先接收的分組完成為止。從而,彼此獨立的分組允許在處理期間相互傳遞。
      在本發(fā)明的另一方面中,等待到達其當(dāng)前順序組的HOL處的線程402可將其當(dāng)前分組推入隊列,并繼續(xù)執(zhí)行其他任務(wù)或工作。具體地說,對于每個可能的順序組優(yōu)選地建立分離的隊列。隊列可添加于順序組表420的行后。等待到達HOL的線程可將其分組上下文以及任何計算值和/或狀態(tài)信息存儲在隊列中。線程的序列號也被加載到隊列中。然后,線程可自由執(zhí)行其他處理任務(wù)。當(dāng)存儲在隊列中的分組上下文的序列號與HOL處的當(dāng)前序列號匹配時,將分組上下文退出隊列并進行處理。
      應(yīng)當(dāng)理解,本發(fā)明可操作除了分組以外的其他網(wǎng)絡(luò)消息,如幀、信元、分段等,并且術(shù)語網(wǎng)絡(luò)消息試圖包含所有這些消息。
      線程表416優(yōu)選地對于放置在轉(zhuǎn)發(fā)引擎300中的每個線程402都有分離的條目。為了適應(yīng)每個線程都是激活的并且被分配到不同順序組中的情形,組ID映射表418和順序組表420的長度都等于線程的總數(shù)。
      本領(lǐng)域的技術(shù)人員應(yīng)認(rèn)識到,表416-420的信息可以其他方式實現(xiàn),如鏈接列表等。而且,有序組表420不需要包括釋放位圖。
      本領(lǐng)域的技術(shù)人員應(yīng)認(rèn)識到,也可采用其他部署和配置來獲得本發(fā)明的利益和優(yōu)點。例如,由線程客戶端執(zhí)行的功能可并入在順序管理器中。此外,可提供多個分發(fā)器和順序管理器的示例,每個這種示例被分配到轉(zhuǎn)發(fā)引擎處的不同組線程。另外,除了這里所述的中間網(wǎng)絡(luò)節(jié)點的轉(zhuǎn)發(fā)引擎之外,也可以在其他的多線程計算環(huán)境中采用本發(fā)明。
      還應(yīng)當(dāng)理解,可以將一個或多個分發(fā)器和/或順序管理器并入在輸入緩沖器310或轉(zhuǎn)發(fā)引擎300的某些其他組件中。
      前述描述針對本發(fā)明的特定實施例。很清楚,可對所述實施例進行其他變化和修改,而獲得其優(yōu)點中的某些或全部。例如,本發(fā)明可用于除了脈動陣列體系結(jié)構(gòu)以外的其他計算環(huán)境中。實際上,本發(fā)明可用于任何多線程計算機系統(tǒng)中,包括單處理器系統(tǒng)和具有除陣列以外的其他拓撲的多處理器系統(tǒng)。因此,所附權(quán)利要求的目的是覆蓋所有這些在本發(fā)明的真正精神和范圍內(nèi)的變化和修改。
      權(quán)利要求
      1.一種用于保持放置在一個或多個處理器處的多個線程之間的順序的方法,其中每個線程執(zhí)行指令序列,所述方法包括以下步驟以特定順序?qū)⒁唤M線程分配到順序組;將第一個分配的線程視為至少最初在所述順序組的隊頭(Head ofLine,HOL)處;給所述線程組中的每個線程分配單獨的序列號,每個序列號指示各個線程被分配給所述順序組的順序;提供可修改的當(dāng)前HOL序列值,該值指示哪一個序列號當(dāng)前在所述順序組的HOL處;以及使所述線程組中的給定線程暫停執(zhí)行所述給定線程指令序列中的至少一部分,直到如所述可修改HOL序列值所指示的,所述給定線程到達所述順序組的HOL處。
      2.如權(quán)利要求1所述的方法,還包括以下步驟在當(dāng)前處于所述順序組的HOL處的線程完成其指令序列時,修改所述HOL序列值,以指示所述特定順序中的下一個線程。
      3.如權(quán)利要求1所述的方法,其中,一個或多個處理器被放置在計算機網(wǎng)絡(luò)的中間網(wǎng)絡(luò)節(jié)點處,并且所述線程被配置為處理經(jīng)過所述計算機網(wǎng)絡(luò)的網(wǎng)絡(luò)消息。
      4.如權(quán)利要求3所述的方法,其中,分配到所述順序組的所述線程組中的每一個處理共享公共屬性的網(wǎng)絡(luò)消息。
      5.如權(quán)利要求4所述的方法,其中所述中間網(wǎng)絡(luò)節(jié)點具有用于發(fā)送和接收網(wǎng)絡(luò)消息的多個接口,并且第一公共屬性對應(yīng)于接收一組網(wǎng)絡(luò)消息的接口。
      6.如權(quán)利要求1所述的方法,還包括以下步驟在所述組的一個或多個線程到達HOL之前,允許所述一個或多個線程執(zhí)行其各自的指令序列中的至少一部分。
      7.如權(quán)利要求1所述的方法,還包括以下步驟將所選線程從第一順序組切換到第二順序組。
      8.如權(quán)利要求7所述的方法,其中,所述所選線程必須處于所述第一順序組的HOL處,以便被切換到所述第二順序組。
      9.如權(quán)利要求8所述的方法,還包括以下步驟基于所述所選線程被切換到所述第二順序組的順序,給所述所選線程分配一個新的序列號。
      10.如權(quán)利要求1所述的方法,還包括以下步驟為每個線程提供一個線程客戶端,其中每個線程經(jīng)由一個或多個原語與其線程客戶端通信,其中所述一個或多個原語由所述線程發(fā)射到各自的線程客戶端,并且所述原語包括“等待HOL”原語,其使得所述線程客戶端暫停所述線程,直到所述線程到達其順序組的HOL為止。
      11.如權(quán)利要求10所述的方法,其中,所述原語還包括交換原語,其使得所述線程客戶端或者當(dāng)所述線程不在其順序組的HOL處時暫停所述線程,或者當(dāng)所述線程在其順序組的HOL處時將所述線程從第一順序組切換到第二順序組。
      12.如權(quán)利要求10所述的方法,其中,所述原語還包括釋放原語,其使得所述線程客戶端進行以下操作中的一種(1)如果所述線程不在其順序組的HOL處或近HOL處之一,則暫停所述線程,(2)如果所述線程在其順序組的HOL處或近HOL處之一,則使得所述線程被從其順序組中移除。
      13.如權(quán)利要求10所述的方法,其中,所述原語還包括自由線程原語,其使得所述線程客戶端將所述線程變?yōu)榭捎糜诠ぷ鳌?br> 14.在具有用于在計算機網(wǎng)絡(luò)內(nèi)發(fā)送和接收網(wǎng)絡(luò)消息的多個接口的中間網(wǎng)絡(luò)節(jié)點中,一種被配置用來處理在所述中間網(wǎng)絡(luò)節(jié)點處接收的網(wǎng)絡(luò)消息的轉(zhuǎn)發(fā)引擎,所述轉(zhuǎn)發(fā)引擎包括用于處理接收的網(wǎng)絡(luò)消息的多個線程;用于將所述網(wǎng)絡(luò)消息中的至少一部分分配到所述多個線程中的所選若干個的分發(fā)器,其中所述分發(fā)器將每個網(wǎng)絡(luò)消息關(guān)聯(lián)到順序組;與所述多個線程有通信關(guān)系的順序管理器,用于跟蹤與相同順序組相關(guān)聯(lián)的多個線程之間的相對順序;以及與每個線程相關(guān)聯(lián)的線程客戶端,所述線程客戶端被配置為確保所述線程根據(jù)所述線程在所述順序組內(nèi)的相對順序來處理其各自的網(wǎng)絡(luò)消息。
      15.如權(quán)利要求14所述的轉(zhuǎn)發(fā)引擎,其中,所述分發(fā)器將所有共享相互依賴性的網(wǎng)絡(luò)消息關(guān)聯(lián)到相同順序組。
      16.如權(quán)利要求15所述的轉(zhuǎn)發(fā)引擎,其中所述中間網(wǎng)絡(luò)節(jié)點有多個物理接口和多個邏輯接口,并且所述相互依賴性是接收所述網(wǎng)絡(luò)消息的物理接口和邏輯接口中的一種。
      17.如權(quán)利要求14所述的轉(zhuǎn)發(fā)引擎,其中,所述網(wǎng)絡(luò)消息是分組、幀和信元中的一種。
      18.如權(quán)利要求14所述的轉(zhuǎn)發(fā)引擎,其中,所述線程被配置為在所述線程處理其各自的網(wǎng)絡(luò)消息時,發(fā)射請求到所述順序管理器以改變所述線程所關(guān)聯(lián)的順序組。
      19.如權(quán)利要求18所述的轉(zhuǎn)發(fā)引擎,其中所述順序管理器跟蹤哪一個線程在所述相對順序的頭部處,阻止給定線程改變其順序組,直到所述給定線程到達其當(dāng)前順序組的頭部處。
      20.如權(quán)利要求14所述的轉(zhuǎn)發(fā)引擎,其中所述順序管理器跟蹤哪一個線程在所述相對順序的頭部處,所述線程客戶端使所述線程暫停執(zhí)行對所述網(wǎng)絡(luò)消息的至少部分處理,直到線程在所述相對順序的頭部處為止。
      21.如權(quán)利要求19所述的轉(zhuǎn)發(fā)引擎,其中,所述線程在到達所述相對順序的頭部處之前執(zhí)行對所述網(wǎng)絡(luò)消息的至少部分處理。
      22.如權(quán)利要求20所述的轉(zhuǎn)發(fā)引擎,其中,所述順序管理器包括順序組表,其被操作以指示哪一個線程在每個順序組的隊頭處;以及線程表,其指定每個線程在其順序組中的相對順序。
      23.如權(quán)利要求22所述的轉(zhuǎn)發(fā)引擎,其中,當(dāng)每個線程到達其順序組的隊頭并完成對各自的分組的處理時,所述順序管理器操作所述順序組表,以指示所述相對順序中的下一個線程已到達所述順序組的隊頭。
      24.如權(quán)利要求22所述的轉(zhuǎn)發(fā)引擎,其中每個順序組被分配一個組標(biāo)識符(ID)值;并且所述順序管理器還包括組ID表,其將組ID值映射到各個順序組的順序組表中的對應(yīng)條目。
      全文摘要
      一種系統(tǒng)和方法保持多線程處理系統(tǒng)中多個線程之間的順序。可被放置在中間網(wǎng)絡(luò)設(shè)備處的處理系統(tǒng)有多個處理器,每個處理器支持多個線程。排序系統(tǒng)包括分發(fā)器、順序管理器和線程客戶端,其中分發(fā)器向自由線程分配工作,如處理接收的分組,順序管理器跟蹤線程的相對順序,線程客戶端與每個線程相關(guān)聯(lián),用于加強確定的順序。要由處理系統(tǒng)處理的分組被順序管理器基于所選的屬性分配到初始順序組,并且共享相同屬性值的那些分組被分配到相同順序組。在處理期間,線程可響應(yīng)于分組的其他屬性請求重新分配到其他順序組。順序管理器優(yōu)選地管理線程在順序組之間的切換,并確保每個順序組內(nèi)的線程順序處理其分組。
      文檔編號H04L12/56GK1759379SQ200480006197
      公開日2006年4月12日 申請日期2004年2月23日 優(yōu)先權(quán)日2003年3月7日
      發(fā)明者小肯尼思·H·波特 申請人:思科技術(shù)公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1