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