本發(fā)明涉及一種網(wǎng)絡(luò)通信領(lǐng)域技術(shù),特別是涉及一種用于網(wǎng)絡(luò)處理器中引擎分配的實(shí)現(xiàn)方法。
背景技術(shù):
網(wǎng)絡(luò)處理器是經(jīng)過(guò)專門設(shè)計(jì)和高度優(yōu)化來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)功能的可編程硬件,用于完成報(bào)文處理、協(xié)議分析、路由轉(zhuǎn)發(fā)等通信工作。網(wǎng)絡(luò)處理器擁有高性能和可編程的優(yōu)點(diǎn),支持不斷涌現(xiàn)的網(wǎng)絡(luò)技術(shù)。
圖1是現(xiàn)有網(wǎng)絡(luò)處理器的核心組成部分。網(wǎng)絡(luò)處理器包括數(shù)據(jù)包解析模塊、查找模塊、更新轉(zhuǎn)發(fā)模塊和數(shù)據(jù)包修改四種模塊。每種模塊完成不同的任務(wù)。其中,數(shù)據(jù)包解析模塊從幀存儲(chǔ)器讀出幀數(shù)據(jù),分類解析后識(shí)別并提取關(guān)鍵信息,對(duì)信息進(jìn)行組合構(gòu)成多個(gè)查找關(guān)鍵字。查找模塊接收來(lái)自查找關(guān)鍵字,對(duì)相關(guān)表進(jìn)行查找和管理。更新轉(zhuǎn)發(fā)模塊根據(jù)查找結(jié)果決定幀的輸出端口、輸出隊(duì)列。數(shù)據(jù)包修改模塊從幀存儲(chǔ)器中讀出幀,根據(jù)需要修改內(nèi)容后寫(xiě)回幀存儲(chǔ)器。
每種模塊都可以簡(jiǎn)單分為三個(gè)步驟:分配引擎并接收待處理數(shù)據(jù)、執(zhí)行具體功能、保存處理結(jié)果傳遞給后級(jí)模塊。模塊之間需要用較多時(shí)間來(lái)傳輸數(shù)據(jù)。如果每種模塊只有一個(gè)工作引擎,那么模塊之間必須串行工作,處理速度非常慢。因此,每種模塊均采用多個(gè)工作引擎執(zhí)行相同的具體功能,并行處理數(shù)據(jù),隱藏傳輸和處理的時(shí)間,如圖2所示。
傳統(tǒng)方法是通過(guò)狀態(tài)機(jī)的形式來(lái)實(shí)現(xiàn)多個(gè)引擎的分配,每個(gè)周期只有一個(gè)引擎有優(yōu)先權(quán),如果該引擎沒(méi)有空閑,則它下一個(gè)空閑的引擎可以被分配。這種方法只適合在較少引擎數(shù)目的場(chǎng)合運(yùn)用。隨著引擎數(shù)目的增加,狀態(tài)機(jī)會(huì)變得異常復(fù)雜,難于管理且不易擴(kuò)展。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種用于網(wǎng)絡(luò)處理器中引擎分配的實(shí)現(xiàn)方法,其能夠快速分配引擎資源,及時(shí)接受前級(jí)模塊傳來(lái)的數(shù)據(jù),避免長(zhǎng)時(shí)間占用模塊,影響數(shù)據(jù)幀線性收發(fā);不同應(yīng)用場(chǎng)合靈活選擇工作引擎的數(shù)目,便于選擇處理速度和資源占用的最優(yōu)情況;后續(xù)擴(kuò)展引擎數(shù)目靈活方便,改動(dòng)小。
本發(fā)明是通過(guò)下述技術(shù)方案來(lái)解決上述技術(shù)問(wèn)題的:一種用于網(wǎng)絡(luò)處理器中引擎分配的實(shí)現(xiàn)方法,其特征在于,所述用于網(wǎng)絡(luò)處理器中引擎分配的實(shí)現(xiàn)方法包括以下步驟:
步驟一:根據(jù)當(dāng)前可用的引擎和前一時(shí)刻分配的引擎,選擇當(dāng)前選用的工作引擎,將待處理的數(shù)據(jù)傳遞到該引擎中;
步驟二:實(shí)現(xiàn)多個(gè)相同的工作引擎,并行執(zhí)行具體功能;
步驟三:保存處理結(jié)果供后級(jí)取用,釋放占用的引擎,將空閑寄存器對(duì)應(yīng)位清零。
優(yōu)選地,所述用于網(wǎng)絡(luò)處理器中引擎分配的實(shí)現(xiàn)方法涉及網(wǎng)絡(luò)處理器,網(wǎng)絡(luò)處理器包括解析模塊、查找模塊、更新轉(zhuǎn)發(fā)模塊、修改模塊,且解析模塊、查找模塊、更新轉(zhuǎn)發(fā)模塊、修改模塊均支持多個(gè)相同、獨(dú)立的執(zhí)行單元。
優(yōu)選地,所述步驟一提供寄存器接口、供軟件人員配置引擎數(shù)目。
優(yōu)選地,所述步驟二隱藏?cái)?shù)據(jù)傳輸時(shí)間,加快數(shù)據(jù)處理速度。
優(yōu)選地,所述空閑寄存器反映當(dāng)前空閑的引擎情況,由模塊內(nèi)部進(jìn)行維護(hù)。
本發(fā)明的積極進(jìn)步效果在于:本發(fā)明支持通過(guò)寄存器靈活配置實(shí)際工作的引擎數(shù)目,根據(jù)具體應(yīng)用需求配置引擎數(shù)目、平衡資源和速度,實(shí)現(xiàn)性能最優(yōu);只要有一個(gè)以上空閑引擎,就可以接收數(shù)據(jù),釋放前級(jí)模塊資源,隱藏模塊之間數(shù)據(jù)傳輸和處理的時(shí)間,提高工作效率;后續(xù)引擎數(shù)目的擴(kuò)展方便,只需要簡(jiǎn)單改動(dòng)。
附圖說(shuō)明
圖1為現(xiàn)有網(wǎng)絡(luò)處理器的核心處理模塊結(jié)構(gòu)圖。
圖2為現(xiàn)有網(wǎng)絡(luò)處理器中每種模塊處理數(shù)據(jù)流程圖。
圖3為本發(fā)明用于網(wǎng)絡(luò)處理器中引擎分配的實(shí)現(xiàn)方法的流程圖。
具體實(shí)施方式
下面結(jié)合附圖給出本發(fā)明較佳實(shí)施例,以詳細(xì)說(shuō)明本發(fā)明的技術(shù)方案。
本發(fā)明也涉及網(wǎng)絡(luò)處理器,網(wǎng)絡(luò)處理器包括解析模塊、查找模塊、更新轉(zhuǎn)發(fā)模塊、修改模塊,且四個(gè)模塊均支持多個(gè)相同、獨(dú)立的執(zhí)行單元,即工作引擎。
如圖3所示,本發(fā)明用于網(wǎng)絡(luò)處理器中引擎分配的實(shí)現(xiàn)方法包括以下步驟:
步驟301:根據(jù)當(dāng)前可用的引擎和前一時(shí)刻分配的引擎,選擇當(dāng)前選用的工作引擎,將待處理的數(shù)據(jù)傳遞到該引擎中;
步驟302:實(shí)現(xiàn)多個(gè)相同的工作引擎,并行執(zhí)行具體功能,如解析、查找、更新轉(zhuǎn)發(fā)或修改;
步驟303:保存處理結(jié)果供后級(jí)取用,釋放占用的引擎,將FREE寄存器(空閑寄存器)對(duì)應(yīng)位清零。
其中,步驟301提供寄存器接口、供軟件人員配置引擎數(shù)目。
步驟302隱藏?cái)?shù)據(jù)傳輸時(shí)間,加快數(shù)據(jù)處理速度,這樣能盡早釋放前級(jí)模塊資源,保證幀的線性收發(fā)。
其中,寄存器包括ENABLE寄存器、FREE寄存器(空閑寄存器)、AVALABLE寄存器、SELECT寄存器。上述三個(gè)步驟流水執(zhí)行,隱藏了數(shù)據(jù)傳輸和處理的時(shí)間,大大提高性能。同時(shí),引擎分配部分實(shí)現(xiàn)十分簡(jiǎn)單,改動(dòng)極其方便,方便后續(xù)擴(kuò)展。
FREE寄存器反映當(dāng)前空閑的引擎情況,由模塊內(nèi)部進(jìn)行維護(hù)。在分配引擎后,將FREE寄存器的對(duì)應(yīng)位置1。ENABLE寄存器和FREE寄存器按位與后得到AVAILABLE寄存器,也就是當(dāng)前實(shí)際能使用的引擎情況?;贏VAILABLE寄存器和SELECT寄存器,采用仲裁邏輯(具體實(shí)現(xiàn)方式可以不同)得到新的SELECT寄存器值,并將前級(jí)傳來(lái)的待處理數(shù)據(jù)傳遞給相應(yīng)的引擎。傳遞結(jié)束后,釋放前級(jí)模塊資源。只要有一個(gè)或一個(gè)以上的空閑引擎,就可以繼續(xù)傳遞和處理后續(xù)數(shù)據(jù)。某個(gè)引擎處理完數(shù)據(jù)后,會(huì)將數(shù)據(jù)傳遞給步驟303。此時(shí),釋放該引擎,并將FREE寄存器中對(duì)應(yīng)位置1。
以下介紹各個(gè)寄存器:
ENABLE(使能)寄存器:當(dāng)前使能的引擎情況。如bit0=1表示引擎0使能,0表示不使能。以此類推。根據(jù)支持的工作引擎數(shù)目來(lái)配置。如只允許一個(gè)引擎工作,那么ENABLE=‘b1;允許2個(gè)引擎工作,ENABLE=‘b11,以此類推;
FREE(空閑)寄存器:當(dāng)前空閑的引擎情況。表示當(dāng)前各引擎的空閑情況。bit0=1表示引擎0空閑,0表示忙碌。以此類推;
AVAILABLE(可用)寄存器:當(dāng)前可用的引擎情況??赡苡卸辔粸?。由ENABLE寄存器和FREE寄存器按位與得到;
SELECT(選擇)寄存器:當(dāng)前實(shí)際選用的引擎情況,某時(shí)刻有且僅有1位為1。如Bit0=1表示選用引擎0,以此類推;根據(jù)當(dāng)前SELECT的值和AVALIABLE的值,得到SELECT的新值,也就是由前一時(shí)刻選用的引擎和當(dāng)前可用的引擎情況,得到當(dāng)前可選用的引擎;
這四個(gè)寄存器的位寬可以和當(dāng)前支持的引擎數(shù)目相同,但是,考慮到后續(xù)會(huì)增加引擎數(shù)目,所以將這些寄存器的位寬加大,超過(guò)當(dāng)前支持的引擎數(shù)目。
舉個(gè)例子,當(dāng)前支持四個(gè)引擎,可以將上述寄存器的位寬定為8,此時(shí)只要將ENABLE寄存器設(shè)成8’b0000_1111。后續(xù)如果增加四個(gè)引擎,只要將ENABLE寄存器改成8’b1111_1111;如果減少四個(gè)引擎,只要將ENABLE寄存器改成8’b0000_1111。其他情況以此類推。表1列出當(dāng)前支持的引擎數(shù)目和ENABLE寄存器的對(duì)應(yīng)值,可以根據(jù)需要靈活配置引擎數(shù)目,改動(dòng)很小。
表1
既支持只有一個(gè)引擎工作,方便硬件調(diào)試定位錯(cuò)誤;也支持多個(gè)引擎并行工作,隱藏?cái)?shù)據(jù)傳輸時(shí)間,提高工作效率。在具體應(yīng)用中,根據(jù)實(shí)際情況靈活配置引擎數(shù)目,比較資源占用和處理速度,選擇最優(yōu)的情況。
某個(gè)時(shí)刻選擇的引擎由前一時(shí)刻選擇的引擎和當(dāng)前可用的引擎來(lái)共同決定。
初始時(shí)刻,ENABLE為全1,F(xiàn)REE為全1,那么AVALIABLE也為全1,所有引擎均可用。一旦前級(jí)模塊有數(shù)據(jù)準(zhǔn)備好,SELECT僅bit0為1,立即分配到引擎0中處理,將FREE[0]清零。如果前級(jí)模塊有數(shù)據(jù)準(zhǔn)備好,此時(shí)SELECT僅bit1為1,將立即分配到引擎1中處理,將FREE[1]清零。當(dāng)引擎0工作完成將結(jié)果保存好后,釋放引擎0,將FREE[0]置1。以此類推,一旦前級(jí)模塊準(zhǔn)備好數(shù)據(jù),從可用引擎中選擇一個(gè)引擎,立即將數(shù)據(jù)傳遞到這個(gè)引擎中,釋放前一級(jí)模塊資源。
本發(fā)明均支持多個(gè)相同、獨(dú)立的執(zhí)行單元,即工作引擎,執(zhí)行具體功能,對(duì)數(shù)據(jù)進(jìn)行并行處理,隱藏模塊之間數(shù)據(jù)的傳輸時(shí)間,加快處理速度,提高工作效率。只要有一個(gè)或一個(gè)以上的空閑引擎,就允許接收數(shù)據(jù),這樣能盡快釋放前級(jí)模塊資源,保證幀的線性收發(fā)。提供寄存器接口靈活配置工作引擎的數(shù)目。支持單引擎模式,即只有一個(gè)引擎工作,方便硬件調(diào)試定位錯(cuò)誤;支持多個(gè)引擎并行工作,隱藏傳輸和處理時(shí)間,提高工作效率。在具體應(yīng)用中,根據(jù)實(shí)際情況配置引擎數(shù)目,平衡資源和速度兩者關(guān)系,實(shí)現(xiàn)性能的最優(yōu)。監(jiān)控所有引擎的空閑/忙碌狀態(tài),在前一次分配的引擎的基礎(chǔ)上,選用一個(gè)可用引擎,將前級(jí)模塊的數(shù)據(jù)保存到該引擎對(duì)應(yīng)的寄存器中,盡快釋放前級(jí)模塊的資源,保證數(shù)據(jù)包的線性收發(fā)。
綜上所述,本發(fā)明支持通過(guò)寄存器靈活配置實(shí)際工作的引擎數(shù)目,根據(jù)具體應(yīng)用需求配置引擎數(shù)目、平衡資源和速度,實(shí)現(xiàn)性能最優(yōu);只要有一個(gè)以上空閑引擎,就可以接收數(shù)據(jù),釋放前級(jí)模塊資源,隱藏模塊之間數(shù)據(jù)傳輸和處理的時(shí)間,提高工作效率;后續(xù)引擎數(shù)目的擴(kuò)展方便,只需要簡(jiǎn)單改動(dòng)。本發(fā)明支持軟件根據(jù)具體應(yīng)用靈活配置工作引擎的數(shù)目,便于選擇處理速度和資源占用的最優(yōu)情況。
本發(fā)明支持靈活配置工作引擎的數(shù)目,根據(jù)具體應(yīng)用需求選擇合適的引擎數(shù)目,平衡資源占用和處理速度。既支持單個(gè)引擎工作,便于硬件調(diào)試;也支持多個(gè)工作引擎并行處理數(shù)據(jù),隱藏?cái)?shù)據(jù)傳輸?shù)臅r(shí)間。只要有一個(gè)或一個(gè)以上空閑的引擎就可以接收前一級(jí)模塊傳來(lái)的數(shù)據(jù),盡快釋放前一級(jí)模塊資源,保證幀的線性收發(fā)。本發(fā)明對(duì)引擎分配的結(jié)構(gòu)進(jìn)行優(yōu)化,僅用4個(gè)寄存器和簡(jiǎn)單的仲裁邏輯,實(shí)現(xiàn)從當(dāng)前可用的引擎中選擇一個(gè),接收前級(jí)模塊的數(shù)據(jù),加快處理速度,提高資源利用率,實(shí)現(xiàn)性能的最優(yōu)。
以上所述的具體實(shí)施例,對(duì)本發(fā)明的解決的技術(shù)問(wèn)題、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。