專利名稱:一種使用網(wǎng)絡(luò)處理器微引擎控制pci器件的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)處理器技術(shù),具體涉及使用網(wǎng)絡(luò)處理器控制PCI(周邊元件擴展接口)器件的技術(shù)。
背景技術(shù):
IXP1200處理器是Intel(因特爾)公司推出的第一代網(wǎng)絡(luò)處理器,集成了一個Strong ARM核和六個微引擎,目前ARM核與微引擎的運行頻率為233MHz。IXP1200處理器提供符合PCI2.1標準的32位PCI總線單元,其工作頻率可以是33MHz或66MHz(點對點),PCI單元中的兩個DMA(直接內(nèi)存訪問)通道用于SDRAM(同步動態(tài)隨機存儲器)和外部PCI設(shè)備間數(shù)據(jù)傳輸。ARM核可以完全訪問PCI總線單元,而微引擎只能通過DMA方式在SDRAM內(nèi)對PCI單元進行訪問。
RS8234芯片是MINDSPEED(敏迅)公司推出的155M全雙工ATM SAR(異步傳輸模式的分段和重組)芯片,支持AAL0,AAL5,AAL3/4(ATM適配層協(xié)議),其分段和重組分別由分段處理器和重組處理器處理,分段和重組的流量、速率的管理由xBR業(yè)務(wù)管理器實現(xiàn),它可實現(xiàn)CBR(連續(xù)比特率)、VBR(可變比特率)、UBR(未定比特率)和ABR(可用比特率)的管理,提供符合PCI2.1標準的33M/32bit的PCI總線,并提供Utopia Level 1接口。
IXP1200處理器和RS8234芯片通過PCI總線互聯(lián)可以完成ATM信元以太網(wǎng)包的轉(zhuǎn)換,IXP1200處理器作為PCI總線的Host(主機),RS8234芯片提供了一系列的隊列機制以便IXP1200處理器控制RS8234芯片完成ATM接口的分段和重組工作。
現(xiàn)有技術(shù)使用IXP1200處理器的ARM核通過中斷或查詢方式來維護RS8234芯片的隊列,由于ARM核要不停地維護RS8234芯片的隊列,對于1500字節(jié)的長包RS8234芯片雖然基本可以達到線速,但是對ARM核的占用率非常高,接近100%;而對于64字節(jié)的短包當(dāng)ARM核占用率接近100%時,RS8234芯片只能達到30M左右的處理能力,性能嚴重下降。
同樣地,當(dāng)一個具有類似結(jié)構(gòu)的多核網(wǎng)絡(luò)處理器作為PCI總線的主機來控制PCI器件時,如果只使用網(wǎng)絡(luò)處理器的控制面處理器核(類似于IXP1200處理器中的Strong ARM核)來控制PCI器件也往往會導(dǎo)致網(wǎng)絡(luò)處理器的控制面處理器核占用率過高,從而影響網(wǎng)絡(luò)處理器的控制面處理器核的處理能力,同時由于控制面處理器核的占用率過高也會降低PCI器件的性能發(fā)揮。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是克服現(xiàn)有技術(shù)中使用網(wǎng)絡(luò)處理器控制PCI器件時,網(wǎng)絡(luò)處理器的控制面處理器核占用率過高及PCI器件性能降低的缺點,提出一種使用網(wǎng)絡(luò)處理器微引擎控制PCI器件的方法。
本發(fā)明方法包括以下步驟步驟一,使用網(wǎng)絡(luò)處理器的控制面處理器核對PCI器件進行初始化;步驟二,使用一個或多個微引擎控制PCI器件,微引擎通過DMA方式向PCI器件提交數(shù)據(jù)。
與現(xiàn)有技術(shù)相比,由于本發(fā)明方法使用網(wǎng)絡(luò)處理器的微引擎控制PCI器件,使得網(wǎng)絡(luò)處理器的控制面處理器核只須負責(zé)初始化工作和一些異常處理工作,有效降低了控制面處理器核的占用率,同時根據(jù)具體情況使用一個或多個微引擎控制PCI器件,并且微引擎通過DMA方式向PCI器件提交數(shù)據(jù),可以最大限度地發(fā)揮PCI器件的性能。
圖1是本發(fā)明中發(fā)送微引擎的主處理流程圖;圖2是本發(fā)明中發(fā)送微引擎提交數(shù)據(jù)報文的流程圖;圖3是本發(fā)明中發(fā)送微引擎處理狀態(tài)隊列的流程圖;圖4是本發(fā)明中接收微引擎的主處理流程圖;圖5是本發(fā)明中接收微引擎處理狀態(tài)隊列的流程圖;圖6是本發(fā)明中接收微引擎添加新項到緩沖區(qū)隊列的流程圖。
具體實施例方式下面結(jié)合
本發(fā)明的具體應(yīng)用。
在由IXP1200處理器和RS8234芯片構(gòu)成的ATM信元與以太網(wǎng)包轉(zhuǎn)換的系統(tǒng)中,本發(fā)明方法采用IXP1200處理器的微引擎來處理RS8234芯片的ATM收發(fā)工作,而由ARM核負責(zé)RS8234芯片的初始化工作和異常處理工作,這樣ARM核的占用率大大降低,同時RS8234芯片也可以達到線速轉(zhuǎn)發(fā)。
IXP1200處理器具有六個微引擎,本實施例采用其中一個微引擎即發(fā)送微引擎負責(zé)ATM口發(fā)送工作。發(fā)送微引擎的四個線程中一個線程完成發(fā)送微引擎的初始化工作,此后四個線程開始發(fā)送工作。發(fā)送微引擎的工作分為兩部分通過DMA方式向RS8234芯片提交要發(fā)送的PDU(協(xié)議數(shù)據(jù)單元)報文;從RS8234芯片的狀態(tài)隊列中提取發(fā)送結(jié)果。
本實施例采用IXP1200處理器中的另一個微引擎即接收微引擎負責(zé)ATM口接收工作。接收微引擎的四個線程中一個線程完成接收微引擎的初始化工作,此后四個線程開始接收工作,其微碼完全相同。接收微引擎的工作分為兩部分查詢及處理接收狀態(tài)隊列;向SARFBQ(即RS8234芯片的空閑緩沖區(qū)隊列)添加新項。
RS8234芯片的控制隊列,即分片用的發(fā)送隊列和重組用的空閑緩沖區(qū)隊列,采用同樣的隊列管理方式工作。這些隊列存于RS8234芯片的本地SRAM(靜態(tài)存儲器)中,由隊列相關(guān)的基址寄存器指向這些隊列位置。Host(即IXP1200處理器)和SAR(即RS8234)芯片通過表一所示參數(shù)來操縱這些隊列。
表一只寫控制隊列參數(shù)
SAR芯片通過狀態(tài)隊列參數(shù)向Host報告分片或重組相關(guān)的狀態(tài),這些隊列置于Host存儲區(qū)中,采用統(tǒng)一的算法管理。為了操縱這些隊列,SAR芯片設(shè)置了表二所示參數(shù)。
表二只寫狀態(tài)隊列參數(shù)
SAR芯片ATM收發(fā)在啟動階段首先由Host的ARM核進行初始化工作,包括以下步驟步驟一置IXP1200處理器的DMA_INTER_MODE寄存器為2,表示由微引擎完全控制IXP1200處理器的兩個DMA通道;步驟二初始化SAR芯片(作為PCI器件),將其本地SDRAM空間映射到ARM核存儲空間,設(shè)置SAR芯片各寄存器初始值,清空SAR芯片中分片相關(guān)的發(fā)送隊列和重組相關(guān)的空閑緩沖區(qū)隊列;為字節(jié)序處理簡單,需要將SAR芯片的CONFIG0寄存器第12比特ENDIAN域設(shè)置為1;步驟三創(chuàng)建SAR芯片的分片和重組VCC(虛通道連接)表;步驟四啟動SAR芯片。
圖1描述了IXP1200處理器的發(fā)送微引擎主處理流程,其中消息隊列包括兩個隊列,分別接收來自ARM核和其他微引擎的發(fā)包請求。發(fā)送微引擎主處理流程步驟如下步驟101發(fā)送微引擎線程初始化;步驟102判斷消息隊列中是否有發(fā)送請求,如果有執(zhí)行步驟103,否則執(zhí)行步驟104;步驟103處理發(fā)送請求,提交PDU報文到SAR芯片,執(zhí)行步驟104;步驟104判斷狀態(tài)隊列中是否有新加入項,如果有則執(zhí)行步驟105,否則執(zhí)行步驟102;步驟105處理狀態(tài)隊列,執(zhí)行步驟104。
其中,步驟101發(fā)送微引擎線程初始化流程如下步驟一初始化一個Free list(自由列表)供發(fā)送PDU報文的緩沖區(qū)描述符使用,該Free list對應(yīng)的緩沖區(qū)實際在SAR芯片側(cè),而不是Host的本地SDRAM;步驟二初始化SAR芯片中發(fā)送隊列的WRITE指針和狀態(tài)隊列的READ指針;步驟三初始化臨界區(qū)信號量和全局絕對變量;步驟四通知發(fā)送微引擎的其他線程開始工作,進入工作流程。
圖2描述了發(fā)送微引擎提交PDU報文到SAR芯片的流程,包括以下步驟步驟201消息隊列收到消息;步驟202解析消息中的各參數(shù);步驟203根據(jù)VPI/VCI(虛路徑標識/虛通道標識)查VCC表,判斷VPI/VCI是否合法,如合法則執(zhí)行步驟204,否則執(zhí)行步驟213;步驟204判斷此VCC中PDU請求是否已達到上限,如果是執(zhí)行步驟213,否則執(zhí)行步驟205;步驟205進入ATM_Send臨界區(qū),ATM_Send臨界區(qū)內(nèi)的工作需要在線程間互斥,如WRITE指針的更新,這個變量是四個線程共享的;步驟206判斷寫指針WRITE加1是否等于READ_UD,如果是則執(zhí)行步驟214,否則執(zhí)行步驟207;步驟207POP一個緩沖區(qū),如果成功則執(zhí)行步驟208,否則執(zhí)行步驟214;步驟208寫指針加1;步驟209退出ATM_Send臨界區(qū);步驟210組裝緩沖區(qū)描述符;步驟211組裝空閑隊列項;步驟212將描述符和空閑隊列項通過PCI DMA寫入SAR芯片,執(zhí)行步驟215;步驟213釋放PDU報文,進行異常統(tǒng)計,執(zhí)行步驟215;步驟214退出ATM_Send臨界區(qū),釋放PDU報文,進行異常統(tǒng)計;步驟215VCC中PDU請求加1;步驟216轉(zhuǎn)入SAR芯片狀態(tài)隊列檢查流程。
圖3描述了發(fā)送微引擎處理狀態(tài)隊列的流程,包括以下步驟步驟301流程開始;步驟302進入臨界區(qū)ATM_SEG_STATUS;步驟303根據(jù)狀態(tài)隊列當(dāng)前READ指針找到對應(yīng)隊列項;步驟304判斷隊列項中VLD位是否已設(shè)置,如果已設(shè)置則執(zhí)行步驟305,否則執(zhí)行步驟313;
步驟305提取隊列項中信息,包括緩沖區(qū)信息,VCC_Index,再清除此項的VLD位;步驟306READ指針加1;步驟307退出臨界區(qū)ATM_SEG_STATUS;步驟308判斷UPDATE是否大于或等于16,如果是執(zhí)行步驟309,否則執(zhí)行步驟310;步驟309更新READ_UD指針;步驟310判斷SAR芯片返回信息是否合法,如果合法則執(zhí)行步驟311,否則執(zhí)行步驟314;步驟311VCC表項中ActiveBDNum加1;步驟312釋放包緩沖區(qū),執(zhí)行步驟302;步驟313退出臨界區(qū)ATM_SEG_STATUS;步驟314流程結(jié)束。
以上流程中,微引擎從當(dāng)前READ指針開始檢查狀態(tài)隊列,直到遇到VLD未設(shè)置的隊列項為止。
圖4描述了接收微引擎的主處理流程,包括以下步驟步驟401接收微引擎線程初始化;步驟402判斷狀態(tài)隊列中是否有新加入項,如果有則執(zhí)行步驟403,否則執(zhí)行步驟404;步驟403處理接收到的PDU報文;步驟404向FBQ添加新項,執(zhí)行步驟402。
其中,步驟401接收微引擎線程初始化流程如下步驟一初始化一個Free list緩沖區(qū),用來存放接收到的PDU報文和緩沖區(qū)描述符;步驟二向SAR芯片的FBQ隊列添加表目,其數(shù)目是FBQ表項數(shù)目減1;步驟三初始化接收狀態(tài)隊列READ指針和FBQ的WRITE指針;
步驟四初始化臨界區(qū)和全局絕對變量;步驟五通知接收微引擎的其他線程開始工作,進入工作流程。
圖5描述了接收微引擎處理接收狀態(tài)隊列的流程,包括以下步驟步驟501流程開始;步驟502進入RCV_SATATUS臨界區(qū);步驟503判斷當(dāng)前READ指針指向的接收狀態(tài)隊列VLD標志是否已設(shè)置,如果已設(shè)置則執(zhí)行步驟504,否則執(zhí)行步驟511;步驟504從當(dāng)前隊列項中提取有用信息;步驟505READ指針加1,UPDATE加1;步驟506退出RCV_SATATUS臨界區(qū);步驟507判斷UPDATE是否大于或等于16,如果是則執(zhí)行步驟508,否則執(zhí)行步驟509;步驟508將UPDATE清零,更新接收狀態(tài)隊列中的READ_UD;步驟509判斷提取的信息中包括VPI/VCI和PDU信息是否合法,如果合法則執(zhí)行步驟510,否則執(zhí)行步驟512;步驟510將PDU發(fā)送合適的消息隊列供ARM核或其他微引擎處理,執(zhí)行步驟513;步驟511退出RCV_SATATUS臨界區(qū),執(zhí)行步驟513;步驟512釋放PDU緩沖區(qū),執(zhí)行步驟513;步驟513接收微引擎處理狀態(tài)隊列流程結(jié)束。
圖6描述了接收微引擎向SAR FBQ添加新項的流程,包括以下步驟步驟601流程開始;步驟602進入RSM_FBQ臨界區(qū);步驟603判斷FBQ隊列中的WRITE指針加1是否等于READ_UD,如果是則執(zhí)行步驟608,否則執(zhí)行步驟604;
步驟604從Free list中取出一個緩沖區(qū),如果成功則執(zhí)行步驟605,否則執(zhí)行步驟608;步驟605WRITE指針加1;步驟606退出RSM_FBQ臨界區(qū);步驟607組裝FBQ表項并通過PCI寫添加到SAR FBQ中,執(zhí)行步驟602;步驟608退出RSM_FBQ臨界區(qū);步驟609流程結(jié)束。
對于和IXP1200處理器具有類似結(jié)構(gòu)的多核網(wǎng)絡(luò)處理器來說,當(dāng)作為PCI總線的主機來控制PCI器件時,也可以參照本發(fā)明實施例,并根據(jù)PCI器件的結(jié)構(gòu)特點采用一個或多個網(wǎng)絡(luò)處理器的微引擎來控制PCI器件,這樣可以最大限度的降低網(wǎng)絡(luò)處理器的控制面處理器的占用率,并充分發(fā)揮PCI器件的性能。
權(quán)利要求
1.一種使用網(wǎng)絡(luò)處理器微引擎控制PCI器件的方法,包括以下步驟步驟一,使用網(wǎng)絡(luò)處理器的控制面處理器核對PCI器件進行初始化;步驟二,使用一個或多個微引擎控制PCI器件,微引擎通過直接內(nèi)存訪問方式向PCI器件提交數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,PCI器件在啟動階段首先由控制面處理器核進行初始化工作,包括以下步驟步驟a設(shè)置PCI器件各寄存器初始值,由微引擎完全控制PCI器件的直接內(nèi)存訪問通道;步驟b將PCI器件本地同步動態(tài)隨機存儲器空間映射到控制面處理器核存儲空間,清空PCI器件中的發(fā)送隊列和空閑緩沖區(qū)隊列;步驟c創(chuàng)建PCI器件的分片和重組虛通道連接表;步驟d啟動PCI器件。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述網(wǎng)絡(luò)處理器的微引擎至少包括發(fā)送微引擎和接收微引擎,所述發(fā)送微引擎負責(zé)通過直接內(nèi)存訪問方式向PCI器件提交要發(fā)送的協(xié)議數(shù)據(jù)單元報文以及負責(zé)從PCI器件的狀態(tài)隊列中提取發(fā)送結(jié)果;所述接收微引擎負責(zé)查詢及處理接收狀態(tài)隊列以及向PCI器件的空閑緩沖區(qū)隊列添加新項。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述發(fā)送微引擎的主處理流程包括以下步驟步驟e發(fā)送微引擎線程初始化;步驟f判斷消息隊列中是否有發(fā)送請求,如果有執(zhí)行步驟g,否則執(zhí)行步驟h;步驟g處理發(fā)送請求,提交協(xié)議數(shù)據(jù)單元報文到PCI器件,執(zhí)行步驟h步驟h判斷狀態(tài)隊列中是否有新加入項,如果有則執(zhí)行步驟i,否則執(zhí)行步驟f;步驟i處理狀態(tài)隊列,執(zhí)行步驟g。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,發(fā)送微引擎線程初始化包括以下步驟步驟e1初始化一個自由列表供發(fā)送協(xié)議數(shù)據(jù)單元報文的緩沖區(qū)描述符使用,該自由列表對應(yīng)的緩沖區(qū)在PCI器件側(cè);步驟e2初始化PCI器件中發(fā)送隊列的寫指針和狀態(tài)隊列的讀指針;步驟e3初始化臨界區(qū)信號量和全局絕對變量;步驟e4通知發(fā)送微引擎的其他線程開始工作,進入工作流程。
6.根據(jù)權(quán)利要求3所述的方法,其特征在于,接收微引擎的主處理流程包括以下步驟步驟j接收微引擎線程初始化;步驟k判斷狀態(tài)隊列中是否有新加入項,如果有則執(zhí)行步驟l,否則執(zhí)行步驟m;步驟l處理接收到的協(xié)議數(shù)據(jù)單元報文;步驟m向空閑緩沖區(qū)隊列添加新項,執(zhí)行步驟k。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,接收微引擎線程初始化流程包括以下步驟步驟j1初始化一個自由列表緩沖區(qū),用來存放接收到的協(xié)議數(shù)據(jù)單元報文和緩沖區(qū)描述符;步驟j2向PCI器件的空閑緩沖區(qū)隊列添加表目,其數(shù)目是空閑緩沖區(qū)隊列表項數(shù)目減1;步驟j3初始化接收狀態(tài)隊列的讀指針和空閑緩沖區(qū)隊列的寫指針;步驟j4初始化臨界區(qū)和全局絕對變量;步驟j5通知接收微引擎的其他線程開始工作,進入工作流程。
8.根據(jù)權(quán)利要求1到7任一項所述的方法,其特征在于,所述網(wǎng)絡(luò)處理器的控制面處理器核還負責(zé)PCI器件異常處理。
全文摘要
本發(fā)明提供一種使用網(wǎng)絡(luò)處理器微引擎控制PCI器件的方法,包括以下步驟步驟一,使用網(wǎng)絡(luò)處理器的控制面處理器核對PCI器件進行初始化;步驟二,使用一個或多個微引擎控制PCI器件,微引擎通過DMA方式向PCI器件提交數(shù)據(jù)。本發(fā)明方法使用網(wǎng)絡(luò)處理器的微引擎控制PCI器件,有效降低了控制面處理器核的占用率,同時使用一個或多個微引擎通過DMA方式向PCI器件提交數(shù)據(jù),可以最大限度地發(fā)揮PCI器件的性能。
文檔編號H04L12/56GK1741455SQ20041007508
公開日2006年3月1日 申請日期2004年8月29日 優(yōu)先權(quán)日2004年8月29日
發(fā)明者王吉文, 熊先奎, 朱冰, 張啟明 申請人:中興通訊股份有限公司