專利名稱:在多線程網(wǎng)絡(luò)處理器中的線程信令的制作方法
背景本發(fā)明涉及網(wǎng)絡(luò)分組處理。
在計算處理中,并行處理是同時發(fā)生事件的信息處理的有效形式。對比于順序處理,并行處理要求在計算機中同時執(zhí)行許多程序。在并行處理器的情況中,并行論包括同時做一件以上的事情。在串行范例中,在單個站或在特定站處執(zhí)行任務(wù)的流水線機器上順序地執(zhí)行所有的任務(wù),與串行范例不同,并行處理提供多個站,每個站能夠執(zhí)行所有的任務(wù)。即,一般地,在問題的相同的或共同的要點上,所有站或多個站同時和獨立地工作。某些問題適合于通過應(yīng)用并行處理而解決。
概要根據(jù)本發(fā)明的一個方面,一種處理網(wǎng)絡(luò)分組的方法包括接收網(wǎng)絡(luò)分組,以及用多個程序線程在網(wǎng)絡(luò)分組上操作,以影響所述分組的處理。
附圖簡述
圖1是使用基于硬件的多線程處理器的通信系統(tǒng)的方框圖。
圖2是圖1的基于硬件的多線程處理器的詳細(xì)方框圖。
圖3是在圖1和2的基于硬件的多線程處理器中使用的微引擎功能單元的方框圖。
圖4是存儲器控制器的方框圖,用于在基于硬件的多線程處理器中所使用的增強帶寬操作。
圖5是存儲器控制器的方框圖,用于在基于硬件的多線程處理器中所使用的有限等待時間的操作。
圖6是在圖1處理器中的通信總線接口的方框圖,描繪在程序線程信令中所使用的硬件。
圖7A-7B是對于理解讀出即清零寄存器的程序線程信令有用的圖形表示和流程圖。
圖8是線程間信令方案的流程圖。
圖9是程序線程狀態(tài)報告過程的流程圖。
說明結(jié)構(gòu)參考圖1,通信系統(tǒng)10包括并行的基于硬件的多線程處理器12。把基于硬件的多線程處理器12耦合到諸如外圍設(shè)備互連(PCI)總線14、存儲器系統(tǒng)16和第二總線18之類的總線。系統(tǒng)10對于可以斷成并行子任務(wù)或功能的任務(wù)是特別有用的?;谟布亩嗑€程處理器12對于與帶寬有關(guān)的而不是與等待時間有關(guān)的任務(wù)是特別有用的?;谟布亩嗑€程處理器12具有多個微引擎22,每個微引擎22具有可根據(jù)任務(wù)同時動作和獨立地工作的多個受硬件控制的程序線程。
基于硬件的多線程處理器12還包括中央控制器20,對于基于硬件的多線程處理器12的其它資源,所述中央控制器有助于裝載微代碼控制,并執(zhí)行其它通用計算機型功能,諸如處理協(xié)議、異常、用于分組處理的額外支持,其中,微引擎?zhèn)鬟f出用于諸如在邊界條件中更詳情處理的分組。在一個實施例中,處理器20是基于Strong Arm(Arm是英國ARM有限公司的注冊商標(biāo))的結(jié)構(gòu)。通用微處理器20具有操作系統(tǒng)。微處理器20可以通過操作系統(tǒng)調(diào)用功能,以在微引擎22a-22f上操作。處理器20可以使用任何支持的操作系統(tǒng),最好是實時操作系統(tǒng)。對于作為Strong Arm結(jié)構(gòu)而實施的核心處理器,可以使用諸如微軟NT實時、VXWorks和μCUS、可在互聯(lián)網(wǎng)上得到的免費軟件操作系統(tǒng)之類的操作系統(tǒng)。
基于硬件的多線程處理器12還包括多個微引擎22a-22f。每一個微引擎22a-22f含有在硬件中的多個程序計數(shù)器,以及與程序計數(shù)器相關(guān)聯(lián)的狀態(tài)。實際上,在每個微引擎22a-22f上可以同時有相應(yīng)的多個程序線程組工作,但是實際上在任何一段時間中只有一個進行操作。
在一個實施例中,有六個微引擎22a-22f,每一個具有處理四個硬件程序線程的能力。六個微引擎22a-22f與共享資源一起操作,所述共享資源包括存儲器系統(tǒng)16和總線接口24和28。存儲器系統(tǒng)16包括同步動態(tài)隨機存取存儲器(SDRAM)控制器26a和靜態(tài)隨機存取存儲器(SRAM)控制器26b。一般使用SDRAM存儲器16a和SDRAM控制器26a來處理大量的數(shù)據(jù),例如,處理來自網(wǎng)絡(luò)分組的網(wǎng)絡(luò)有效負(fù)載。在短等待時、快訪問任務(wù)的網(wǎng)絡(luò)實施(例如,訪問查找表、訪問用于核心處理器20的存儲器等)中,使用SRAM控制器26b和SRAM存儲器16b。
硬件上下文交換使具有唯一程序計數(shù)器的其它上下文在相同的微引擎中的執(zhí)行成為可能。硬件上下文交換還使任務(wù)的完成同步。例如,兩個程序線程可以請求相同的共享資源,例如SRAM。這些獨立功能單元的每一個,例如FBUS接口28、SRAM控制器26a以及SDRAM控制器26b,當(dāng)它們完成來自微引擎程序線程上下文之一所請求的任務(wù)時,就返回報告操作完成的標(biāo)志信令。當(dāng)微引擎接收到該標(biāo)志時,微引擎可以確定要接通哪個程序線程。
作為網(wǎng)絡(luò)處理器(例如路由器),基于硬件的多線程處理器12連接到諸如媒體訪問控制器裝置(例如,10/100BaseT八進制MAC 13a或千兆位以太網(wǎng)裝置13b)之類的網(wǎng)絡(luò)裝置。一般地,作為網(wǎng)絡(luò)處理器,基于硬件的多線程處理器12連接到接收/發(fā)送大量數(shù)據(jù)的任何類型的通信裝置或接口。以并聯(lián)方式在裝置13a、13b中間按選擇路由傳遞網(wǎng)絡(luò)分組的網(wǎng)絡(luò)應(yīng)用中,網(wǎng)絡(luò)處理器可以具有如同路由器10這樣的功能??梢杂没谟布亩嗑€程處理器12對每個網(wǎng)絡(luò)分組獨立地進行處理。
處理器12包括把處理器耦合到第二總線18的總線接口28。在一個實施例中,總線接口28把處理器12耦合到所謂的FBUS 18(FIFO(先進先出)總線)。FBUS接口28負(fù)責(zé)控制處理器12并把它連接到FBUS 18。FBUS 18是64位寬FIFO總線,作為到媒體訪問控制器(MAC)裝置的接口。處理器12包括第二接口(例如,PCI總線接口24),它把駐留在PCI 14總線上的其它系統(tǒng)部件耦合到處理器12。
把功能單元連接到一個或多個內(nèi)部總線。內(nèi)部總線是雙向、32位總線(即,一條總線用于讀出而一條總線用于寫入)。還構(gòu)成基于硬件的多線程處理器12,致使在處理器12中的內(nèi)部總線的帶寬總和超過耦合到處理器12的外部總線的帶寬。處理器12包括內(nèi)部核心處理器總線32,例如,ASB總線(高級系統(tǒng)總線),它把處理器核心20耦合到存儲器控制器26a、26b以及耦合到下述ASB翻譯器30。ASB總線是所謂的AMBA總線的子集,所述AMBA總線是與Strong Arm處理器核心一起使用的。處理器12還包括專用總線34,它把微引擎單元耦合到SRAM控制器26b、ASB翻譯器30以及FBUS接口28。存儲器總線38把存儲器控制器26a、26b耦合到總線接口24和28以及存儲器系統(tǒng)16,所述存儲器系統(tǒng)16包括用于引導(dǎo)程序操作等的快閃ROM(只讀存儲器)16c。
參考圖2,每個微引擎22a-22f包括一個仲裁器,該仲裁器檢查標(biāo)志,以判定操作所根據(jù)的可用程序線程。來自微引擎22a-22f的任何程序線程可以訪問SDRAM控制器26a和SDRAM控制器26b,每一個包括多個隊列,以存儲未確認(rèn)的存儲器訪問請求。隊列或是保留存儲器訪問的次序,或是安排存儲器訪問,以使存儲器帶寬最優(yōu)化。
如果存儲器子系統(tǒng)16實質(zhì)上充滿獨立的存儲器請求,則處理器12可以執(zhí)行存儲器訪問分類。存儲器訪問分類減少隨著對SRAM的訪問而發(fā)生的停滯時間或冒泡。存儲器訪問分類允許處理器12對到存儲器的訪問進行組織,致使寫入的長字符串可以跟隨讀出的長字符串。
訪問分類有助于保持并聯(lián)的硬件上下文程序線程。訪問分類允許隱藏從一個SDRAM存儲體到另一個的預(yù)加載。如果把存儲器系統(tǒng)16b組織成奇數(shù)存儲體和偶數(shù)存儲體,則存儲器控制器26b可以開始預(yù)加載偶數(shù)存儲體。如果在奇數(shù)和偶數(shù)存儲體之間輪流進行存儲器訪問,則預(yù)加載是可能的。通過對存儲器訪問進行排序,以輪流訪問相對著的存儲體,處理器12改進了SDRAM帶寬。此外,可以使用其它最優(yōu)化。例如,在存儲器訪問之前,在可以融合最優(yōu)化的操作處融合最優(yōu)化,通過檢查地址融合打開頁面最優(yōu)化,已打開頁面不重新打開,可以使用鏈接存儲,它允許鄰接的存儲器訪問和刷新機構(gòu)的特殊處理。
FBUS接口28支持MAC裝置支持的每個端口的發(fā)送和接收標(biāo)志,以及表示何時保證業(yè)務(wù)的一個中斷標(biāo)志。FBUS接口28還包括控制器28a,它執(zhí)行來自FBUS 18的輸入分組的標(biāo)頭處理??刂破?8a取出分組標(biāo)頭,并執(zhí)行在SRAM中的微可編程源/目的地/協(xié)議散列查找(用于地址平滑)。如果沒有成功地解答散列,則把分組標(biāo)頭發(fā)送到處理器核心20進行另外的處理。FBUS接口28支持下列內(nèi)部數(shù)據(jù)處理事務(wù)FBUS單元 (共享總線RAM) 到/從微引擎FBUS單元 (經(jīng)由專用總線) 從SDRAM單元寫入FBUS單元 (經(jīng)由Mbus) 讀到SDRAM
FBUS 18是標(biāo)準(zhǔn)的工業(yè)總線,并包括數(shù)據(jù)總線,例如64位寬和對于地址的邊帶控制和讀出/寫入控制。FBUS接口28使用一系列輸入和輸出FIFO29a-29b提供輸出大量數(shù)據(jù)的能力。微引擎22a-22f從FIFO 29a-29b取得來自SDRAM控制器26a的數(shù)據(jù),或命令SDRAM控制器26a把數(shù)據(jù)從接收FIFO(其中,數(shù)據(jù)來自總線18中的一個裝置)轉(zhuǎn)移到FBUS接口28。通過直接存儲器訪問,可以通過存儲器控制器26a把數(shù)據(jù)發(fā)送到SDRAM存儲器16a。類似地,微引擎可以把數(shù)據(jù)從SDRAM 26a轉(zhuǎn)移到接口28,經(jīng)過FBUS接口28輸出到FBUS 18。
在微引擎當(dāng)中分發(fā)數(shù)據(jù)功能。到SRAM 26a、SDRAM 26b和FBUS 28的連接是通過命令請求的。命令請求可以是存儲器請求或FBUS請求。例如,命令請求可以把數(shù)據(jù)從位于微引擎22a中的一個寄存器轉(zhuǎn)移到一個共享資源,例如SDRAM存儲單元、SRAM存儲單元、快閃存儲器或某些MAC地址。把命令送出到每個功能單元以及共享資源。然而,共享資源不需要保持?jǐn)?shù)據(jù)的局部緩沖。而是,共享資源訪問位于微引擎內(nèi)部的分發(fā)數(shù)據(jù)。這使微引擎22a-22f能局部訪問數(shù)據(jù),而不是對在總線上的訪問進行仲裁和有風(fēng)險地競爭總線。用這個特征,對于等待微引擎22a-22f內(nèi)部的數(shù)據(jù)存在0循環(huán)停轉(zhuǎn)。
核心處理器20還可以訪問共享資源。核心處理器20經(jīng)過總線32到SDRAM控制器26a、到總線接口24以及到SRAM控制器26b可以直接進行通信。為了訪問微引擎22a-22f和位于微引擎22a-22f中任何一個處的傳送寄存器,核心處理器20通過總線34上的ASB翻譯器30訪問微引擎22a-22f。ASB翻譯器30執(zhí)行FBUS微引擎?zhèn)魉图拇嫫鞔鎯卧秃诵奶幚砥鞯刂?即,ASB總線)之間的地址翻譯,以致核心處理器20可以訪問屬于微引擎22a-22f的寄存器。
雖然微引擎22可以使用寄存器組來交換數(shù)據(jù),但是還提供暫時存儲器27,以允許微引擎把數(shù)據(jù)寫到存儲器供其它微引擎讀出。把暫時存儲器27耦合到總線34。
微引擎參考圖3,圖中示出微引擎22a-22f的一個示例。微引擎包括控制存儲器70,在一個實施例中,控制存儲器70包括具有1024個32位字的RAM。RAM存儲可通過核心處理器20裝載的微引擎。微引擎22f還包括控制器邏輯72。控制器邏輯包括指令解碼器73和程序計數(shù)器(PC)單元72a-72d。把四個微程序計數(shù)器72a-72d保留在硬件中。微引擎22f還包括上下文事件切換邏輯74。上下文事件邏輯74從例如SRAM 26a、SDRAM 26b或處理器核心20、控制和狀態(tài)寄存器等共享資源中的每一個接收消息(例如,SEQ_#_EVENT_RESPONSE;FBI_EVENT_REPONSE;SRAM_EVENT_RESPONSE;SDRAM_EVENT_RESPONSE;以及ASB_EVENT_RESPONSE)。這些消息提供是否已經(jīng)完成所請求功能的信息。根據(jù)是否已經(jīng)完成程序線程請求的功能和發(fā)出完成信號,程序線程需要等待該完成信號,如果啟動程序線程操作,則使程序線程安排一個可用程序線程清單(未示出)。例如,微引擎22f最多可得到4個程序線程。
除了對于執(zhí)行程序線程是局部的事件信號之外,微引擎22還使用全局性的信令狀態(tài)。用信令狀態(tài),執(zhí)行程序線程就可以向所有微引擎22廣播信號狀態(tài)。在微引擎中的任何程序線程可以按這些信令狀態(tài)轉(zhuǎn)移??梢允褂眠@些信令狀態(tài)來判定資源的可用性或資源是否應(yīng)該服務(wù)了。
上下文事件邏輯74具有對于四(4)個程序線程的仲裁。在一個實施例中,仲裁是一種循環(huán)式的機構(gòu)??梢允褂闷渌夹g(shù),包括優(yōu)先級隊列或加權(quán)公平隊列。微引擎22f還包括執(zhí)行盒(EBOX)數(shù)據(jù)路徑76,它包括算術(shù)邏輯單元76a和通用寄存器組76b。算術(shù)邏輯單元76a執(zhí)行算術(shù)和邏輯功能以及移位功能。寄存器組76b具有數(shù)目相當(dāng)多的通用寄存器。在這個實施中,在第一存儲體,存儲體A,中有64個通用寄存器,在第二存儲體,存儲體B,中有64個。給通用寄存器設(shè)置窗口,以致它們是相對地和絕對地可尋址的。
微引擎22f還包括寫入傳送寄存器堆棧78以及讀出傳送堆棧80。也給這些寄存器設(shè)置窗口,以致它們是相對地和絕對地可尋址的。寫入傳送寄存器堆棧78是查找到資源的寫入數(shù)據(jù)處。類似地,讀出寄存器堆棧80是為了從共享資源返回的數(shù)據(jù)。在數(shù)據(jù)到達(dá)之后或與數(shù)據(jù)到達(dá)同時,將把來自例如SRAM控制器26a、SDRAM控制器26b或核心處理器20等的各個共享資源的事件信號提供給上下文事件仲裁器74,然后,上下文事件仲裁器74將向程序線程發(fā)出可得到數(shù)據(jù)或已經(jīng)發(fā)送數(shù)據(jù)的警報。通過數(shù)據(jù)路徑把傳送寄存器存儲體78和80兩者連接到執(zhí)行盒76。在一種實施中,讀出傳送寄存器具有64個寄存器,并且寫入傳送寄存器具有64個寄存器。
每個微引擎22a-22f支持四個上下文的多線程執(zhí)行。一個原因是為了允許一個程序線程正好是在另一個程序線程發(fā)出存儲器訪問以后開始執(zhí)行和必須等待直到在做更多工作之前完成訪問。這個特性對于保持微引擎的有效硬件執(zhí)行是關(guān)鍵性的,因為存儲器等待時間是很重要的。換句話說,如果只支持單個程序線程執(zhí)行,則微引擎將空轉(zhuǎn)相當(dāng)多數(shù)目的周期,坐等訪問返回,從而降低了全面計算總處理能力。多線程的執(zhí)行允許微引擎通過執(zhí)行數(shù)個程序線程上的有用的獨立工作而隱藏存儲器等待時間。為了允許程序線程發(fā)出SRAM或SDRAM訪問,提供兩個同步的機構(gòu),然后,當(dāng)該訪問完成時,接著準(zhǔn)時同步到位。
一個機構(gòu)是立即同步。在立即同步中,微引擎發(fā)出訪問和立即換出該上下文。當(dāng)相應(yīng)的訪問完成時,將發(fā)出該上下文的信號。一旦發(fā)出信號,將返回?fù)Q入當(dāng)上下文交換事件發(fā)生時執(zhí)行的上下文交換,并且輪到它運行。因此,從單個上下文的指令流的觀點,在發(fā)出存儲器訪問之后,直到完成訪問才執(zhí)行微字。
第二個機構(gòu)是延遲同步。在延遲同步中,微引擎發(fā)出訪問,并繼續(xù)執(zhí)行與訪問無關(guān)的某些其它有用的工作。一段時間以后,可能在進一步執(zhí)行工作之前變得需要使程序線程的執(zhí)行流與所發(fā)出的訪問的完成同步。此時,執(zhí)行同步微字,或是換出當(dāng)前程序線程,并在較后時間當(dāng)已經(jīng)完成訪問時返回?fù)Q入程序線程,或是因為已經(jīng)完成訪問而繼續(xù)執(zhí)行當(dāng)前程序線程。使用兩種不同的信令方案來實施延遲同步如果使存儲器訪問與一個傳送寄存器相關(guān)聯(lián),則當(dāng)設(shè)置或清除相應(yīng)的傳送寄存器有效位時,產(chǎn)生觸發(fā)程序線程的信號。例如,當(dāng)設(shè)置傳送寄存器A的有效位時,將對于放置數(shù)據(jù)到傳送寄存器A中的SRAM讀出發(fā)出信號。如果使存儲器訪問與代替?zhèn)魉图拇嫫鞯膫魉虵IFO或接收FIFO相關(guān)聯(lián),則當(dāng)在SDRAM控制器26a中完成訪問時,產(chǎn)生信號。在微引擎調(diào)度程序中只保存每個上下文的一個信號,因此在這種方案中只可以存在一個未完成的信號。
參考圖4,SDRAM存儲器控制器26a包括存儲器訪問隊列90,這里,從各微引擎22a-22f來的存儲器訪問請求到達(dá)。存儲器控制器26a包括仲裁器91,它選擇下一個微引擎訪問請求,以轉(zhuǎn)向任何功能單元。如果微引擎之一正在提供訪問請求,則訪問請求將通過在SDRAM控制器26a內(nèi)部的地址和命令隊列90。如果訪問請求具有稱之為“最優(yōu)化MEM位”的位設(shè)置,則將把輸入訪問請求分類成偶數(shù)存儲體隊列90a或奇數(shù)存儲體隊列90b。如果存儲器訪問請求沒有存儲器最優(yōu)化位設(shè)置,則缺省值將轉(zhuǎn)向排序隊列90c。SDRAM控制器26a是FBUS接口28、核心處理器20以及PCI接口24之間共享的資源。SDRAM控制器26a還保持一個狀態(tài)機,用于執(zhí)行讀出-修改-寫入原子操作。SDRAM控制器26a還對于來自SDRAM的數(shù)據(jù)的請求執(zhí)行字節(jié)調(diào)整。
排序隊列90c保持來自微引擎的訪問請求的排序。具有一系列奇數(shù)和偶數(shù)存儲體訪問,可以要求只在完成奇數(shù)和偶數(shù)存儲體兩者的存儲器訪問請求的序列時,才返回一個信號。如果微引擎22f把存儲器訪問請求分類成奇數(shù)存儲體和偶數(shù)存儲體訪問,并且存儲體之一,例如偶數(shù)存儲體,在奇數(shù)存儲體之前排空了存儲器訪問,但是在最后的偶數(shù)訪問上確立了信號,則SDRAM控制器26a可以想象地把已經(jīng)完成存儲器請求的信號發(fā)送回微引擎,即使未曾對奇數(shù)存儲體服務(wù)。這種情況可能導(dǎo)致相關(guān)的問題。排序隊列90c允許微引擎具有多個存儲器訪問,其中未完成的只是它最后的存儲器訪問需要發(fā)出完成的信號。
SDRAM控制器26a還包括高優(yōu)先級隊列90d。在高優(yōu)先級隊列90d中,來自微引擎之一的輸入存儲器訪問直接轉(zhuǎn)向高優(yōu)先級隊列,并且是按比其它隊列中的其它存儲器訪問較高的優(yōu)先級而操作的。所有這些隊列,偶數(shù)存儲體隊列90a、奇數(shù)存儲體隊列90b、排序隊列90c以及高優(yōu)先級隊列,是在單個RAM結(jié)構(gòu)中實施的,把所述單個RAM結(jié)構(gòu)局部地分段成四個不同的窗口,每個窗口具有它自己的頭和尾指針。由于填充和排出只是單個輸入和單個輸出,所以可以把它們安排在相同的RAM結(jié)構(gòu)中,以增加RAM結(jié)構(gòu)的密度。
SDRAM控制器26a還包括核心總線接口邏輯,即ASB總線92。ASB總線接口邏輯92把核心處理器20連接到SDRAM控制器26a。如果存在從核心處理器20經(jīng)過ASB接口92來的輸入數(shù)據(jù),則可以把數(shù)據(jù)存儲在MEM ASB裝置98中,并接著從MEM ASB裝置98取出,通過SDRAM接口11O到SDRAM存儲器16a。雖然未示出,但是對于讀出可以提供相同的隊列結(jié)構(gòu)。SDRAM控制器26a還包括核心程序97,以從微引擎和PCI總線獲得數(shù)據(jù)。
另外的隊列包括保持許多請求的PCI地址隊列94和ASB讀出/寫入隊列96。經(jīng)過多路復(fù)用器106把存儲器請求發(fā)送到SDRAM接口110。SDRAM仲裁器91控制多路復(fù)用器106,所述SDRAM仲裁器91檢測每個隊列的完整性以及請求的狀態(tài),并從完整性和狀態(tài)根據(jù)存儲在優(yōu)先級服務(wù)控制寄存器100中的可編程值判定優(yōu)先級。
參考圖5,圖中示出用于SRAM的存儲器控制器26b。存儲器控制器26b包括地址和命令隊列120。根據(jù)存儲器操作的類型(即讀出或?qū)懭?使存儲器控制器26b最優(yōu)化。地址和命令隊列120包括高優(yōu)先級隊列120a、讀出隊列120b(它是SRAM執(zhí)行的主要存儲器訪問功能)以及排序隊列120c(一般它包括到SRAM的所有寫入和讀出,未被最優(yōu)化)。雖然未示出,但是地址和命令隊列120還可以包括寫入隊列。
SRAM控制器26b還包括核心總線接口邏輯,即ASB總線122。ASB總線接口邏輯122把核心處理器20連接到SRAM控制器26b。SRAM控制器26b還包括核心程序127,以從微引擎和PCI總線獲得數(shù)據(jù)。
經(jīng)過多路復(fù)用器126把存儲器請求發(fā)送到SRAM接口140。SDRAM仲裁器131控制多路復(fù)用器126,所述SDRAM仲裁器131檢測每個隊列的完整性以及請求的狀態(tài),并從完整性和狀態(tài)根據(jù)存儲在優(yōu)先級服務(wù)控制寄存器130中的可編程值判定優(yōu)先級。一旦到多路復(fù)用器126的控制選擇一個存儲器訪問請求,就把存儲器訪問請求發(fā)送到解碼器138,在那里對它進行解碼和產(chǎn)生一個地址。
SRAM單元保持對存儲器映射的芯片外SRAM和擴展ROM進行控制。例如,SRAM控制器26b可以進行16兆字節(jié)的尋址,例如,8兆字節(jié)用于對SRAM16b的映射,并保留8兆字節(jié)用于特定功能,包括經(jīng)過快閃只讀存儲器16c的引導(dǎo)程序空間;以及用于MAC裝置13a、13b的控制臺端口訪問和到相關(guān)聯(lián)的(RMON)計數(shù)器的訪問。把SRAM使用于局部查找表和隊列管理功能。
SRAM控制器26b支持下列處理事務(wù)微引擎請求 (經(jīng)過專用總線) 到/從SRAM核心處理器 (經(jīng)過ASB總線) 到/從SRAM地址和命令隊列120還包括讀出鎖定失效隊列120d。使用讀出鎖定失效隊列120d來保存因一部分存儲器上存在鎖定而失效的讀出存儲器訪問請求。
參考圖6,示出微引擎22和FBUS接口邏輯(FBI)之間的通信。在網(wǎng)絡(luò)應(yīng)用中的FBUS接口28可以執(zhí)行來自FBUS 18的輸入分組的標(biāo)頭處理。FBUS接口執(zhí)行的關(guān)鍵功能是取出在SRAM中的分組標(biāo)頭,以及微可編程源/目的地/協(xié)議散列查找表。如果沒有成功地解得散列,則設(shè)法通過核心處理器28對分組標(biāo)頭進行更復(fù)雜的處理。
FBI 28包括發(fā)送FIFO 182、接收FIFO 183、散列單元188以及FBI控制和狀態(tài)寄存器189。這四個單元通過到SRAM總線的時間多路復(fù)用的訪問而與微引擎22進行通信,所述SRAM總線38是連接到微引擎中的傳送寄存器78、80的。即到和從微引擎的所有通信都是經(jīng)過傳送寄存器78、80的。FBUS接口28包括在SRAM不使用SRAM數(shù)據(jù)總線(總線38的一部分)的時間周期期間把數(shù)據(jù)推入傳送寄存器的推入狀態(tài)機200;以及從在相應(yīng)的微引擎中的傳送寄存器得到數(shù)據(jù)的拉出狀態(tài)機202。
散列單元包括一對FIFO 188a、188b。散列單元判定FBI 28接收到FBI_hash請求。散列單元從調(diào)用微引擎22得到散列密鑰。在得到密鑰并使之散列之后,把標(biāo)記返回傳遞到調(diào)用微引擎22。在單個FBI_hash請求之下執(zhí)行多達(dá)3個散列??偩€34和38的每一個是單向的SDRAM_push/pull_data以及Sbus_push/pull_data。這些總線的每一個需要控制信號,所述控制信號將把讀出/寫入控制提供給合適的微引擎22傳送寄存器。
一般地,傳送寄存器需要來自控制它們的上下文的保護,以保證讀出正確度。尤其,如果thread_1正在使用寫入傳送寄存器,以把數(shù)據(jù)提供給SDRAM16a,那么直到從SDRAM控制器26a返回的信號表示已經(jīng)設(shè)法通過該寄存器而且現(xiàn)在可以再使用時才重寫該寄存器。每個寫入不需要從目的地返回表示已經(jīng)完成該功能的信號,因為如果程序線程在具有多個請求的目的地處寫入相同的命令隊列,則保證在該命令隊列中的完成的排序,因此只有最后的命令需要把信號發(fā)回程序線程。然而,如果程序線程使用多個命令隊列(排序和讀出),則把這些命令請求分裂成獨立的上下文任務(wù),以致通過上下文交換而保持排序。在本段開始處表示的例外情況是相當(dāng)于某些操作類別的,這些操作對于FBUS狀態(tài)信息使用從FBI到傳送寄存器的不請求的PUSH(推入)。為了保護在傳送寄存器上的讀出/寫入判定,當(dāng)設(shè)置這些特定的FBI推入操作時,F(xiàn)BI提供特定的Push_protect信號。
使用FBI未經(jīng)請求推入技術(shù)的任何微引擎22必須在訪問傳送寄存器同意的FBUS接口/微引擎之前測試保護標(biāo)志。如果沒有確立標(biāo)志,則微引擎22可以訪問傳送寄存器。如果確立標(biāo)志,則在訪問寄存器之前上下文應(yīng)該等待N個周期。通過正在推入的許多傳送寄存器,加上前端保護窗口,先驗地判定這個計數(shù)。微引擎測試這個標(biāo)志,然后把數(shù)據(jù)從讀出傳送寄存器轉(zhuǎn)移到在鄰接周期中的GPR,所以推入核心程序不會與微引擎讀出相碰撞。
用于分組處理的線程信令對于分組處理,可使用諸如線程間通信之類傳遞狀態(tài)的專門技術(shù),允許程序線程自己分配任務(wù)的自毀寄存器210,以及提供全局程序線程通信方案的線程_完成(thread_done)寄存器212。自毀寄存器210和線程_完成寄存器212可以實施為控制和狀態(tài)寄存器189。為了清楚起見,在標(biāo)有CSR塊的外部的FBUS接口28中示出它們。在網(wǎng)絡(luò)處理器中使用多個程序線程(例如,上下文)實施網(wǎng)絡(luò)功能,以處理網(wǎng)絡(luò)分組。例如,可以在微引擎核心程序(例如22a)之一中執(zhí)行調(diào)度程序線程,同時,在其余的核心程序(例如22b-22f)中可以執(zhí)行處理程序線程。程序線程(處理或調(diào)度程序線程)使用線程間通信來傳遞狀態(tài)。
向程序線程分配特殊任務(wù),諸如接收和發(fā)送調(diào)度,接收處理以及發(fā)送處理等。通過具有特殊讀出和寫入特征的線程間的信令、寄存器(例如自毀寄存器210和線程_完成寄存器212、SRAM 16b以及從諸如位設(shè)置和位清除等操作產(chǎn)生的,存儲在內(nèi)部暫時存儲器186中的數(shù)據(jù)(圖6)),在程序線程之間傳遞任務(wù)分配和任務(wù)完成。
網(wǎng)絡(luò)處理器10包括一般上下文通信信令協(xié)議,該協(xié)議允許任何上下文設(shè)置任何其它上下文可以檢測的一個信號。這允許合作的程序線程使用信號量,因此使用受微代碼控制的處理進行協(xié)調(diào)。
網(wǎng)絡(luò)分組的處理可以使用多個程序線程。一般地,對于網(wǎng)絡(luò)處理,存在接收調(diào)度程序、發(fā)送調(diào)度程序以及處理程序線程。調(diào)度程序(接收或發(fā)送)程序線程通過處理程序線程,對要完成的工作量和工作的序列進行協(xié)調(diào)。調(diào)度程序線程把任務(wù)分配給處理程序線程,在某些情況中,處理程序線程可以把任務(wù)分配給其它處理程序線程。例如,調(diào)度程序判定哪個端口需要服務(wù),并通過并行地處理多個程序線程來分配和調(diào)度到處理程序線程的任務(wù),以克服固有的存儲器等待時間。
在某些例子中,用慢端口,處理程序線程可以在一部分分組上執(zhí)行處理,而第二處理程序線程處理其余的分組,或在某些情況中,調(diào)度程序使用下一個可用程序線程。例如,用較快的端口(例如千兆位端口,其中極快地接收64字節(jié)分組),調(diào)度程序可以把M個分組分配給下一個可用程序線程。程序線程信號彼此按照程序線程已經(jīng)處理的那一部分分組和它的狀態(tài)。
可以分配程序線程,以處理分組的第一64字節(jié)。當(dāng)程序線程完成時,程序線程具有設(shè)置信號以喚醒下一個程序線程的數(shù)據(jù),已經(jīng)分配下一個程序線程來處理下一64字節(jié)。程序線程可以寫入一個寄存器以及在預(yù)-分配的存儲器存儲單元(例如暫時寄存器)中寫入寄存器的地址。程序線程設(shè)置信號以喚醒下一個程序線程,所述下一個程序線程是已經(jīng)分配在分組的下一個字節(jié)上工作的。
參考圖7A-7B,自毀寄存器210允許一個調(diào)度程序線程S(在圖7B中的230)請求來自提供所請求的服務(wù)的多個程序線程Pa-Pn的服務(wù)。第一程序線程(例如,訪問自毀寄存器210的Pi(在圖7B中的232))取得請求?!白詺Ъ拇嫫鳌?10在通過程序線程讀出時清零,即清除(在圖7B中的234)。能夠?qū)υ撜埱筮M行服務(wù)的其它程序線程不再與活動的請求一起存在。例如,通過寫入到自毀寄存器210,一個程序上下文可以請求一個任務(wù),所述任務(wù)是分配給已準(zhǔn)備好的第一上下文的。上下文通過讀出“自毀寄存器”210而檢查分配。如果自毀寄存器的值是0,則當(dāng)前不可得到新的任務(wù)來分配給程序線程。這可以表示不存在新的任務(wù),或另一程序線程可能已經(jīng)被自分配任務(wù)并清除自毀寄存器210。如果值不是0,則對自毀寄存器的內(nèi)容進行解譯,以判定任務(wù),并在上下文讀出時清除寄存器。因此,讀出這個用于分配的寄存器的上下文接著等待用下一個任務(wù)指令寫入寄存器。
參考圖8,對于網(wǎng)絡(luò)應(yīng)用,一般使用不同程序上下文來執(zhí)行特定的系統(tǒng)任務(wù)。任務(wù)包括接收調(diào)度程序、接收處理上下文、發(fā)送仲裁器、發(fā)送調(diào)度程序、發(fā)送填充和處理器核心通信。
例如,接收調(diào)度程序通過把命令發(fā)送到FBI接口28而啟動242輸入64或128字節(jié)的數(shù)據(jù)的接收操作,所述FBI接口28指定取出數(shù)據(jù)的端口,并指定用于緩沖該數(shù)據(jù)的接收FIFO單元,以及指定一旦已經(jīng)獲取接收數(shù)據(jù)就要通知的微引擎上下文。
接收調(diào)度程序線程244把信號發(fā)送到激勵指定的上下文的指定的微引擎程序線程。上下文讀出FBI接收控制寄存器,以得到用于處理所必需的接收信息(例如,端口、接收FIFO單元存儲單元、字節(jié)計數(shù)、分組的開始、分組的結(jié)束、誤差狀態(tài))。如果表示是分組的開始,則接收調(diào)度程序線程負(fù)責(zé)確定在SDRAM中的何處存儲數(shù)據(jù),(即插入分組的輸出隊列),并把分組數(shù)據(jù)寫入SDRAM中。如果這不是分組的開始,則接收程序線程確定這個分組的較早的數(shù)據(jù)存儲在何處,以便繼續(xù)進行對分組的處理246。當(dāng)接收到分組結(jié)束的表示248時,(或在第一64字節(jié)部分之后,如果使接收以發(fā)送等待時間最優(yōu)化),接收程序線程把分組添加到通過處理分組標(biāo)頭而確定的隊列中。
程序線程還通過提供位矢量的位設(shè)置和位清除機構(gòu)與共享資源進行通信。這個機構(gòu)允許個別位的設(shè)置和清除,并在個別位上執(zhí)行測試和設(shè)置,以控制共享資源。位矢量發(fā)出輸出隊列的非空的信號。當(dāng)接收程序線程使分組排隊時,接收調(diào)度程序設(shè)置一個位250。發(fā)送調(diào)度程序可以檢查位矢量,以確定所有隊列的狀態(tài)。
在暫存RAM或SRAM中可以發(fā)生在位矢量上的位設(shè)置和位清除操作。如果調(diào)度程序正在相同微引擎22上的程序線程之間進行通信,則可以把位矢量存儲在寄存器組中,因為每個上下文可以讀出其它上下文的寄存器。例如,在內(nèi)部暫存存儲器中的位矢量支持每個輸出隊列的空狀態(tài)或非空狀態(tài)。當(dāng)接收程序線程的隊列有一個分組時,接收程序線程使用暫存位設(shè)置命令,以在隊列狀態(tài)位中設(shè)置一個位,表示現(xiàn)在隊列具有至少一個輸入。對于非空的隊列(例如,設(shè)置了bitx),發(fā)送仲裁器對隊列位矢量進行掃描270,以判定準(zhǔn)備發(fā)送的分組。當(dāng)從隊列取出分組用于發(fā)送時272,如果隊列空了274,則發(fā)送仲裁器發(fā)出276位清除命令到隊列位矢量的相應(yīng)的位。
參考圖9,thread_done(線程_完成)寄存器也在FBI 28上,它是可以從不同程序線程設(shè)置位的一種寄存器。例如,每個程序線程可以使用兩位來把它的狀態(tài)傳遞到所有其它程序線程。還有一個調(diào)度程序線程可以讀出292其所有處理程序線程狀態(tài)。在完成接收任務(wù)時,282“接收”程序線程把完成代碼寫入284到“thread_done”寄存器中。在寫入thread_done寄存器之后,接收程序線程變成非現(xiàn)用286。接收程序線程等待來自FBI的,表示已經(jīng)分配其它接收任務(wù)的其它信號。程序線程1-16具有用于“thread_done_1”的2位字段,而程序線程17-24具有用于“thread_done_2”的2位字段。2位字段允許程序線程傳遞不同程度任務(wù)完成。
例如,調(diào)度程序可以使用兩位狀態(tài)“01”來表示把數(shù)據(jù)轉(zhuǎn)移到SDRAM、仍在進行分組的處理以及被保存的指針;位10可以表示把數(shù)據(jù)轉(zhuǎn)移到SDRAM、仍在進行分組的處理以及不保存的指針;而位11可以表示完成了分組處理。因此,當(dāng)數(shù)據(jù)變成可得到時,接收調(diào)度程序線程可以使用狀態(tài)296a來處理任務(wù),而,當(dāng)數(shù)據(jù)變成可得到時,接收調(diào)度程序可以使用狀態(tài)296b分配297b相同的線程以繼續(xù)進行處理。
調(diào)度程序線程調(diào)用的,在調(diào)度程序線程和處理程序線程之間的軟件約定可以解決消息的確切解譯。即,根據(jù)約定是否是用于以上接收、發(fā)送等,狀態(tài)消息可以改變。一般地,狀態(tài)消息包括“忙”、“不忙”、“不忙但是等待”?!安幻Γ堑却钡臓顟B(tài)消息發(fā)出表示當(dāng)前的程序線程已經(jīng)完成一部分分組的處理,并期望分配任務(wù)的信號,當(dāng)可得到數(shù)據(jù)時,在分組上執(zhí)行接著的任務(wù)。當(dāng)程序線程正在期望來自端口的數(shù)據(jù),并且尚未保存上下文,所以它應(yīng)該處理該分組的其余部分時,可以使用。
調(diào)度程序線程讀出“thread done”寄存器,以判定它分配給其它程序線程的任務(wù)的完成狀態(tài)。實施“thread done”寄存器作為寫入1以清除寄存器,允許調(diào)度程序在它剛識別字段時就進行清除。
其它實施例可以理解,在已經(jīng)連同本發(fā)明的詳細(xì)說明描述本發(fā)明的同時,打算把上述說明作為示例而不是限制本發(fā)明的范圍,通過所附的權(quán)利要求書來定義本發(fā)明的范圍。其它方面、優(yōu)點和修改都在下列權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
1.一種用于網(wǎng)絡(luò)分組處理的方法,包括接收網(wǎng)絡(luò)分組;以及用多個程序線程在所述網(wǎng)絡(luò)分組上操作以影響所述分組的處理。
2.如權(quán)利要求1所述的方法,其特征在于,操作包括使用至少一個程序線程來檢查所述分組的標(biāo)頭部分。
3.如權(quán)利要求1所述的方法,其特征在于,所述操作進一步包括由所述至少一個程序線程發(fā)出已經(jīng)處理分組標(biāo)頭的信號。
4.如權(quán)利要求1所述的方法,其特征在于,所述多個程序線程是調(diào)度作處理的任務(wù)排序的調(diào)度程序線程以及根據(jù)調(diào)度程序線程所分配的任務(wù)分派對分組進行處理的處理程序線程。
5.如權(quán)利要求1所述的方法,其特征在于,每個程序線程把表示它當(dāng)前狀態(tài)的消息寫入寄存器。
6.如權(quán)利要求5所述的方法,其特征在于,消息的解譯由調(diào)度程序線程和被該調(diào)度程序線程調(diào)用的處理程序線程之間確定的軟件約定所固定。
7.如權(quán)利要求5所述的方法,其特征在于,狀態(tài)消息包括忙、不忙、不忙但等待。
8.如權(quán)利要求5所述的方法,其中,狀態(tài)消息包括不忙、但等待,以及其中,不忙、但等待的狀態(tài)發(fā)出信號,表示當(dāng)前程序線程已經(jīng)完成一部分分組的處理,當(dāng)可以提供數(shù)據(jù)以繼續(xù)程序線程的處理時,期望被分配對所述分組執(zhí)行接續(xù)的任務(wù)。
9.如權(quán)利要求5所述的方法,其特征在于,所述寄存器是所有當(dāng)前程序線程都能夠作讀出或?qū)懭氲目扇执嫒〉募拇嫫鳌?br>
10.如權(quán)利要求4所述的方法,其特征在于,調(diào)度程序線程能夠調(diào)度多個處理程序線程中的任何一個,以處置任務(wù)的處理。
11.如權(quán)利要求10所述的方法,其特征在于,對于多個處理程序線程,調(diào)度程序線程用相應(yīng)于數(shù)據(jù)的存儲位置的一個地址寫入寄存器。
12.如權(quán)利要求11所述的方法,其特征在于,能夠處置所述任務(wù)的多個處理程序線程中的所選一個處理程序線程讀出寄存器以得到數(shù)據(jù)的存儲位置。
13.如權(quán)利要求12所述的方法,其特征在于,多個處理程序線程中的所選一個處理程序線程讀出寄存器以得到數(shù)據(jù)的存儲位置,并分配它自己處理調(diào)度程序線程所請求的任務(wù)。
14.如權(quán)利要求12所述的方法,其特征在于,多個處理程序線程中的所選一個處理程序線程讀出寄存器以得到數(shù)據(jù)的存儲位置,同時通過程序線程讀出寄存器而清除寄存器,以分配它自己處理該任務(wù)。
15.如權(quán)利要求13所述的方法,其特征在于,當(dāng)多個處理程序線程中的可分配給所述任務(wù)的另一個處理程序線程試圖讀出已經(jīng)被清除之后的寄存器時,給它設(shè)置一個零值,表示不存在當(dāng)前可分配給處理程序線程的任務(wù)。
16.一種用于接收網(wǎng)絡(luò)分組的基于硬件的并行多線程處理器,包括協(xié)調(diào)系統(tǒng)功能的一個通用處理器;以及支持多個程序線程并用多個程序線程在網(wǎng)絡(luò)分組上操作以影響所述分組的處理的多個微引擎。
17.如權(quán)利要求16所述的處理器,其特征在于,多個微引擎中的一個微引擎執(zhí)行調(diào)度程序線程,并且其余一些微引擎執(zhí)行處理程序線程。
18.如權(quán)利要求16所述的處理器,其特征在于,進一步包括一個全局線程狀態(tài)寄存器,其中,每個程序線程把表示它當(dāng)前狀態(tài)的消息寫入所述全局狀態(tài)寄存器。
19.如權(quán)利要求18所述的處理器,其特征在于,消息的解譯由調(diào)度程序線程與被調(diào)度程序線程調(diào)用的處理程序線程之間的軟件約定固定。
20.如權(quán)利要求16所述的處理器,其特征在于,進一步包括一個一次讀出寄存器,其中,對于多個處理程序線程,調(diào)度程序線程用相應(yīng)于數(shù)據(jù)的存儲位置的地址寫入所述一次讀出寄存器,并且當(dāng)多個處理程序線程中的所選一個處理程序線程讀出所述寄存器以得到數(shù)據(jù)的存儲位置時,分配它自己處理被調(diào)度程序線程所請求的任務(wù),同時通過程序線程讀出所述寄存器而清除該寄存器。
21.如權(quán)利要求21所述的處理器,其特征在于,當(dāng)多個處理程序線程中的可分配給任務(wù)的另一個處理程序線程試圖讀出已經(jīng)被清除之后的所述一次讀出寄存器時,給它設(shè)置一個零值,表示不存在當(dāng)前可分配給處理程序線程的任務(wù)。
22.一種包括機讀存儲媒體的裝置,所述媒體具有用于網(wǎng)絡(luò)處理的可執(zhí)行指令,所述指令使所述裝置能夠接收網(wǎng)絡(luò)分組;以及用多個程序線程在網(wǎng)絡(luò)分組上操作以影響所述分組的處理。
23.如權(quán)利要求22所述的裝置,其特征在于,操作的指令進一步包括以下的指令使用至少一個程序線程來檢查分組的標(biāo)頭部分。
24.如權(quán)利要求22所述的裝置,其特征在于,進一步包括提供調(diào)度作處理的任務(wù)的排序的調(diào)度程序線程和根據(jù)所述調(diào)度程序線程所分配的任務(wù)分派對分組進行處理的處理程序線程的指令。
25.如權(quán)利要求22述的裝置,其特征在于,每個程序線程把表示它當(dāng)前狀態(tài)的消息寫入寄存器。
26.如權(quán)利要求25所述的裝置,其特征在于,寄存器是所有當(dāng)前程序線程能夠?qū)ζ浠驅(qū)懭氲目扇衷L問的寄存器。
27.如權(quán)利要求22所述的裝置,其特征在于,對于多個處理程序線程,所述調(diào)度程序線程用相應(yīng)于數(shù)據(jù)的存儲位置的一個地址寫入寄存器;以及多個處理程序線程中能夠處置任務(wù)的所選一個處理程序線程讀出所述寄存器以得到數(shù)據(jù)的存儲位置;以及在所述程序線程讀出之后清除所述寄存器。
28.如權(quán)利要求27所述的裝置,其特征在于,當(dāng)多個處理程序線程中的可分配給任務(wù)的另一個處理程序線程試圖讀出已經(jīng)被清除之后的寄存器時,該寄存器提供一個零值,表示不存在當(dāng)前可分配給處理程序線程的任務(wù)。
全文摘要
描述一種基于硬件的并行多線程處理器。處理器包括協(xié)調(diào)系統(tǒng)功能的通用處理器以及支持程序線程的多個微引擎。處理器還包括存儲器控制系統(tǒng),該控制系統(tǒng)具有第一存儲器控制器和第二存儲器控制器,所述第一存儲器控制器根據(jù)把存儲器訪問引導(dǎo)到偶數(shù)存儲體還是奇數(shù)存儲體而對存儲器訪問進行分類;第二存儲器控制器根據(jù)存儲器訪問是讀出訪問或?qū)懭朐L問而使存儲器訪問最優(yōu)化。還描述用于分組處理的程序線程通信方案。
文檔編號G06F9/38GK1643499SQ00819179
公開日2005年7月20日 申請日期2000年12月8日 優(yōu)先權(quán)日1999年12月28日
發(fā)明者G·沃爾里奇, D·胡珀, D·伯恩斯坦因, M·J·阿迪萊塔, W·威勒 申請人:英特爾公司