專利名稱:維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,尤其涉及一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法
及裝置。
背景技術(shù):
目前,在通信芯片的多播過程中,通常是在創(chuàng)建多播PD (packetdiscriptor,報(bào)文 描述符)的時(shí)候把片外的多播計(jì)數(shù)器的計(jì)數(shù)值置為0,將多播報(bào)文復(fù)制成若干不確定的份 數(shù)以后,再把復(fù)制份數(shù)加到多播計(jì)數(shù)器上。上述復(fù)制后的各個(gè)多播報(bào)文具有相同的指針,上 述復(fù)制后的多播報(bào)文每出隊(duì)一次,對多播計(jì)數(shù)器的計(jì)數(shù)值做減1操作。對多播計(jì)數(shù)器的計(jì)數(shù)值進(jìn)行一次完整的加/減操作的過程主要包括向通信芯片 中的讀仲裁器發(fā)出讀片外的多播計(jì)數(shù)器的讀請求,在接收到讀仲裁器返回的響應(yīng)后,從片 外多播PD中讀出多播計(jì)數(shù)器的計(jì)數(shù)值。然后,將讀出的上述計(jì)數(shù)值和需要寫入的值進(jìn)行加 /減操作,再將得到的結(jié)果再寫回到多播計(jì)數(shù)器的計(jì)數(shù)值。由于上述多播計(jì)數(shù)器存放在片外同步靜態(tài)存儲器,例如QDR2 SRAM (Dynamic Random Access Memory,同步靜態(tài)存儲器),從發(fā)出讀請求到返回多播計(jì)數(shù)器的計(jì)數(shù)值之間 的延時(shí)可達(dá)到10個(gè)周期左右,將最后得到的結(jié)果寫回多播計(jì)數(shù)器中也需要延時(shí),因此對多 播計(jì)數(shù)器一個(gè)完整的加/減操作至少需要十幾個(gè)周期的延時(shí)才能完成。常用的片外QDR2 SRAM的時(shí)鐘頻率為250MHz_400MHz,按照250MHz時(shí)鐘頻率計(jì)算, 多播計(jì)數(shù)器的處理速率最多只有250MHz/18 = 13.888MPPS。在現(xiàn)在網(wǎng)絡(luò)應(yīng)用中,4X IOG 以太網(wǎng)報(bào)文的處理要求已經(jīng)達(dá)到60MPPS,P0S(SDH上傳送IP,IP over SDH)報(bào)文達(dá)到 100MPPS,遠(yuǎn)大于上面多播計(jì)數(shù)器的處理速率。所以,上述對多播計(jì)數(shù)器的計(jì)數(shù)值進(jìn)行加/ 減操作的比較長的延時(shí)將造成通信芯片的報(bào)文出隊(duì)性能受到限制。為解決上述通信芯片的報(bào)文出隊(duì)性能受到限制的問題,現(xiàn)有技術(shù)中的一種維護(hù)多 播計(jì)數(shù)器的計(jì)數(shù)值的方法為利用片內(nèi)存儲器訪問快的特點(diǎn),將多播計(jì)數(shù)器的計(jì)數(shù)值緩存 在片內(nèi)。在實(shí)現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)該方法存在如下問題由于片內(nèi)存儲器容量受 到限制,該方法不能適應(yīng)多播報(bào)文數(shù)量大、速率快的情況。現(xiàn)有技術(shù)中的另一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法為對同一個(gè)多播計(jì)數(shù)器的 計(jì)數(shù)值進(jìn)行加/減操作不允許并行交織處理,只有在上一個(gè)加/減操作完成以后,才能進(jìn)行 下一個(gè)加/減操作。在實(shí)現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)該方法存在如下問題在實(shí)際應(yīng)用中,同一個(gè)多 播報(bào)文有可能復(fù)制到不同的隊(duì)列,完全可能并行出隊(duì),要是出于對多播計(jì)數(shù)器維護(hù)簡單而 串行處理,就會把通信芯片的多播報(bào)文的轉(zhuǎn)發(fā)性能減到非常低,無法滿足性能要求。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供了一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法及裝置,以適應(yīng)多播報(bào)文數(shù)量大、速率快的情況,并且系統(tǒng)的多播報(bào)文的轉(zhuǎn)發(fā)性能。一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法,包括獲得待出隊(duì)的多播報(bào)文; 為所述待出隊(duì)的多播報(bào)文分配引擎,并記錄操作值,所述操作值用于記錄多播報(bào) 文的出隊(duì)的數(shù)量信息;根據(jù)其它的多播報(bào)文的出隊(duì)情況更新所述操作值;根據(jù)所述操作值更新多播計(jì)數(shù)器的計(jì)數(shù)值。一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的裝置,包括引擎分配模塊,用于獲得待出隊(duì)的多播報(bào)文,為所述待出隊(duì)的多播報(bào)文分配引 擎;操作值累加模塊,用于給所述待出隊(duì)的多播報(bào)文記錄操作值,根據(jù)其它的多播報(bào) 文的出隊(duì)情況更新所述操作值,所述操作值用于記錄多播報(bào)文的出隊(duì)數(shù)量的信息;操作值寫入模塊,用于根據(jù)所述操作值來更新多播計(jì)數(shù)器的計(jì)數(shù)值。由上述本發(fā)明的實(shí)施例提供的技術(shù)方案可以看出,本發(fā)明實(shí)施例通過將具有相同 指針的多個(gè)多播報(bào)文對同一個(gè)多播計(jì)數(shù)器的計(jì)數(shù)值的操作值進(jìn)行累加,可以在一定程度上 緩解數(shù)量大、速率快的多播報(bào)文對QDR、DDR等通用高速存儲器帶寬的沖擊,并且能夠保證 系統(tǒng)的報(bào)文轉(zhuǎn)發(fā)性能。
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例描述中所需要使用 的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本 領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他 的附圖。圖1為本發(fā)明實(shí)施例一提供的一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法的處理流程 圖;圖2為本發(fā)明實(shí)施例二提供的一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法的處理流程 圖;圖3為本發(fā)明實(shí)施例提供了一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的裝置的具體實(shí)現(xiàn)結(jié) 構(gòu)圖。
具體實(shí)施例方式在本發(fā)明實(shí)施例中,將具有相同指針的多個(gè)多播報(bào)文對同一個(gè)多播計(jì)數(shù)器的計(jì)數(shù) 值的操作值進(jìn)行累加。具體為在通信設(shè)備的內(nèi)部設(shè)置內(nèi)容可尋址的寄存器,該寄存器中設(shè) 置一定數(shù)量的引擎。給具有相同指針的多個(gè)多播報(bào)文分配同一個(gè)引擎,在所述寄存器中保 存所述多個(gè)多播報(bào)文的指針和所述分配的引擎的引擎號的對應(yīng)信息,并且,在所述寄存器 中的引擎緩存中以所述分配的引擎的引擎號標(biāo)記一個(gè)地址,在該地址上保存所述多個(gè)多播 報(bào)文對同一個(gè)多播計(jì)數(shù)器的計(jì)數(shù)值的操作值的累加值。獲取所述多播計(jì)數(shù)器的計(jì)數(shù)值,將該計(jì)數(shù)值和所述累加值相加,將獲得的結(jié)果再 寫入到所述多播計(jì)數(shù)器的計(jì)數(shù)值中。
為便于對本發(fā)明實(shí)施例的理解,下面將結(jié)合附圖以幾個(gè)具體實(shí)施例為例做進(jìn)一步 的解釋說明,且各個(gè)實(shí)施例并不構(gòu)成對本發(fā)明實(shí)施例的限定。實(shí)施例一該實(shí)施例提供的一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法的處理流程如圖1所示,本 發(fā)明實(shí)施例所提供的維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法,作用于一種通信設(shè)備中,所述通信 設(shè)備中包括通信芯片,以及設(shè)于通信芯片外的多播計(jì)數(shù)器,本發(fā)明實(shí)施例在通信芯片的內(nèi) 部設(shè)置CAM(內(nèi)容可尋址寄存器),該CAM中設(shè)置一定數(shù)量的引擎,比如,十幾個(gè)引擎。上述 CAM中的引擎可以分配給多播報(bào)文。 本發(fā)明實(shí)施例所提供的維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法包括如下處理步驟步驟11、獲得待出隊(duì)的多播報(bào)文。當(dāng)一個(gè)多播報(bào)文需要在出隊(duì)之前,首先查看CAM中有沒有空閑引擎,如果沒有空 閑引擎,上述多播報(bào)文就停止出隊(duì);如果有空閑引擎,則上述多播報(bào)文可以出隊(duì),獲得去 CAM匹配報(bào)文的指針的資格。當(dāng)然,本發(fā)明實(shí)施例中所述的空閑引擎包括已經(jīng)為所述多播報(bào) 文分配過引擎,以及有引擎處于未分配狀態(tài)這兩種情況。上述多播報(bào)文的指針在多播報(bào)文生成后就形成了,在本發(fā)明實(shí)施例中,所述多播 報(bào)文的指針可以采用所述多播報(bào)文的目的地址,在其他可選擇的實(shí)施例中,所述指針也可 以根據(jù)所述多播報(bào)文的其他信息映射得到,比如查表。步驟12、判斷是否已經(jīng)為所述多播報(bào)文分配引擎,如果是的話,執(zhí)行步驟15 ;否 貝1J,執(zhí)行步驟13。在本發(fā)明實(shí)施例中,在上述通信芯片的CAM中還保存有各個(gè)引擎的匹配信息,如 果所述CAM中的某一引擎已經(jīng)被某一多播報(bào)文所占用,則所述CAM中就會保存有所述多播 報(bào)文的指針與所述被占用的引擎的引擎號的對應(yīng)信息,從而在本發(fā)明實(shí)施例中,判斷CAM 是否已經(jīng)為多播報(bào)文分配引擎可以通過查找多播報(bào)文的指針是否已經(jīng)被包含在所述對應(yīng) 信息中來進(jìn)行。步驟13、為多播報(bào)文分配一個(gè)空閑的引擎,在CAM里對應(yīng)保存上述多播報(bào)文的指 針和上述引擎的引擎號之間的對應(yīng)信息,并為所述引擎保存一個(gè)操作值。當(dāng)上述多播報(bào)文的指針在CAM中保存的上述對應(yīng)信息中沒有匹配上時(shí),給上述多 播報(bào)文分配一個(gè)空閑的引擎,在CAM里對應(yīng)保存上述多播報(bào)文的指針和上述引擎的引擎號 之間的對應(yīng)信息。然后,在CAM中的緩存空間中用上述多播報(bào)文的指針對應(yīng)的引擎的引擎 號標(biāo)記一個(gè)地址,在該地址上保存一個(gè)操作值。所述操作值用于表示所述多播報(bào)文的出隊(duì)情況,并對多播計(jì)數(shù)器的計(jì)數(shù)值進(jìn)行更 新。在本發(fā)明實(shí)施例中,在將多播報(bào)文出隊(duì)之前,已經(jīng)將多播報(bào)文復(fù)制一定數(shù)量的份數(shù),比 如為N份。并且將多播報(bào)文復(fù)制的份數(shù)寫入到多播計(jì)數(shù)器的計(jì)數(shù)值中。每個(gè)報(bào)文出隊(duì),需要 完成將多播計(jì)數(shù)器的計(jì)數(shù)值減一的操作,直到最后一個(gè)報(bào)文出隊(duì),多播計(jì)數(shù)器的計(jì)數(shù)值被 減為0。因此,開始由于只有一個(gè)報(bào)文需要出隊(duì),上述操作值的初始值取-1。本發(fā)明實(shí)施例 可以并行處理多個(gè)報(bào)文出隊(duì),在多播報(bào)文不斷出隊(duì)的情況下,所述操作值也會不斷的更新, 比如-1、-2、-3等等。步驟14、從片外存儲器返回的多播報(bào)文中提取出多播計(jì)數(shù)器的計(jì)數(shù)值,根據(jù)所述 計(jì)數(shù)值更新所述操作值,將更新后的操作值再寫回到引擎緩存中。
在完成為所述引擎保存所述操作值后,需要讀出多播計(jì)數(shù)器的計(jì)數(shù)值,將所述操 作值更新到多播計(jì)數(shù)器的計(jì)數(shù)值中,以及時(shí)釋放所述引擎。更新所述多播報(bào)文的計(jì)數(shù)器的 計(jì)數(shù)值,可以先將所述計(jì)數(shù)值讀取出來,根據(jù)所述操作值進(jìn)行更新后,再將更新后的計(jì)數(shù)值 寫回到計(jì)數(shù)器中。在本發(fā)明實(shí)施例中,由于所述操作值采用-1、-2、-3這樣的直接描述出隊(duì) 狀況的值,因此可以直接將所述操作值與所述計(jì)數(shù)值相加,且相加后將所述操作值清0,以 待新的多播報(bào)文準(zhǔn)備出隊(duì)后再重新計(jì)數(shù)。將上述多播報(bào)文的指針對應(yīng)的引擎的引擎號設(shè)置在上述多播報(bào)文的伴隨信息里, 將上述多播報(bào)文從通信芯片發(fā)送給保存多播計(jì)數(shù)器的片外存儲器,該片外存儲器可以為 QDR、SDRAM或DDR等通用高速存儲器。片外存儲器接收到上述多播報(bào)文后,將多播計(jì)數(shù)器的計(jì)數(shù)值設(shè)置在上述多播報(bào)文 的PD中,然 后,將上述多播報(bào)文返回給通信芯片。通信芯片接收到上述片外存儲器返回的多播報(bào)文后,從多播報(bào)文的PD中提取出 多播計(jì)數(shù)器的計(jì)數(shù)值。然后,用多播報(bào)文的伴隨信息里的上述引擎的引擎號所標(biāo)記的地址 去查詢引擎緩存,獲取相應(yīng)的操作值。如果在上述讀取多播計(jì)數(shù)器的計(jì)數(shù)值的過程中,沒有 其它的多播報(bào)文需要出隊(duì),上述操作值沒有被更新,則上述操作值為-ι ;如果有其它的多 播報(bào)文需要出隊(duì),則上述操作值可能被更新為-2、_3等等。通信芯片用上述多播計(jì)數(shù)器的計(jì)數(shù)值加上上述相應(yīng)的操作值,即將上述多播計(jì)數(shù) 器的計(jì)數(shù)值減1、2、3等等,將獲得的結(jié)果再保存在引擎緩存中的上述引擎的引擎號所標(biāo)記 的地址上,即代替原來所保存的操作值。對多播計(jì)數(shù)器的計(jì)數(shù)值減1,實(shí)際上是將多播計(jì)數(shù)器的計(jì)數(shù)值加17’ hlffff,效果 完全一樣,本發(fā)明實(shí)施例將對多播計(jì)數(shù)器的計(jì)數(shù)值的加減操作全統(tǒng)一成加操作,簡化了處 理流程。執(zhí)行步驟16。步驟15、以上述多播報(bào)文的指針對應(yīng)的引擎的引擎號去查詢引擎緩存,獲取相應(yīng) 的操作值,將該操作值更新后,將獲得的結(jié)果再寫回到引擎緩存中。當(dāng)上述多播報(bào)文的指針在CAM中匹配上時(shí),則說明具有相同指針的其他多播報(bào)文 已經(jīng)去讀片外多播計(jì)數(shù)器的計(jì)數(shù)值或者已經(jīng)讀回片外計(jì)數(shù)器的計(jì)數(shù)值,但是還沒有完成寫 入。獲取在CAM中保存的上述多播報(bào)文的指針對應(yīng)的引擎的引擎號,用該對應(yīng)的引擎 號所標(biāo)記的地址去查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值加上減1以后,將獲得的 結(jié)果再寫入到上述對應(yīng)的引擎號所標(biāo)記的地址中。當(dāng)有多個(gè)多播報(bào)文接連出隊(duì)時(shí),上述步驟15的處理過程可以重復(fù)不斷地被執(zhí)行, 從而完成將多個(gè)多播報(bào)文對多播計(jì)數(shù)器的指數(shù)值的操作值進(jìn)行合并。執(zhí)行步驟16。步驟16、向仲裁模塊發(fā)出修改多播計(jì)數(shù)器的計(jì)數(shù)值的寫請求,在上述寫請求被仲 裁模塊響應(yīng)以后,將引擎緩存中保存的操作值寫入到多播計(jì)數(shù)器中,然后釋放掉所述引擎。向通信芯片中的仲裁模塊發(fā)出修改多播計(jì)數(shù)器的計(jì)數(shù)值的寫請求,在該寫請求中 攜帶上述多播報(bào)文的指針對應(yīng)的引擎的引擎號。通信芯片在上述寫請求被仲裁模塊響應(yīng)以后,用上述寫請求中攜帶的引擎的引擎 號所標(biāo)記的地址去查詢引擎緩存,獲取相應(yīng)的操作值。在上述發(fā)送寫請求、寫請求被仲裁模 塊響應(yīng)的過程中,如果有其它的多播報(bào)文需要出隊(duì),則上述操作值可能被繼續(xù)更新。
將讀取的操作值寫入到片外存儲器中的多播計(jì)數(shù)器中,作為多播計(jì)數(shù)器的新的計(jì)數(shù)值。然后,在引擎緩存中清除掉上述保存的多播報(bào)文的指針和引擎的對應(yīng)信息,清除 掉為所述引擎保存的所述操作值。即釋放上述多播報(bào)文的指針對應(yīng)的引擎,該引擎以后就 可以被其他多播報(bào)文使用。最后,上述芯片將上述多播報(bào)文按照其目的地址發(fā)送出去,將上述多播報(bào)文出隊(duì)。 需要理解的是,本發(fā)明實(shí)施例通過具體實(shí)施例來描述如何通過操作值來更新計(jì)數(shù) 器的技術(shù)值,但是在實(shí)際應(yīng)用的過程中,所述計(jì)數(shù)器的計(jì)數(shù)值的更新方法并不僅限于本發(fā) 明實(shí)施例中所提供的方法。該實(shí)施例通過引入內(nèi)容可尋址的CAM來合并處理多個(gè)多播報(bào)文對對同一個(gè)多播 計(jì)數(shù)器的計(jì)數(shù)值的維護(hù)操作,可以在一定程度上緩解數(shù)量大、速率快的多播報(bào)文對QDR、DDR 等通用高速存儲器帶寬的沖擊,并且能夠保證系統(tǒng)的報(bào)文轉(zhuǎn)發(fā)性能。實(shí)施例二本發(fā)明實(shí)施例在通信芯片的內(nèi)部設(shè)置CAM,該CAM中設(shè)置一定數(shù)量的引擎,比如, 10幾個(gè)引擎。上述CAM中的引擎可以分配給多播報(bào)文。該實(shí)施例提供的一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法的處理流程如圖2所示,包 括如下處理步驟步驟21、將選定的多播報(bào)文復(fù)制一定數(shù)量的份數(shù)N,為多播報(bào)文分配一個(gè)空閑的 引擎,在CAM里對應(yīng)保存上述多播報(bào)文的指針和對應(yīng)的引擎的引擎號,并且為所述引擎保 存一個(gè)操作值。當(dāng)沒有多播報(bào)文需要出隊(duì),并且CAM中有空閑引擎時(shí),則通信芯片中的報(bào)文復(fù)制 模塊按照實(shí)際需要,將選定的多播報(bào)文復(fù)制一定數(shù)量的份數(shù)N。給上述多播報(bào)文分配一個(gè)空閑的引擎,在CAM里對應(yīng)保存上述多播報(bào)文的指針和 上述引擎的引擎號。在CAM中的引擎緩存中用上述多播報(bào)文的指針對應(yīng)的引擎的引擎號標(biāo)記一個(gè)地 址,在該地址上保存一個(gè)操作值,在本發(fā)明實(shí)施例中,所述操作值為上述多播報(bào)文復(fù)制的份數(shù)N。所述操作值用于對多播計(jì)數(shù)器的計(jì)數(shù)值進(jìn)行更新,在本發(fā)明實(shí)施例中,將多播報(bào) 文復(fù)制一定數(shù)量的份數(shù),比如為N份。并且將多播報(bào)文復(fù)制的份數(shù)寫入到多播計(jì)數(shù)器的計(jì) 數(shù)值中。步驟22、從片外存儲器中接收所述多播報(bào)文的計(jì)數(shù)器的計(jì)數(shù)值。然后,向片外的片外存儲器發(fā)送讀多播計(jì)數(shù)器的計(jì)數(shù)值的讀請求,在接收到片外 存儲器返回的響應(yīng)后,從該響應(yīng)中提取出多播計(jì)數(shù)器的計(jì)數(shù)值。步驟23、從片外存儲器返回的多播報(bào)文中提取出多播計(jì)數(shù)器的計(jì)數(shù)值,根據(jù)所述 計(jì)數(shù)值更新所述操作值,將更新后的操作值寫回到引擎緩存中。用上述多播報(bào)文的指針對應(yīng)的引擎的引擎號所標(biāo)記的地址去查詢引擎緩存,獲取 相應(yīng)的操作值(即為N)。通信芯片用上述多播計(jì)數(shù)器的計(jì)數(shù)值加上上述相應(yīng)的操作值,即將上述多播計(jì)數(shù) 器的計(jì)數(shù)值加上N,將獲得的結(jié)果再寫入到上述引擎的引擎號所標(biāo)記的地址中。
步驟24、向仲裁模塊發(fā)出修改多播計(jì)數(shù)器的計(jì)數(shù)值的寫請求,在上述寫請求被仲 裁模塊響應(yīng)以后,將引擎緩存中保存的操作值寫入到多播計(jì)數(shù)器中。在引擎緩存中清除掉 上述保存的多播報(bào)文的指針和弓I擎的對應(yīng)信息。向通信芯片中的仲裁模塊發(fā)出修改多播計(jì)數(shù)器的計(jì)數(shù)值的寫請求,在該寫請求中 攜帶上述多播報(bào)文的指針對應(yīng)的引擎的引擎號。通信芯片在上述寫請求被仲裁模塊響應(yīng)以后,用上述寫請求中攜帶的引擎的引擎 號去查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值寫入到片外存儲器中的多播計(jì)數(shù)器中, 作為多播計(jì)數(shù)器的新的計(jì)數(shù)值。
然后,在引擎緩存中清除掉上述保存的多播報(bào)文的指針和引擎的對應(yīng)信息,清除 掉為所述引擎保存的所述操作值。即釋放上述多播報(bào)文的指針對應(yīng)的引擎,該引擎以后就 可以被其他多播報(bào)文使用。該實(shí)施例通過引入CAM來將多播報(bào)文復(fù)制的份數(shù)N寫入到多播計(jì)數(shù)器中,可以保 證多播計(jì)數(shù)器的計(jì)數(shù)正確性,可以保證最后一個(gè)多播報(bào)文出隊(duì)的時(shí)候,多播計(jì)數(shù)器的計(jì)數(shù) 值為1,從而保證保證系統(tǒng)正確回收多播報(bào)文的指針,不會造成內(nèi)存泄漏。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以 通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計(jì)算機(jī)可讀取存儲介質(zhì) 中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁 碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機(jī)存儲記憶體(Random Access Memory, RAM)等。本發(fā)明實(shí)施例還提供了一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的裝置,其具體實(shí)現(xiàn)結(jié)構(gòu)如 圖3所示,具體可以包括引擎分配模塊31,用于獲得待出隊(duì)的多播報(bào)文,為所述待出隊(duì)的多播報(bào)文分配引 擎;操作值累加模塊32,用于給所述待出隊(duì)的多播報(bào)文記錄操作值,根據(jù)其它的多播 報(bào)文的出隊(duì)情況更新所述操作值,所述操作值用于記錄多播報(bào)文的出隊(duì)數(shù)量的信息;操作值寫入模塊33,用于根據(jù)所述操作值來更新多播計(jì)數(shù)器的計(jì)數(shù)值。所述的裝置還可以包括寄存器處理模塊34,用于在通信設(shè)備的內(nèi)部設(shè)置內(nèi)容可尋址的寄存器,該寄存器 中設(shè)置一定數(shù)量的引擎,在給所述待出隊(duì)的多播報(bào)文分配一個(gè)引擎后,在所述寄存器中保 存所述待出隊(duì)的多播報(bào)文的指針和所述分配的引擎的引擎號的對應(yīng)信息,并且,在所述寄 存器中的引擎緩存中以所述分配的引擎的引擎號標(biāo)記一個(gè)地址,在該地址上保存所述待出 隊(duì)的多播報(bào)文對多播計(jì)數(shù)器的計(jì)數(shù)值的操作值。所述的操作值累加模塊32具體可以包括判斷處理模塊321、第一處理模塊322 和第二處理模塊323,所述判斷處理模塊321,用于當(dāng)其它的多播報(bào)文需要出隊(duì)時(shí),判斷所述寄存器中保 存的所述對應(yīng)信息中是否包含所述其它的多播報(bào)文的指針,如果沒有包含,則執(zhí)行所述第 一處理模塊;否則,執(zhí)行所述第二處理模塊;所述第一處理模塊322,用于給所述其它的多播報(bào)文分配一個(gè)引擎,在所述寄存器 中保存所述其它的多播報(bào)文的指針和所述分配的引擎的引擎號的對應(yīng)信息,在所述寄存器中以所述分配的引擎的引擎號標(biāo)記一個(gè)地址,在該地址上保存所述其它的多播報(bào)文對多播 計(jì)數(shù)器的計(jì)數(shù)值的操作值;所述第二處理模塊323,用于根據(jù)所述其它的多播報(bào)文的指針對應(yīng)的引擎的引擎 號所標(biāo)記的地址查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值加上所述其它的多播報(bào)文 對多播計(jì)數(shù)器的計(jì)數(shù)值的操作值,將獲得的結(jié)果再寫回到所述引擎緩存中的所述其它的多 播報(bào)文的指針對應(yīng)的引擎的引擎號所標(biāo)記的地址上。
所述的操作值寫入模塊具體可以包括計(jì)數(shù)值獲取模塊331,用于將給所述待出隊(duì)的多播報(bào)文分配的引擎的引擎號攜帶 在所述待出隊(duì)的多播報(bào)文中后,將所述待出隊(duì)的多播報(bào)文從通信設(shè)備發(fā)送給保存多播計(jì)數(shù) 器的片外存儲器,接收到所述片外存儲器返回的所述待出隊(duì)的多播報(bào)文后,從所述返回的 待出隊(duì)的多播報(bào)文的報(bào)文描述符中提取出多播計(jì)數(shù)器的計(jì)數(shù)值;累加處理模塊332,用于根據(jù)所述待出隊(duì)的多播報(bào)文中攜帶的引擎的引擎號所標(biāo) 記的地址查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值和所述多播計(jì)數(shù)器的計(jì)數(shù)值相加, 將獲得的結(jié)果再寫入到所述引擎緩存中的所述待出隊(duì)的多播報(bào)文的指針對應(yīng)的引擎的引 擎號所標(biāo)記的地址上;寫入處理模塊333,用于向通信設(shè)備中的仲裁模塊發(fā)出修改多播計(jì)數(shù)器的計(jì)數(shù)值 的寫請求,在該寫請求被仲裁模塊響應(yīng)以后,根據(jù)所述待出隊(duì)的多播報(bào)文中攜帶的引擎的 引擎號所標(biāo)記的地址查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值寫入到片外存儲器中 的多播計(jì)數(shù)器中,作為多播計(jì)數(shù)器的新的計(jì)數(shù)值。所述的操作值寫入模塊還可以包括引擎釋放模塊334,用于將所述待出隊(duì)的多播報(bào)文出隊(duì),在引擎緩存中清除掉保存 的所述待出隊(duì)的多播報(bào)文的指針和引擎的對應(yīng)信息,清除掉為所述待出隊(duì)的多播報(bào)文中攜 帶的引擎保存的操作值。綜上所述,本發(fā)明實(shí)施例通過引入內(nèi)容可尋址的CAM來合并處理時(shí)序上非常發(fā)散 的對同一個(gè)計(jì)數(shù)器的計(jì)數(shù)值的維護(hù)操作,可以在一定程度上緩解數(shù)量大、速率快的多播報(bào) 文對QDR、DDR等通用高速存儲器帶寬的沖擊,并且能夠保證系統(tǒng)的報(bào)文轉(zhuǎn)發(fā)性能。本發(fā)明實(shí)施例可以保證最后一個(gè)多播報(bào)文出隊(duì)的時(shí)候,多播計(jì)數(shù)器的計(jì)數(shù)值為1, 從而保證多播計(jì)數(shù)器的計(jì)數(shù)正確性,保證系統(tǒng)正確回收多播報(bào)文的指針,不會造成內(nèi)存泄 漏。本發(fā)明實(shí)施例僅用片內(nèi)較少的寄存器資源,多播計(jì)數(shù)器還是使用片外QDR、DDR等 通用高速存儲器資源,可以最大程度利用片外存儲器的存儲資源。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此, 任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換, 都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍 為準(zhǔn)。
權(quán)利要求
一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法,其特征在于,包括獲得待出隊(duì)的多播報(bào)文;為所述待出隊(duì)的多播報(bào)文分配引擎,并記錄操作值,所述操作值用于記錄多播報(bào)文的出隊(duì)的數(shù)量信息;根據(jù)其它的多播報(bào)文的出隊(duì)情況更新所述操作值;根據(jù)所述操作值更新多播計(jì)數(shù)器的計(jì)數(shù)值。
2.根據(jù)權(quán)利要求1所述的維護(hù)多播計(jì)數(shù)器的方法,其特征在于,所述的方法還包括 在通信設(shè)備的內(nèi)部設(shè)置內(nèi)容可尋址的寄存器,該寄存器中設(shè)置一定數(shù)量的引擎。
3.根據(jù)權(quán)利要求2所述的維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法,其特征在于,所述的為所 述多播報(bào)文分配引擎,并記錄操作值,所述操作值用于記錄多播報(bào)文的出隊(duì)的數(shù)量信息,包 括給所述待出隊(duì)的多播報(bào)文分配一個(gè)引擎后,在所述寄存器中保存所述待出隊(duì)的多播報(bào) 文的指針和所述分配的引擎的引擎號的對應(yīng)信息,并且,在所述寄存器中的引擎緩存中以 所述分配的引擎的引擎號標(biāo)記一個(gè)地址,在該地址上保存所述待出隊(duì)的多播報(bào)文對多播計(jì) 數(shù)器的計(jì)數(shù)值的操作值。
4.根據(jù)權(quán)利要求3所述的維護(hù)多播計(jì)數(shù)器的方法,其特征在于,所述的根據(jù)其它的多 播報(bào)文的出隊(duì)情況更新所述操作值,包括當(dāng)其它的多播報(bào)文需要出隊(duì)時(shí),判斷所述寄存器中保存的所述對應(yīng)信息中是否包含所 述其它的多播報(bào)文的指針,如果沒有包含,給所述其它的多播報(bào)文分配一個(gè)引擎,在所述寄 存器中保存所述其它的多播報(bào)文的指針和所述分配的引擎的引擎號的對應(yīng)信息,在所述寄 存器中以所述分配的引擎的引擎號標(biāo)記一個(gè)地址,在該地址上保存所述其它的多播報(bào)文對 多播計(jì)數(shù)器的計(jì)數(shù)值的操作值;如果已經(jīng)包含,則根據(jù)所述其它的多播報(bào)文的指針對應(yīng)的引擎的引擎號所標(biāo)記的地址 查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值加上所述其它的多播報(bào)文對多播計(jì)數(shù)器的 計(jì)數(shù)值的操作值,將獲得的結(jié)果再寫回到所述引擎緩存中的所述其它的多播報(bào)文的指針對 應(yīng)的引擎的弓丨擎號所標(biāo)記的地址上。
5.根據(jù)權(quán)利要求1至4任一項(xiàng)所述的維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法,其特征在于,所 述的根據(jù)所述操作值更新多播計(jì)數(shù)器的計(jì)數(shù)值,包括將給所述待出隊(duì)的多播報(bào)文分配的引擎的引擎號攜帶在所述待出隊(duì)的多播報(bào)文中后, 將所述待出隊(duì)的多播報(bào)文從通信設(shè)備發(fā)送給保存多播計(jì)數(shù)器的片外存儲器,接收到所述片 外存儲器返回的所述待出隊(duì)的多播報(bào)文后,從所述返回的待出隊(duì)的多播報(bào)文的報(bào)文描述符 中提取出多播計(jì)數(shù)器的計(jì)數(shù)值;根據(jù)所述待出隊(duì)的多播報(bào)文中攜帶的引擎的引擎號所標(biāo)記的地址查詢引擎緩存,獲取 相應(yīng)的操作值,將該操作值和所述多播計(jì)數(shù)器的計(jì)數(shù)值相加,將獲得的結(jié)果再寫入到所述 引擎緩存中的所述待出隊(duì)的多播報(bào)文的指針對應(yīng)的引擎的引擎號所標(biāo)記的地址上;向通信設(shè)備中的仲裁模塊發(fā)出修改多播計(jì)數(shù)器的計(jì)數(shù)值的寫請求,在該寫請求被仲裁 模塊響應(yīng)以后,根據(jù)所述待出隊(duì)的多播報(bào)文中攜帶的引擎的引擎號所標(biāo)記的地址查詢引擎 緩存,獲取相應(yīng)的操作值,將該操作值寫入到片外存儲器中的多播計(jì)數(shù)器中,作為多播計(jì)數(shù) 器的新的計(jì)數(shù)值;將所述待出隊(duì)的多播報(bào)文出隊(duì),在引擎緩存中清除掉保存的所述待出隊(duì)的多播報(bào)文的 指針和引擎的對應(yīng)信息,清除掉為所述待出隊(duì)的多播報(bào)文中攜帶的引擎保存的操作值。
6.一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的裝置,其特征在于,包括引擎分配模塊,用于獲得待出隊(duì)的多播報(bào)文,為所述待出隊(duì)的多播報(bào)文分配引擎;操作值累加模塊,用于給所述待出隊(duì)的多播報(bào)文記錄操作值,根據(jù)其它的多播報(bào)文的 出隊(duì)情況更新所述操作值,所述操作值用于記錄多播報(bào)文的出隊(duì)數(shù)量的信息;操作值寫入模塊,用于根據(jù)所述操作值來更新多播計(jì)數(shù)器的計(jì)數(shù)值。
7.根據(jù)權(quán)利要求6所述的維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的裝置,其特征在于,所述的裝置 還包括寄存器處理模塊,用于在通信設(shè)備的內(nèi)部設(shè)置內(nèi)容可尋址的寄存器,該寄存器中設(shè)置 一定數(shù)量的引擎,在給所述待出隊(duì)的多播報(bào)文分配一個(gè)引擎后,在所述寄存器中保存所述 待出隊(duì)的多播報(bào)文的指針和所述分配的引擎的引擎號的對應(yīng)信息,并且,在所述寄存器中 的引擎緩存中以所述分配的引擎的引擎號標(biāo)記一個(gè)地址,在該地址上保存所述待出隊(duì)的多 播報(bào)文對多播計(jì)數(shù)器的計(jì)數(shù)值的操作值。
8.根據(jù)權(quán)利要求7所述的維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的裝置,其特征在于,所述的操作 值累加模塊包括判斷處理模塊、第一處理模塊和第二處理模塊,所述判斷處理模塊,用于當(dāng)其它的多播報(bào)文需要出隊(duì)時(shí),判斷所述寄存器中保存的所 述對應(yīng)信息中是否包含所述其它的多播報(bào)文的指針,如果沒有包含,則執(zhí)行所述第一處理 模塊;否則,執(zhí)行所述第二處理模塊;所述第一處理模塊,用于給所述其它的多播報(bào)文分配一個(gè)引擎,在所述寄存器中保存 所述其它的多播報(bào)文的指針和所述分配的引擎的引擎號的對應(yīng)信息,在所述寄存器中以所 述分配的引擎的引擎號標(biāo)記一個(gè)地址,在該地址上保存所述其它的多播報(bào)文對多播計(jì)數(shù)器 的計(jì)數(shù)值的操作值;所述第二處理模塊,用于根據(jù)所述其它的多播報(bào)文的指針對應(yīng)的引擎的引擎號所標(biāo)記 的地址查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值加上所述其它的多播報(bào)文對多播計(jì) 數(shù)器的計(jì)數(shù)值的操作值,將獲得的結(jié)果再寫回到所述引擎緩存中的所述其它的多播報(bào)文的 指針對應(yīng)的引擎的引擎號所標(biāo)記的地址上。
9.根據(jù)權(quán)利要求6、7或8所述的維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的裝置,其特征在于,所述的 操作值寫入模塊包括計(jì)數(shù)值獲取模塊,用于將給所述待出隊(duì)的多播報(bào)文分配的引擎的引擎號攜帶在所述待 出隊(duì)的多播報(bào)文中后,將所述待出隊(duì)的多播報(bào)文從通信設(shè)備發(fā)送給保存多播計(jì)數(shù)器的片外 存儲器,接收到所述片外存儲器返回的所述待出隊(duì)的多播報(bào)文后,從所述返回的待出隊(duì)的 多播報(bào)文的報(bào)文描述符中提取出多播計(jì)數(shù)器的計(jì)數(shù)值;累加處理模塊,用于根據(jù)所述待出隊(duì)的多播報(bào)文中攜帶的引擎的引擎號所標(biāo)記的地址 查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值和所述多播計(jì)數(shù)器的計(jì)數(shù)值相加,將獲得的 結(jié)果再寫入到所述引擎緩存中的所述待出隊(duì)的多播報(bào)文的指針對應(yīng)的引擎的引擎號所標(biāo) 記的地址上;寫入處理模塊,用于向通信設(shè)備中的仲裁模塊發(fā)出修改多播計(jì)數(shù)器的計(jì)數(shù)值的寫請 求,在該寫請求被仲裁模塊響應(yīng)以后,根據(jù)所述待出隊(duì)的多播報(bào)文中攜帶的引擎的引擎號所標(biāo)記的地址查詢引擎緩存,獲取相應(yīng)的操作值,將該操作值寫入到片外存儲器中的多播 計(jì)數(shù)器中,作為多播計(jì)數(shù)器的新的計(jì)數(shù)值。
10.根據(jù)權(quán)利要求9所述的維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的裝置,其特征在于,所述的操作 值寫入模塊還包括引擎釋放模塊,用于將所述待出隊(duì)的多播報(bào)文出隊(duì),在引擎緩存中清除掉保存的所述 待出隊(duì)的多播報(bào)文的指針和引擎的對應(yīng)信息,清除掉為所述待出隊(duì)的多播報(bào)文中攜帶的引 擎保存的操作值。
全文摘要
本發(fā)明實(shí)施例提供了一種維護(hù)多播計(jì)數(shù)器的計(jì)數(shù)值的方法和裝置。該方法主要包括獲得待出隊(duì)的多播報(bào)文,為所述待出隊(duì)的多播報(bào)文分配引擎,并記錄操作值,所述操作值用于記錄多播報(bào)文的出隊(duì)的數(shù)量信息。根據(jù)其它的多播報(bào)文的出隊(duì)情況更新所述操作值,根據(jù)所述操作值更新多播計(jì)數(shù)器的計(jì)數(shù)值。利用本發(fā)明,可以在一定程度上緩解數(shù)量大、速率快的多播報(bào)文對QDR、DDR等通用高速存儲器帶寬的沖擊,并且能夠保證系統(tǒng)的報(bào)文轉(zhuǎn)發(fā)性能。
文檔編號H04L12/56GK101848150SQ20101015869
公開日2010年9月29日 申請日期2010年4月26日 優(yōu)先權(quán)日2010年4月26日
發(fā)明者卞云峰, 段有杰, 王磊, 程柏, 羅柳柱, 羅海燕, 鄭勤 申請人:華為技術(shù)有限公司