一種微引擎及其處理報文的方法
【技術領域】
[0001]本發(fā)明涉及網(wǎng)絡處理器技術,尤其涉及一種微引擎(ME,Micro Engine)及其處理報文的方法。
【背景技術】
[0002]為了滿足未來網(wǎng)絡發(fā)展的需要,提高路由器的性能,處于因特網(wǎng)(Internet)骨干位置的核心路由器進行了一個又一個的技術變革。尤其在高端路由器市場,網(wǎng)絡處理器以其杰出的報文處理性能及可編程性已經(jīng)成為構成路由轉發(fā)引擎不可替代的部分。目前業(yè)界基本使用多線程的網(wǎng)絡處理器結構,而多線程的管理和調度是影響多線程網(wǎng)絡處理器性能的一個關鍵因素。
[0003]在網(wǎng)絡處理器系統(tǒng)中,ME是網(wǎng)絡處理器的核心部件。多線程結構是提高網(wǎng)絡處理器ME性能的一種有效方法,但是也會帶來線程管理的復雜性和系統(tǒng)頻率瓶頸等問題。因此需要設計一個合理的方案來實現(xiàn)高頻高效的ME線程調度管理,同時使ME有較高的處理性倉泛。
[0004]一些傳統(tǒng)的多線程網(wǎng)絡處理器采用了基于粗粒度調度的ME,這樣的ME雖然可以保證一個線程的指令全速執(zhí)行,但是在每一次線程切換時,數(shù)據(jù)的加載和保存都會造成內核流水線的空閑,從而導致ME性能的下降。
[0005]另外,由于ME的流水線中只有一條線程在執(zhí)行,所以設計方案時需要解決數(shù)據(jù)冒險的問題。當采用數(shù)據(jù)前推的設計時,將增加邏輯的復雜度,并在連續(xù)處理兩個結果相關的報文指令時造成組合邏輯路徑的增加,導致系統(tǒng)頻率的下降。
【發(fā)明內容】
[0006]有鑒于此,本發(fā)明實施例期望提供一種ME及其處理報文的方法,能夠在克服現(xiàn)有的ME頻率與性能不高的問題。
[0007]本發(fā)明的技術方案是這樣實現(xiàn)的:
[0008]本發(fā)明提供了一種ME處理報文的方法,所述方法包括:ME通過至少五個線程管理隊列對接收到的報文進行線程分配,根據(jù)所分配的線程將所述報文存儲在具有雙讀寫端口的報文存儲器中,并采用八級流水線的方式控制所分配的線程對存儲在所述報文存儲器中的報文進行處理。
[0009]上述方案中,所述ME通過至少五個線程管理隊列對接收到的報文進行線程分配為:ME接收到新的報文時,由空閑隊列free_queue以先進先出的方式為報文分配線程號,并將分配的線程號和報文自身攜帶的取指地址寫到待處理隊列rdy_qUeUe,當ME中具有空閑的流水線資源時,ME從rdy_qUeUe中調度一個待處理的報文的線程號和所述線程號對應的取指地址寫到操作隊列work_queue, work_queue中存儲的都是ME正在處理的報文的線程號和取指地址,當一個報文需要查表時,將所述報文的線程號和取指地址寫入到查表隊列Srh_qUeUe中,當一個報文處理完畢時,將所述報文的線程號和取指地址寫入到報文輸出隊列pkt_out_queue中;其中,當一個報文需要查表或處理完畢時,從work_queue中刪除所述報文對應的線程號和取指地址。
[0010]上述方案中,所述采用八級流水線的方式控制所分配的線程對存儲在所述報文存儲器中的報文進行處理為:八級流水線支持八個線程同時工作,八級流水線中每一級對應一個線程;其中,第一級,線程根據(jù)報文的取指地址發(fā)送報文指令的獲取請求;第二級,線程接收報文指令;第三級,線程解析報文指令并獲取報文指令的源操作數(shù);第四級,線程對源操作數(shù)進行位調整;第五級,線程根據(jù)所述位調整后的源操作數(shù)執(zhí)行報文指令對應的算術運算和對應的存儲地址的計算;第六級,線程根據(jù)所述存儲地址發(fā)出讀寫操作請求;第七級,線程獲得所述操作請求的響應;第八級,線程將所述算術運算的結果或所述操作請求的響應作為報文指令的處理結果回寫;其中,在第八級之后,確定報文不需要查表且包括有未處理的報文指令時,根據(jù)所述報文的線程號返回第一級處理所述報文中未處理的報文指令。
[0011]上述方案中,在所述報文處理完成后,將所述報文的線程號釋放。
[0012]本發(fā)明提供了一種ME,所述ME包括:線程管理模塊、具有雙讀寫端口的報文存儲模塊、內核模塊;其中,所述線程管理模塊,用于通過至少五個線程管理隊列對接收到的報文進行線程分配;所述報文存儲模塊,用于根據(jù)所分配的線程存儲所述報文;所述內核模塊,用于采用八級流水線的方式控制所分配的線程對存儲在所述報文存儲模塊中的報文進行處理。
[0013]上述方案中,所述線程管理模塊,具體用于通過空閑隊列free_qUeUe以先進先出的方式為報文分配線程號,并將分配的線程號和報文自身攜帶的取指地址寫到待處理隊列rdy_queue,當有空閑的流水線資源時,從rdy_queue中調度一個待處理的報文的線程號和所述線程號對應的取指地址寫到操作隊列work_queue, work_queue中存儲的都是正在處理的報文的線程號和取指地址,當一個報文需要查表時,將所述報文的線程號和取指地址寫入到查表隊列srh_qUeUe中,當一個報文處理完畢時,將所述報文的線程號和取指地址寫入到報文輸出隊列pkt_out_queue中;其中,當一個報文需要查表或處理完畢時,從work_queue中刪除所述報文對應的線程號和取指地址。
[0014]上述方案中,所述內核模塊,具體用于將八級流水線中每一級對應一個線程;其中,第一級,線程根據(jù)報文的取指地址發(fā)送報文指令的獲取請求;第二級,線程接收報文指令;第三級,線程解析報文指令并獲取報文指令的源操作數(shù);第四級,線程對源操作數(shù)進行位調整;第五級,線程根據(jù)所述位調整后的源操作數(shù)執(zhí)行報文指令對應的算術運算和對應的存儲地址的計算;第六級,線程根據(jù)所述存儲地址發(fā)出讀寫操作請求;第七級,線程獲得所述操作請求的響應;第八級,線程將所述算術運算的結果或所述操作請求的響應作為所述報文指令的處理結果回寫;其中,在第八級之后,確定報文不需要查表且包括有未處理的報文指令時,根據(jù)所述報文的線程號返回第一級處理所述報文中未處理的報文指令。
[0015]上述方案中,所述線程管理模塊還用于在所述報文處理完成后,將所述報文的線程號釋放。
[0016]由此可見,本發(fā)明實施例提供一種ME及其處理報文的方法,ME通過至少五個線程管理隊列對接收到報文進行線程分配,根據(jù)所分配的線程將所述報文存儲在具有雙讀寫端口的報文存儲器中,并采用八級流水線的方式控制所分配的線程對存儲在所述報文存儲模塊中的報文進行處理;從硬件結構上避免了數(shù)據(jù)冒險的產(chǎn)生,簡化了邏輯,不需要進行與數(shù)據(jù)冒險相關判斷邏輯,并避免了 ME內部資源訪問沖突的產(chǎn)生,有效地提高ME工作頻率和性能,保證ME高頻率高性能的處理報文,并且方案實現(xiàn)相對簡單,能夠降低編碼的復雜度,從而降低人力成本。
【附圖說明】
[0017]圖1為本發(fā)明實施例一提供的ME處理報文的方法的流程示意圖;
[0018]圖2為本發(fā)明實施例二提供的ME處理報文的方法的流程示意圖;
[0019]圖3為本發(fā)明實施例二提供的ME流水線處理一個報文的工作過程示意圖;
[0020]圖4為本發(fā)明實施例二提供的ME流水線處理多個個報文的工作過程示意圖;
[0021]圖5本發(fā)明實施例三提供的ME的結構示意圖。
【具體實施方式】
[0022]在本發(fā)明實施例中,ME通過至少五個線程管理隊列對接收到的報文進行線程分配,根據(jù)所分配的線程將所述報文存儲在具有雙讀寫端口的報文存儲器中,并采用八級流水線的方式控制所分配的線程對存儲在所述報文存儲器中的報文進行處理。
[0023]下面結合附圖及具體實施例對本發(fā)明的技術方案做進一步的詳細說明。
[0024]實施例一
[0025]圖1為本發(fā)明實施例一提供的ME處理報文的方式的流程示意圖,如圖1所示,該方法包括以下步驟:
[0026]步驟101,ME通過至少五個線程管理隊列對接收到的報文進行線程分配;
[0027]具體的,以五個線程管理隊列為例,ME接收到新的報文時,由空閑隊列free_queue以先進先出的方式為報文分配線程號,并將分配的線程號和報文自身攜帶的取指地址寫到待處理隊列rdy_queue,當ME中具有空閑的流水線資源時,ME從rdy_queue中調度一個待處理的報文的線程號和所述線程號對應的取指地址寫到操作隊列work_qUeUe,work_queue中存儲的都是ME正在處理的報文的線程號和取指地址,當一個報文需要查表時,將所述報文的線程號和取指地址寫入到查表隊列srh_qUeUe中,當一個報文處理完畢時,將所述報文的線程號和取指地址寫入到報文輸出隊列pkt_0Ut_qUeUe中;其中,當一個報文需要查表或處理完畢時,將報文的線程號和取指地址寫入srh_queue或pkt_out_queue的同時,從work_queue中刪除該報文對應的線程號和取指地址。
[0028]其中,由free_queue為報文分配的線程號與報文本身--對應,通過所分配的線程號能確定其對應的報文。
[0029]當ME正在處理的報文少于8個時,ME具有空閑流水線資源,貝U從rdy_queue中調度一個待處理的報文的線程號和所述線程號對應的取指地址寫到work_qUeUe中,將該空閑的流水線資源分配給此時調度進入worlqueue的線程號對應的報文,由該報文的線程號對應的線程利用空閑的流水線資源對該報文進行處理。這里,w0rk_qU