欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種隊列管理方法和裝置與流程

文檔序號:11959902閱讀:294來源:國知局
一種隊列管理方法和裝置與流程

本發(fā)明涉及計算機技術領域,尤其涉及一種隊列管理方法和裝置。



背景技術:

隨著網(wǎng)絡技術的發(fā)展,人們對網(wǎng)絡帶寬需求增大,對相關設備的帶寬、服務質(zhì)量(英文全稱:Quality of Service,英文簡稱:QoS)和成本都提出了很高的要求,體現(xiàn)在網(wǎng)絡芯片上就要求其可以緩存和處理更多的報文、具備精準的調(diào)度能力和更低的芯片成本,這些都體現(xiàn)在產(chǎn)品的競爭力上。

網(wǎng)絡芯片中的流量管理(英文全稱:Traffic Manage,英文簡稱:TM)芯片的主要功能就是對報文的緩存、入隊、調(diào)度和出隊。其中,對報文的緩存、入隊和出隊是由隊列管理模塊來完成的,主要是對隊列的鏈表的操作。對報文的調(diào)度是由調(diào)度模塊來完成的,如果考慮成本去增大每個報文的長度信息的粒度,又會影響調(diào)度的準確性、造成很大的突發(fā)和抖動。

現(xiàn)有技術中常見的隊列管理流程可包括如下步驟:

1、從網(wǎng)絡芯片的入口接收報文;

2、將接收到的報文緩存在網(wǎng)絡芯片外的隨機存儲器;

3、報文緩存之后生成報文描述符(英文全稱:Packet Descriptor,英文簡稱:PD),然后將PD入隊到對應的實體隊列中,入隊由隊列管理模塊來完成。其中,PD是描述報文的信息,包括實體隊列中的某一個報文指向的下一個報文的指針等。

在目前的隊列管理方案中至少存在如下問題:因為大帶寬的設備要求緩存更多的報文,通常報文數(shù)據(jù)都緩存在片外的隨機存儲器中,但報文的隊列信息(包括鏈表的頭指針、下一個報文指針和鏈表的尾指針)和每個報文的長度通常都放在芯片的內(nèi)部,除隊列的頭指針和尾指針是按實體隊列來維護之外,下一個報文指針和報文長度是按照每個報文來維護的,這些信息用于維護實體隊列的鏈表和保證調(diào)度的QoS。下一個報文指針就會占用很大的片內(nèi)緩存資源,這會帶來芯片成本的增加,但同時上述的下一個報文指針又是完成正常芯片功能和性能所不可或缺的。以100十億(英文全稱:Gigabit,英文簡稱:G)字節(jié)的處理能力的芯片而言,一般需要緩存的短報文的數(shù)量都會達到幾百千(英文全稱:Kilobit,英文簡稱:K)個報文的量級,甚至1百萬(英文全稱:Megabit,英文簡稱:M)個報文的量級了。以緩存1M個報文為例,每個報文需要用20比特(英文名稱:bit)的指針來表示,這樣芯片內(nèi)部要保存的下一個報文指針的相關資源就要20Mbit,這樣的數(shù)量會占用很大的芯片內(nèi)存儲資源,會帶來芯片成本和功耗的增加。



技術實現(xiàn)要素:

本發(fā)明實施例提供了一種隊列管理方法和裝置,減少實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,降低芯片成本和功耗。

為解決上述技術問題,本發(fā)明實施例提供以下技術方案:

第一方面,本發(fā)明實施例提供一種隊列管理方法,包括:

將第一報文存儲到第一宏單元包括的第一緩存單元,所述第一宏單元入隊到第一實體隊列,所述第一宏單元包括:連續(xù)的N個緩存單元,所述N為大于或等于2的自然數(shù),所述第一緩存單元屬于所述N個緩存單元;

根據(jù)所述第一報文的報文長度對所述第一宏單元存儲了所述第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度;

根據(jù)所述第一宏單元和所述第一實體隊列生成所述第一宏單元對應的隊列信息,所述第一宏單元對應的隊列信息包括:所述第一宏單元在所述第一實體隊列中的宏單元標識、所述第一宏單元內(nèi)部的頭指針、所述第一宏單元內(nèi)部的尾指針和所述第一宏單元的當前平均報文長度。

本發(fā)明實施例中對于連續(xù)的多個緩存單元可封裝為一個宏單元,并且宏單元可入隊到實體隊列中,例如第一宏單元入隊到第一實體隊列,實體隊列的管理是以宏單元為粒度來使用緩存單元的資源,不需要存儲每個報文指向的下一個報文的指針,由于本發(fā)明實施例中對于一個宏單元只需要維護宏單元內(nèi)部的平均報文長度,也不需要存儲每個報文的報文長度,因此本發(fā)明實施例中在網(wǎng)絡芯片外緩存報文的規(guī)模相同的情況下,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述第一實體隊列,至少包括:第一宏單元和在所述第一實體隊列中處于所述第一宏單元之前且相鄰的第二宏單元,所述方法還包括:

從所述第一實體隊列中確定出需要報文出隊的宏單元為第二宏單元,所述第二宏單元對應的隊列信息包括:所述第二宏單元在所述第一實體隊列中的宏單元標識、所述第二宏單元內(nèi)部的頭指針、所述第二宏單元內(nèi)部的尾指針和所述第二宏單元的當前平均報文長度;

根據(jù)所述第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文,并修改所述第二宏單元內(nèi)部的頭指針對應的偏移值。

在本發(fā)明實施例中第二宏單元入隊到第一實體隊列,實體隊列的管理是以宏單元為粒度來使用緩存單元的資源,不需要存儲每個報文指向的下一個報文的指針,當?shù)诙陠卧枰鲫爼r,可以根據(jù)第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文,并修改所述第二宏單元內(nèi)部的頭指針對應的偏移值,因此本發(fā)明實施例中不需要存儲每個報文的報文長度也可以完成報文的出隊,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

結合第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,所述根據(jù)所述第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文之后,所述方法還包括:

將所述第二宏單元的當前平均報文長度發(fā)送給調(diào)度器和限速器,以使所述調(diào)度器根據(jù)所述第二宏單元的當前平均報文長度刷新所述調(diào)度器的權重,所述限速器根據(jù)所述第二宏單元的當前平均報文長度刷新所述限速器的令牌。

本發(fā)明實施例中不需要存儲第二宏單元內(nèi)各個報文的真實長度,只需要維護報文平均長度即可,可以以宏單元粒度進行刷新調(diào)度器和限速器,對調(diào)度的效果沒有影響。

結合第一方面或第一方面的第一種可能或第二種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,所述根據(jù)所述第一宏單元和所述第一實體隊列生成所述第一宏單元對應的隊列信息之后,所述方法還包括:

根據(jù)所述第一宏單元對應的隊列信息維護所述第一實體隊列的鏈表。

本發(fā)明實施例中對第一實體隊列的管理可以通過鏈表的方式來完成,鏈表中的隊尾指針可以指向剛入隊的第一宏單元,實現(xiàn)對實體隊列的管理。

結合第一方面或第一方面的第一種可能或第二種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,所述將第一報文存儲到第一宏單元包括的第一緩存單元,包括:

將所述第一宏單元內(nèi)部的尾指針分配給第一報文,并修改所述第一宏單元內(nèi)部的尾指針對應的偏移值。

本發(fā)明實施例中第一宏單元中在寫入第一報文時修改第一宏單元內(nèi)部的尾指針對應的偏移值,從而通過宏單元的尾指針可以指向新增加的報文。

結合第一方面或第一方面的第一種可能或第二種可能的實現(xiàn)方式,在第一方面的第五種可能的實現(xiàn)方式中,所述根據(jù)所述第一報文的報文長度對所述第一宏單元存儲了所述第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度,包括:

獲取所述第一宏單元存儲所述第一報文之前已經(jīng)存儲的所有報文數(shù)量;

根據(jù)所述已經(jīng)存儲的所有報文數(shù)量、所述第一宏單元存儲了所述第一報文之前的平均報文長度和所述第一報文的報文長度計算第一宏單元的當前平均報文長度。

本發(fā)明實施例中可以第一宏單元在有新的報文寫入時修改第一宏單元的當前平均報文長度,而不需要記錄每個報文的真實長度,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

第二方面,本發(fā)明實施例還提供一種隊列管理裝置,包括:

存儲模塊,用于將第一報文存儲到第一宏單元包括的第一緩存單元,所述第一宏單元入隊到第一實體隊列,所述第一宏單元包括:連續(xù)的N個緩存單元,所述N為大于或等于2的自然數(shù),所述第一緩存單元屬于所述N個緩存單元;

平均報文長度修正模塊,用于根據(jù)所述第一報文的報文長度對所述第一宏單元存儲了所述第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度;

隊列信息生成模塊,用于根據(jù)所述第一宏單元和所述第一實體隊列生成所述第一宏單元對應的隊列信息,所述第一宏單元對應的隊列信息包括:所述第一宏單元在所述第一實體隊列中的宏單元標識、所述第一宏單元內(nèi)部的頭指針和所述第一宏單元內(nèi)部的尾指針和所述第一宏單元的當前平均報文長度。

本發(fā)明實施例中對于連續(xù)的多個緩存單元可封裝為一個宏單元,并且宏單元可入隊到實體隊列中,例如第一宏單元入隊到第一實體隊列,實體隊列的管理是以宏單元為粒度來使用緩存單元的資源,不需要存儲每個報文指向的下一個報文的指針,由于本發(fā)明實施例中對于一個宏單元只需要維護宏單元內(nèi)部的平均報文長度,也不需要存儲每個報文的報文長度,因此本發(fā)明實施例中在網(wǎng)絡芯片外緩存報文的規(guī)模相同的情況下,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

結合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述第一實體隊列,至少包括:第一宏單元和在所述第一實體隊列中處于所述第一宏單元之前且相鄰的第二宏單元,所述隊列管理裝置還包括:

出隊管理模塊,用于從所述第一實體隊列中確定出需要報文出隊的宏單元為第二宏單元,所述第二宏單元對應的隊列信息包括:所述第二宏單元在所述第一實體隊列中的宏單元標識、所述第二宏單元內(nèi)部的頭指針、所述第二宏單元內(nèi)部的尾指針和所述第二宏單元的當前平均報文長度;

報文讀取模塊,用于根據(jù)所述第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文,并修改所述第二宏單元內(nèi)部的頭指針對應的偏移值。

在本發(fā)明實施例中第二宏單元入隊到第一實體隊列,實體隊列的管理是以宏單元為粒度來使用緩存單元的資源,不需要存儲每個報文指向的下一個報文的指針,當?shù)诙陠卧枰鲫爼r,可以根據(jù)第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文,并修改所述第二宏單元內(nèi)部的頭指針對應的偏移值,因此本發(fā)明實施例中不需要存儲每個報文的報文長度也可以完成報文的出隊,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

結合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,所述隊列管理裝置還包括:發(fā)送模塊,其中,

所述發(fā)送模塊,用于所述報文讀取模塊根據(jù)所述第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文之后,將所述第二宏單元的當前平均報文長度發(fā)送給調(diào)度器和限速器,以使所述調(diào)度器根據(jù)所述第二宏單元的當前平均報文長度刷新所述調(diào)度器的權重,所述限速器根據(jù)所述第二宏單元的當前平均報文長度刷新所述限速器的令牌。

本發(fā)明實施例中不需要存儲第二宏單元內(nèi)各個報文的真實長度,只需要維護報文平均長度即可,可以以宏單元粒度進行刷新調(diào)度器和限速器,對調(diào)度的效果沒有影響。

結合第二方面或第二方面的第一種可能或第二種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,所述隊列管理裝置還包括:鏈表維護模塊,其中,

所述鏈表維護模塊,用于所述隊列信息生成模塊根據(jù)所述第一宏單元和所述第一實體隊列生成所述第一宏單元對應的隊列信息之后,根據(jù)所述第一宏單元對應的隊列信息維護所述第一實體隊列的鏈表。

本發(fā)明實施例中對第一實體隊列的管理可以通過鏈表的方式來完成,鏈表中的隊尾指針可以指向剛入隊的第一宏單元,實現(xiàn)對實體隊列的管理。

結合第二方面或第二方面的第一種可能或第二種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述存儲模塊,具體用于將所述第一宏單元內(nèi)部的尾指針分配給第一報文,并修改所述第一宏單元內(nèi)部的尾指針對應的偏移值。

本發(fā)明實施例中第一宏單元中在寫入第一報文時修改第一宏單元內(nèi)部的尾指針對應的偏移值,從而通過宏單元的尾指針可以指向新增加的報文。

結合第二方面或第二方面的第一種可能或第二種可能的實現(xiàn)方式,在第二方面的第五種可能的實現(xiàn)方式中,所述平均報文長度修正模塊,包括:

報文數(shù)量獲取模塊,用于獲取所述第一宏單元存儲所述第一報文之前已經(jīng)存儲的所有報文數(shù)量;

平均報文長度計算模塊,用于根據(jù)所述已經(jīng)存儲的所有報文數(shù)量、所述第一宏單元存儲了所述第一報文之前的平均報文長度和所述第一報文的報文長度計算修正第一宏單元的當前平均報文長度。

本發(fā)明實施例中可以第一宏單元在有新的報文寫入時修改第一宏單元的當前平均報文長度,而不需要記錄每個報文的真實長度,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

從以上技術方案可以看出,本發(fā)明實施例具有以下優(yōu)點:

在本發(fā)明實施例中,首先將第一報文存儲到第一宏單元中的第一緩存單元,該第一宏單元入隊到第一實體隊列,該第一宏單元包括:連續(xù)的N個緩存單元,然后根據(jù)第一報文的報文長度對第一宏單元存儲第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度,最后根據(jù)第一宏單元和第一實體隊列生成第一宏單元對應的隊列信息,第一宏單元對應的隊列信息包括:第一宏單元在第一實體隊列中的宏單元標識、第一宏單元內(nèi)部的頭指針、第一宏單元內(nèi)部的尾指針和第一宏單元的當前平均報文長度。本發(fā)明實施例中對于連續(xù)的多個緩存單元可封裝為一個宏單元,并且宏單元可入隊到實體隊列中,例如第一宏單元入隊到第一實體隊列,實體隊列的管理是以宏單元為粒度來使用緩存單元的資源,不需要存儲每個報文指向的下一個報文的指針,由于本發(fā)明實施例中對于一個宏單元只需要維護宏單元內(nèi)部的平均報文長度,也不需要存儲每個報文的報文長度,因此本發(fā)明實施例中在網(wǎng)絡芯片外緩存報文的規(guī)模相同的情況下,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

附圖說明

為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域的技術人員來講,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本發(fā)明實施例提供的一種隊列管理方法的流程方框示意圖;

圖2為本發(fā)明實施例提供的隨機存儲器中的宏單元的處理流程示意圖;

圖3-a為本發(fā)明實施例提供的一種隊列管理裝置的組成結構示意圖;

圖3-b為本發(fā)明實施例提供的另一種隊列管理裝置的組成結構示意圖;

圖3-c為本發(fā)明實施例提供的另一種隊列管理裝置的組成結構示意圖;

圖3-d為本發(fā)明實施例提供的另一種隊列管理裝置的組成結構示意圖;

圖3-e為本發(fā)明實施例提供的一種平均報文長度修正模塊的組成結構示意圖;

圖4為本發(fā)明實施例提供的另一種隊列管理裝置的組成結構示意圖。

具體實施方式

本發(fā)明實施例提供了一種隊列管理方法和裝置,減少實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,降低芯片成本和功耗。

為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,下面所描述的實施例僅僅是本發(fā)明一部分實施例,而非全部實施例?;诒景l(fā)明中的實施例,本領域的技術人員所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的術語在適當情況下可以互換,這僅僅是描述本發(fā)明的實施例中對相同屬性的對象在描述時所采用的區(qū)分方式。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,以便包含一系列單元的過程、方法、系統(tǒng)、產(chǎn)品或設備不必限于那些單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設備固有的其它單元。

以下分別進行詳細說明。

本發(fā)明隊列管理方法的一個實施例,可應用于對實體隊列的流量管理中,請參閱圖1所示,本發(fā)明一個實施例提供的隊列管理方法,可以包括如下步驟:

101、將第一報文存儲到第一宏單元包括的第一緩存單元,第一宏單元入隊到第一實體隊列,第一宏單元包括:連續(xù)的N個緩存單元。

其中,N為大于或等于2的自然數(shù),第一緩存單元屬于N個緩存單元。

在本發(fā)明實施例中,從網(wǎng)絡芯片的接口可以接收到需要緩存的報文,為便于描述,后續(xù)實施例中可以將該需要緩存的報文定義為第一報文,該第一報文需要緩存到網(wǎng)絡芯片外的隨機存儲器,例如雙倍速率同步動態(tài)隨機存儲器(英文全稱:Double Data Rate Synchronous Dynamic Random Access Memory,英文簡稱:DDR SDRAM)。本發(fā)明實施例中網(wǎng)絡芯片外的隨機存儲器中劃分有多個宏單元,每個宏單元都包括連續(xù)的多個緩存單元,即在隨機存儲器中連續(xù)的多個緩存單元可封裝為一個宏單元,每個緩存單元都是隨機存儲器中的一個存儲單元(英文名稱:Cell),每個緩存單元都有一個標識,即Cell的指針,Cell的指針對應到隨機存儲器的物理地址。具體的,一個宏單元包括:連續(xù)的N個緩存單元,N的取值為大于等于2的自然數(shù),N個緩存單元的地址在存儲空間中是連續(xù)的。例如,可以將地址連續(xù)的8個緩存單元封裝為一個宏單元,又如,可以將地址連續(xù)的4個緩存單元封裝為一個宏單元,或者,將地址連續(xù)的16個緩存單元封裝為一個宏單元。

在本發(fā)明實施例中,網(wǎng)絡芯片外的隨機存儲器中可以劃分有多個宏單元,一個完整的報文可以存儲到一個緩存單元中,為了便于描述,將第一報文存儲到隨機存儲器中的宏單元定義為第一宏單元,具體的,第一宏單元中包括有多個連續(xù)的緩存單元,將存儲了第一報文的緩存單元定義為第一緩存單元,該第一報文具體可以存儲到第一宏單元中的第一緩存單元中,第一報文存儲的第一緩存單元為第一宏單元中包括的連續(xù)N個緩存單元中的一個緩存單元。例如,可以將第一報文存儲到第一宏單元中尾指針指向的存儲地址。

具體的,在本發(fā)明實施例中,步驟101將第一報文存儲到第一宏單元包括的第一緩存單元,包括:

A1、將第一宏單元內(nèi)部的尾指針分配給第一報文,并修改第一宏單元內(nèi)部的尾指針對應的偏移值。

其中,第一宏單元中包括連續(xù)的N個緩存單元,一個緩存單元用于存儲一個報文,當?shù)谝粓笪男枰鎯Φ降谝缓陠卧獣r,從第一宏單元中查找空閑的緩存單元,則第一宏單元內(nèi)部的尾指針指向的第一緩存單元是空閑的,第一報文可以存儲到第一宏單元內(nèi)部的尾指針指向的地址空間,第一報文存儲之后還可以將第一宏單元內(nèi)部的尾指針對應的偏移值修改為下一個空閑的緩存單元,例如第一宏單元內(nèi)部的尾指針的偏移值增加1,此處只是舉例,具體偏移的尺度可以取決于應用場景的需要,此處舉例不作為對本發(fā)明的限定。

102、根據(jù)第一報文的報文長度對第一宏單元存儲了第一報文之前的平均報文長度(英文名稱:Average Packet Length)進行修正,得到第一宏單元的當前平均報文長度。

其中,本發(fā)明實施例中可以針對每個宏單元獲取到該宏單元的平均報文長度,宏單元的平均報文長度指的是在宏單元中存儲的所有報文長度的平均值,單位可以為字節(jié)(英文名稱:Byte)。在宏單元中每存儲一個新的報文時,都可以對原平均報文長度進行修正,即可以根據(jù)存儲的新的報文長度來修正原平均報文長度。例如,第一宏單元在存儲第一報文之前計算出平均報文長度,當該第一宏單元中寫入了第一報文之后,可以根據(jù)該第一報文的報文長度對第一宏單元的平均報文長度進行修正,得到第一宏單元的當前平均報文長度。本發(fā)明實施例中,在第一實體隊列中入隊第一宏單元,該第一實體隊列中在第一報文寫入第一宏單元后,可以根據(jù)新寫入的第一報文的報文長度來修正第一宏單元的原平均報文長度,在第一實體隊列中并不需要保存每個報文的報文長度,而是以宏單元為粒度,對于每個宏單元只保存一個平均報文長度,從而節(jié)省保存每個報文的報文長度帶來的很多開銷,當宏單元中存儲的報文越多時,其可以節(jié)省的開銷就越大。

在本發(fā)明的一些實施例中,步驟102根據(jù)第一報文的報文長度對第一宏單元存儲了第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度,具體可以包括如下步驟:

B1、獲取第一宏單元存儲第一報文之前已經(jīng)存儲的所有報文數(shù)量;

B2、根據(jù)已經(jīng)存儲的所有報文數(shù)量、第一宏單元存儲了第一報文之前的平均報文長度和第一報文的報文長度計算第一宏單元的當前平均報文長度。

其中,首先執(zhí)行步驟B1,獲取到第一宏單元存儲了第一報文之前已經(jīng)存儲的所有報文數(shù)量,即在存儲第一報文前,該第一宏單元中已存儲的報文個數(shù),例如,可以通過第一宏單元內(nèi)部的頭指針和第一宏單元內(nèi)部的尾指針之間的差值來確定出第一宏單元中已存儲的報文個數(shù)。然后執(zhí)行步驟B2,根據(jù)已經(jīng)存儲的所有報文數(shù)量、第一宏單元存儲了第一報文之前的平均報文長度和第一報文的報文長度計算第一宏單元的當前平均報文長度。舉例說明如下,可以采用如下公式來計算:平均報文長度new=(平均報文長度old*報文數(shù)量old+入隊報文長度)/(報文數(shù)量old+1)。其中,平均報文長度old指的是存儲了第一報文之前的平均報文長度,入隊報文長度指的是第一報文的報文長度,報文數(shù)量old指的是在第一宏單元中已經(jīng)存儲的所有報文數(shù)量。

103、根據(jù)第一宏單元和第一實體隊列生成第一宏單元對應的隊列信息,第一宏單元對應的隊列信息包括:第一宏單元在第一實體隊列中的宏單元標識、第一宏單元內(nèi)部的頭指針、第一宏單元內(nèi)部的尾指針和第一宏單元的當前平均報文長度。

在本發(fā)明實施例中獲取到第一宏單元的當前平均報文長度之后,可以根據(jù)第一宏單元和第一實體隊列生成第一宏單元對應的隊列信息,該第一宏單元對應的隊列信息是第一實體隊列中入隊第一宏單元的隊列管理信息,在第一實體隊列中對于每個宏單元都可以生成該宏單元對應的隊列管理信息,則對于實體隊列中的每一個宏單元對應的隊列信息包括:該宏單元在該實體隊列中的宏單元標識、該宏單元內(nèi)部的頭指針、該宏單元內(nèi)部的尾指針和該宏單元的當前平均報文長度。需要說明的是,在本發(fā)明實施例中每個宏單元中有報文入隊時都需要修改該宏單元的平均報文長度,以維護宏單元的當前平均報文長度是存儲了新報文之后的平均報文長度。

在本發(fā)明實施例中,第一報文存儲到第一宏單元中的第一緩存單元之后,通過步驟101可以確定第一報文在第一宏單元中的存儲情況,然后確定第一宏單元內(nèi)部的頭指針和第一宏單元內(nèi)部的尾指針,并且根據(jù)該第一宏單元入隊到的第一實體隊列中的具體地址可以生成第一宏單元在第一實體隊列中的宏單元標識。由于第一報文存儲到了第一宏單元,因此可以生成第一宏單元對應的隊列信息,其中,每個宏單元都鏈接其后面的一個宏單元,相對于后面的宏單元而言,這個前面的宏單元的地址就是指向下一個宏單元的指針(也稱為Next Pointer)。該Next Pointer可以通過第一宏單元在第一實體隊列中的宏單元標識來確定,第一實體隊列中的各個宏單元的宏單元標識用于確定在第一實體隊列中各個宏單元之間的入隊順序。

需要說明的是,在發(fā)明實施例中,實體隊列中不需要保存每個報文對應的下一個報文的指針,而是保存針對連續(xù)的N個緩存單元構成一個宏單元在實體隊列中的宏單元標識,若需要緩存的總報文數(shù)量為M個,M為一個非零自然數(shù),則按照現(xiàn)有技術,實體隊列中就需要針對每個報文的下一個報文保存一個指針,即共保存M個下一個報文的指針。而在本發(fā)明實施例中,一個宏單元包括連續(xù)的N個緩存單元,每個緩存單元存儲一個報文,則一個宏單元可以容納N個報文,因此總報文數(shù)量為M時,需要緩存的宏單元的個數(shù)為M/N個,因此共保存M/N個宏單元標識,可見本發(fā)明實施例中相比于現(xiàn)有技術占用的芯片內(nèi)部的隊列管理資源更少,只有現(xiàn)有技術中占用的資源數(shù)的N分之一,隨著N的取值不斷增大,本發(fā)明實施例占用的芯片內(nèi)部的隊列管理資源更少。另外,在實體隊列中還可以包括宏單元內(nèi)部的頭指針和宏單元內(nèi)部的尾指針,其中,宏單元內(nèi)部的頭指針是宏單元中允許出隊報文的一端,頭指針指向宏單元中排在最前面的一個報文,宏單元內(nèi)部的尾指針是宏單元中允許接收報文的一端,尾指針指向宏單元中排在最后面的一個報文。

在本發(fā)明實施例中,網(wǎng)絡芯片外的隨機存儲器中一個宏單元只能分配給一個實體隊列,即一個宏單元內(nèi)包含所有報文都入隊到同一個實體隊列中。例如,第一宏單元對應第一實體隊列,則第一宏單元中所有緩存單元內(nèi)存儲的報文都入隊到第一實體隊列中。需要說明的是,本發(fā)明實施例中,因為大帶寬的設備要求緩存更多的報文,因此報文數(shù)據(jù)都緩存在網(wǎng)絡芯片外的隨機存儲器,但第一宏單元對應的隊列信息都存儲到網(wǎng)絡芯片的內(nèi)部,網(wǎng)絡芯片內(nèi)部通過實體隊列來管理宏單元對應的隊列信息。

在本發(fā)明的一些實施例中,第一實體隊列,至少包括:第一宏單元和在第一實體隊列中處于第一宏單元之前且相鄰的第二宏單元,本發(fā)明實施例提供的隊列管理方法除了執(zhí)行前述的步驟之外,還可以包括如下步驟:

C1、從第一實體隊列中確定出需要報文出隊的宏單元為第二宏單元,第二宏單元對應的隊列信息包括:第二宏單元在第一實體隊列中的宏單元標識、第二宏單元內(nèi)部的頭指針、第二宏單元內(nèi)部的尾指針和第二宏單元的當前平均報文長度;

C2、根據(jù)第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文,并修改第二宏單元內(nèi)部的頭指針對應的偏移值。

其中,步驟101至步驟103描述了本發(fā)明實施例中第一報文的緩存和入隊,接下來通過步驟C1和步驟C2來介紹本發(fā)明實施例中對第二報文的調(diào)度和出隊。其中,哪個報文需要出隊可以通過配置的調(diào)度方式來確定,例如可以按輸出信息如輸出端口、用戶組、用戶和優(yōu)先級等對報文進行調(diào)度,以確定需要調(diào)度的報文在哪個實體隊列,本發(fā)明實施例中以需要出隊的報文位于第一實體隊列為例,先從多個實體隊列中選擇出第一實體隊列,以該第一實體隊列中包括兩個宏單元為例,分別為第一宏單元和第二宏單元,第二宏單元為第一實體隊列中的隊頭,第一宏單元為第一實體隊列中的隊尾,則首先執(zhí)行步驟C1,從第一實體隊列中確定出需要報文出隊的宏單元為第二宏單元。

進一步的,在本發(fā)明的一些實施例中,步驟C1從第一實體隊列中確定出需要報文出隊的宏單元為第二宏單元,具體可以包括如下步驟:

C11、根據(jù)第一實體隊列的鏈表中的隊頭指針確定該隊頭指針指向的宏單元為第二宏單元。

其中,本發(fā)明實施例中,實體隊列可以通過鏈表來管理,鏈表(Link List)是一種最通用的隊列的實現(xiàn)方式,鏈表的數(shù)據(jù)結構包括隊頭指針和隊尾指針,根據(jù)出隊信息從第一實體隊列的鏈表的隊頭指針確定出第二宏單元,則按照前述實施例中的描述,第一實體隊列中每個宏單元都生成有對應的隊列信息,同樣的,第二宏單元也生成有對應的隊列信息,接下來根據(jù)第二宏單元對應的隊列信息可以獲取到該第二宏單元內(nèi)部的頭指針,根據(jù)第二宏單元內(nèi)部的頭指針從第二宏單元中讀取到第二報文,并修改第二宏單元內(nèi)部的頭指針對應的偏移值,例如第二宏單元內(nèi)部的頭指針的偏移值加1,此處只是舉例,不作為對本發(fā)明的限定。

需要說明的是,在本發(fā)明前述步驟C1至C2的實現(xiàn)場景下,是以第一實體隊列中的隊頭為第二宏單元為例進行說明報文的出隊方式,若在第一實體隊列中只包括第一宏單元,則第一宏單元在第一實體隊列中既是隊頭也是隊尾,則步驟C1至C2中的處理對象就可以轉(zhuǎn)換成第一宏單元,也就是說,在第一宏單元中需要出隊報文時,可以指向如下步驟:從第一實體隊列中確定出需要報文出隊的宏單元為第一宏單元,第一宏單元對應的隊列信息包括:第一宏單元在第一實體隊列中的宏單元標識、第一宏單元內(nèi)部的頭指針、第一宏單元內(nèi)部的尾指針和第一宏單元的當前平均報文長度;根據(jù)第一宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文,并修改第一宏單元內(nèi)部的頭指針對應的偏移值。

在本發(fā)明的一些實施例中,在前述執(zhí)行步驟C1和C2的實現(xiàn)場景下,步驟C2根據(jù)第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文之后,本發(fā)明實施例提供的隊列管理方法還可以包括如下步驟:

C3、將第二宏單元的當前平均報文長度發(fā)送給調(diào)度器和限速器,以使調(diào)度器根據(jù)第二宏單元的當前平均報文長度刷新調(diào)度器的權重,限速器根據(jù)第二宏單元的當前平均報文長度刷新限速器的令牌。

其中,在第二報文出隊時還可以將第二報文所在的第二宏單元的平均報文長度提供給各級調(diào)度器和限速器,調(diào)度器根據(jù)第二宏單元的平均報文長度刷新調(diào)度器的權重,限速器根據(jù)第二宏單元的平均報文長度刷新限速器的令牌,使用這種方法不需要存儲第二宏單元內(nèi)各個報文的真實長度,只需要維護報文平均長度即可,可以以宏單元粒度進行刷新調(diào)度器和限速器,對調(diào)度的效果沒有影響。

在本發(fā)明的一些實施例中,步驟103根據(jù)第一宏單元和第一實體隊列生成第一宏單元對應的隊列信息之后,本發(fā)明實施例提供的隊列管理方法還可以包括如下步驟:

D1、根據(jù)第一宏單元對應的隊列信息維護第一實體隊列的鏈表。

其中,本發(fā)明實施例中,第一實體隊列可以通過鏈表來管理,鏈表是一種最通用的隊列的實現(xiàn)方式,鏈表的數(shù)據(jù)結構包括隊頭指針和隊尾指針,在第一實體隊列中入隊的第一宏單元中寫入有第一報文之后,可以根據(jù)生成的第一宏單元對應的隊列信息維護第一實體隊列的鏈表,具體的,如果第一實體隊列在入隊第一宏單元之前為空隊列,則該第一宏單元入隊到第一實體隊列之后,在第一實體隊列的鏈表的隊頭指針和隊尾指針就可以指向該第一宏單元,如果第一實體隊列在入隊第一宏單元之前已經(jīng)存儲了其它宏單元,則該第一宏單元入隊到第一實體隊列之后,在第一實體隊列的鏈表的隊尾指針就可以指向該第一宏單元。

通過前述實施例對本發(fā)明的描述可知,首先將第一報文存儲到第一宏單元中的第一緩存單元,該第一宏單元包括:連續(xù)的N個緩存單元,然后根據(jù)第一報文的報文長度對第一宏單元存儲第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度,最后根據(jù)第一宏單元和第一實體隊列生成第一宏單元對應的隊列信息,第一宏單元對應的隊列信息包括:第一宏單元在第一實體隊列中的宏單元標識、第一宏單元內(nèi)部的頭指針、第一宏單元內(nèi)部的尾指針和第一宏單元的當前平均報文長度。本發(fā)明實施例中對于連續(xù)的多個緩存單元可封裝為一個宏單元,并且宏單元可入隊到實體隊列中,例如第一宏單元入隊到第一實體隊列,實體隊列的管理是以宏單元為粒度來使用緩存單元的資源,不需要存儲每個報文指向的下一個報文的指針,由于本發(fā)明實施例中對于一個宏單元只需要維護宏單元內(nèi)部的平均報文長度,也不需要存儲每個報文的報文長度,因此本發(fā)明實施例中在網(wǎng)絡芯片外緩存報文的規(guī)模相同的情況下,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

為便于更好的理解和實施本發(fā)明實施例的上述方案,下面舉例相應的應用場景來進行具體說明。請參閱如圖2所示,本發(fā)明實施例提供的隨機存儲器中的宏單元的處理流程示意圖。本發(fā)明實施例提出了的隊列管理方法可以實現(xiàn)按照宏單元的粒度對報文緩存管理,與現(xiàn)有技術的方法相比可以極大的減少網(wǎng)絡芯片內(nèi)緩存資源的使用。為方便理解和描述,假設本發(fā)明實施例中中劃分的每一個芯片外DDR SDRAM的緩存單元都可以緩存一個完整的報文,芯片外DDR SDRAM的緩存單元稱之為Cell,每一個Cell都有一個自己的標識,Cell的標識可以對應到DDR的物理地址。本發(fā)明實施例中將地址連續(xù)的8個Cell組成一個宏單元(英文名稱:Macro Cell),同時生成一個Macro Cell的標識,如標識為0~7的8個Cell組成的Macro Cell的標識是0,如標識為8~15的8個Cell組成的Macro Cell的標識是1,以此類推。每條實體隊列是以Macro Cell為粒度來占用Cell的資源,隊列的鏈表也是基于Macro Cell的標識來創(chuàng)建的。在Macro Cell被分配給某個實體隊列后多了一個限制,就是即使一個Macro Cell包含的8個Cell當前還沒有被全部占用,那么其中空閑的Cell也不能再分配給其他的實體隊列了,即需要建立宏單元和實體隊列的唯一對應關系,以保證在一個宏單元內(nèi)存儲的所有報文的隊列信息對應于同一個實體隊列。

如圖2所示以宏單元結構管理隨機存儲器的緩存,每個宏單元最多管理8個報文(可以是其他數(shù)值,不限定為8,以下以8為例進行說明)。圖2中,網(wǎng)絡芯片外的隨機存儲器中包括的宏單元分別:MCn、Mcx、MCy、MCm。其中,MCn中包括連續(xù)的8個緩存單元,這8個緩存單元中分別存儲的報文為:Pn、Pn+1、Pn+2、Pn+3、Pn+4、Pn+5、Pn+6和Pn+7,宏單元MCn中需要出隊的報文為MCn中的頭指針指向的報文Pn,宏單元MCm中包括連續(xù)的8個緩存單元,其中,宏單元MCm中前3個緩存單元中分別存儲的報文為:Pm、Pm+1、Pm+2,宏單元MCm中其余的緩存單元為空(英文名稱:Null),宏單元MCm中需要新緩存的報文為Pm+3。以每個宏單元為單位維護如下的隊列信息,包括宏單元指向下一個宏單元的標識(即Next Pointer)、宏單元的頭指針、宏單元的尾指針,另外隊列信息還可以包括宏單元內(nèi)包含所有報文的平均報文長度。通過維護宏單元指向的下一個宏單元的標識、宏單元內(nèi)部的頭指針偏移值、宏單元內(nèi)部的尾指針偏移值,就可以組成整個實體隊列的隊列鏈表了,而不需要存儲每個報文的下一個報文的指針。

其中,一個宏單元內(nèi)報文數(shù)量=宏單元內(nèi)尾指針偏移值-宏單元內(nèi)頭指針偏移值+1。以宏單元MCn為例,宏單元內(nèi)尾指針偏移值-宏單元內(nèi)頭指針偏移值=7-0,然后再加1可以得到該宏單元MCn內(nèi)存儲了8個報文。

當宏單元中報文出隊時,讀取宏單元頭指針指向的報文,將此報文輸出,同時宏單元頭指針偏移值加1。例如,宏單元MCn內(nèi)的頭指針指向的報文Pn出隊,則宏單元的頭指針偏移值加1。

當報文入隊向宏單元申請分配地址時,宏單元尾指針分配給入隊報文,同時宏單元尾指針偏移值加1。例如,宏單元MCm內(nèi)的尾指針指向報文Pm+2,當報文Pm+3入隊時,則宏單元的尾指針偏移值加1。

需要說明的是,在本發(fā)明實施例中,宏單元中報文全部出隊時,可以回收宏單元的地址指針,該宏單元可以分配給其它的實體隊列。假定總緩存報文數(shù)量為M,每個宏單元內(nèi)緩存8個報文,則需管理的宏單元的數(shù)量為M/8。宏單元通過維護的平均報文長度給每一次調(diào)度提供出隊報文長度,報文出隊時將平均報文長度提供給各級調(diào)度器和限速器。報文在出隊時,宏單元的平均報文長度不變,當宏單元中報文入隊時,宏單元的平均報文長度維護公式如下:平均報文長度new=(平均報文長度old*報文數(shù)量old+入隊報文長度)/(報文數(shù)量old+1)。使用這種方法不需要存儲宏單元內(nèi)各個報文的真實長度,只需要維護平均報文長度即可,本發(fā)明實施例中可以在宏單元粒度上分析,對調(diào)度的效果沒有影響。

通過前述對本發(fā)明的舉例說明可知,本發(fā)明實施例中使用宏單元來管理的緩存資源,用宏單元地址和宏單元內(nèi)部報文的頭/尾偏移指針來維護實體隊列的鏈表資源,大大減少了管理實體隊列的鏈表對芯片內(nèi)部的資源的占用。以宏單元為單位來維護其內(nèi)部所有報文的平均報文長度,使用平均報文長度刷新調(diào)度器和限速器的狀態(tài),相對于傳統(tǒng)的以報文為單位來維護報文長度減少了調(diào)度信息對芯片內(nèi)部的資源的占用,同時又不影響調(diào)度的效果。

以100G字節(jié)的處理能力的芯片而言,一般需要緩存的短報文的數(shù)量都會達到幾百K個報文的量級,甚至1M個報文的量級了。以緩存1M個報文為例,1M個報文需要用20bit的指針來表示,每個報文的長度信息以支持9600字節(jié)的最長報文來計算就需要14bit,按照現(xiàn)有技術,芯片內(nèi)部要保存的下一個報文指針和報文長度的相關資源就要34Mbit,這樣的數(shù)量會占用很大的芯片內(nèi)緩存資源,會帶來芯片成本和功耗的增加。而本發(fā)明實施例中,以系統(tǒng)管理1M個緩存地址,每8個連續(xù)的緩存地址封裝為一個宏單元,共產(chǎn)生128K個宏單元,以每個宏單元內(nèi)維護下一個宏單元的指針17bit、宏單元內(nèi)報文的頭/尾指針各3bit,宏單元內(nèi)報文的平均長度14bit來計算,需要芯片內(nèi)的緩存資源約5Mbit,遠小于現(xiàn)有技術中的34Mbit。設緩存報文數(shù)量為M,宏單元容量為8,在片外DDR緩存規(guī)模相同的情況下,本發(fā)明實施例與現(xiàn)有技術方法相比可節(jié)約片內(nèi)邏輯使用的緩存(34-5)/34=85.29%的資源,在芯片外緩存規(guī)模相同的情況下,減小了芯片實體隊列的鏈表和報文長度占用的芯片內(nèi)部的資源。

需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。

為便于更好的實施本發(fā)明實施例的上述方案,下面還提供用于實施上述方案的相關裝置。

請參閱圖3-a所示,本發(fā)明實施例提供的一種隊列管理裝置300,可以包括:存儲模塊301、平均報文長度修正模塊302和隊列信息生成模塊303,其中,

存儲模塊301,用于將第一報文存儲到第一宏單元包括的第一緩存單元,所述第一宏單元入隊到第一實體隊列,所述第一宏單元包括:連續(xù)的N個緩存單元,所述N為大于或等于2的自然數(shù),所述第一緩存單元屬于所述N個緩存單元;

平均報文長度修正模塊302,用于根據(jù)所述第一報文的報文長度對所述第一宏單元存儲了所述第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度;

隊列信息生成模塊303,用于根據(jù)所述第一宏單元和所述第一實體隊列生成所述第一宏單元對應的隊列信息,所述第一宏單元對應的隊列信息包括:所述第一宏單元在所述第一實體隊列中的宏單元標識、所述第一宏單元內(nèi)部的頭指針和所述第一宏單元內(nèi)部的尾指針和所述第一宏單元的當前平均報文長度。

在本發(fā)明的一些實施例中,所述第一實體隊列,至少包括:第一宏單元和在所述第一實體隊列中處于所述第一宏單元之前且相鄰的第二宏單元,如圖3-b所示,所述隊列管理裝置300還包括:出隊管理模塊304和報文讀取模塊305,其中,

出隊管理模塊304,用于從所述第一實體隊列中確定出需要報文出隊的宏單元為第二宏單元,所述第二宏單元對應的隊列信息包括:所述第二宏單元在所述第一實體隊列中的宏單元標識、所述第二宏單元內(nèi)部的頭指針、所述第二宏單元內(nèi)部的尾指針和所述第二宏單元的當前平均報文長度;

報文讀取模塊305,用于根據(jù)所述第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文,并修改所述第二宏單元內(nèi)部的頭指針對應的偏移值。

進一步的,在本發(fā)明的一些實施例中,所述出隊管理模塊304,出隊管理模塊,具體用于根據(jù)所述第一實體隊列的鏈表中的隊頭指針確定該隊頭指針指向的宏單元為第二宏單元。

進一步的,在本發(fā)明的一些實施例中,如圖3-c所示,相對于如圖3-b所示,所述隊列管理裝置300還包括:發(fā)送模塊306,其中,

所述發(fā)送模塊306,用于所述報文讀取模塊305根據(jù)所述第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文之后,將所述第二宏單元的當前平均報文長度發(fā)送給調(diào)度器和限速器,以使所述調(diào)度器根據(jù)所述第二宏單元的當前平均報文長度刷新所述調(diào)度器的權重,所述限速器根據(jù)所述第二宏單元的當前平均報文長度刷新所述限速器的令牌。

在本發(fā)明的一些實施例中,如圖3-d所示,相對于如圖3-a所示,所述隊列管理裝置300還包括:鏈表維護模塊307,其中,

所述鏈表維護模塊307,用于所述隊列信息生成模塊303根據(jù)所述第一宏單元和所述第一實體隊列生成所述第一宏單元對應的隊列信息之后,根據(jù)所述第一宏單元對應的隊列信息維護所述第一實體隊列的鏈表。

在本發(fā)明的一些實施例中,所述存儲模塊301,具體用于將所述第一宏單元內(nèi)部的尾指針分配給第一報文,并修改所述第一宏單元內(nèi)部的尾指針對應的偏移值。

在本發(fā)明的一些實施例中,如圖3-e所示,所述平均報文長度修正模塊302,包括:

報文數(shù)量獲取模塊3021,用于獲取所述第一宏單元存儲所述第一報文之前已經(jīng)存儲的所有報文數(shù)量;

平均報文長度計算模塊3022,用于根據(jù)所述已經(jīng)存儲的所有報文數(shù)量、所述第一宏單元存儲了所述第一報文之前的平均報文長度和所述第一報文的報文長度計算修正第一宏單元的當前平均報文長度。

通過前述實施例對本發(fā)明的描述可知,首先將第一報文存儲到第一宏單元中的第一緩存單元,該第一宏單元包括:連續(xù)的N個緩存單元,然后根據(jù)第一報文的報文長度對第一宏單元存儲第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度,最后根據(jù)第一宏單元和第一實體隊列生成第一宏單元對應的隊列信息,第一宏單元對應的隊列信息包括:第一宏單元在第一實體隊列中的宏單元標識、第一宏單元內(nèi)部的頭指針、第一宏單元內(nèi)部的尾指針和第一宏單元的當前平均報文長度。本發(fā)明實施例中對于連續(xù)的多個緩存單元可封裝為一個宏單元,并且宏單元可入隊到實體隊列中,例如第一宏單元入隊到第一實體隊列,實體隊列的管理是以宏單元為粒度來使用緩存單元的資源,不需要存儲每個報文指向的下一個報文的指針,由于本發(fā)明實施例中對于一個宏單元只需要維護宏單元內(nèi)部的平均報文長度,也不需要存儲每個報文的報文長度,因此本發(fā)明實施例中在網(wǎng)絡芯片外緩存報文的規(guī)模相同的情況下,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

需要說明的是,上述裝置各模塊/單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構思,其帶來的技術效果與本發(fā)明方法實施例相同,具體內(nèi)容可參見本發(fā)明前述所示的方法實施例中的敘述,此處不再贅述。

本發(fā)明實施例還提供一種計算機存儲介質(zhì),其中,該計算機存儲介質(zhì)存儲有程序,該程序執(zhí)行包括上述方法實施例中記載的部分或全部步驟。

接下來介紹本發(fā)明實施例提供的另一種隊列管理裝置,請參閱圖4所示,隊列管理裝置400包括:

接收器401、發(fā)射器402、處理器403和存儲器404(其中隊列管理裝置400中的處理器403的數(shù)量可以一個或多個,圖4中以一個處理器為例)。在本發(fā)明的一些實施例中,接收器401、發(fā)射器402、處理器403和存儲器404可通過總線或其它方式連接,其中,圖4中以通過總線連接為例。

存儲器404可以包括只讀存儲器和隨機存取存儲器,并向處理器403提供指令和數(shù)據(jù)。存儲器404的一部分還可以包括非易失性隨機存取存儲器(英文全稱:Non-Volatile Random Access Memory,英文縮寫:NVRAM)。存儲器404存儲有操作系統(tǒng)和操作指令、可執(zhí)行模塊或者數(shù)據(jù)結構,或者它們的子集,或者它們的擴展集,其中,操作指令可包括各種操作指令,用于實現(xiàn)各種操作。操作系統(tǒng)可包括各種系統(tǒng)程序,用于實現(xiàn)各種基礎業(yè)務以及處理基于硬件的任務。

處理器403控制隊列管理裝置的操作,處理器403還可以稱為中央處理單元(英文全稱:Central Processing Unit,英文簡稱:CPU)。具體的應用中,隊列管理裝置的各個組件通過總線系統(tǒng)耦合在一起,其中總線系統(tǒng)除包括數(shù)據(jù)總線之外,還可以包括電源總線、控制總線和狀態(tài)信號總線等。但是為了清楚說明起見,在圖中將各種總線都稱為總線系統(tǒng)。

上述本發(fā)明實施例揭示的方法可以應用于處理器403中,或者由處理器403實現(xiàn)。處理器403可以是一種集成電路芯片,具有信號的處理能力。在實現(xiàn)過程中,上述方法的各步驟可以通過處理器403中的硬件的集成邏輯電路或者軟件形式的指令完成。上述的處理器403可以是通用處理器、數(shù)字信號處理器(英文全稱:digital signal processing,英文縮寫:DSP)、專用集成電路(英文全稱:Application Specific Integrated Circuit,英文縮寫:ASIC)、現(xiàn)場可編程門陣列(英文全稱:Field-Programmable Gate Array,英文縮寫:FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。可以實現(xiàn)或者執(zhí)行本發(fā)明實施例中的公開的各方法、步驟及邏輯框圖。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。結合本發(fā)明實施例所公開的方法的步驟可以直接體現(xiàn)為硬件譯碼處理器執(zhí)行完成,或者用譯碼處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機存儲器,閃存、只讀存儲器,可編程只讀存儲器或者電可擦寫可編程存儲器、寄存器等本領域成熟的存儲介質(zhì)中。該存儲介質(zhì)位于存儲器404,處理器403讀取存儲器404中的信息,結合其硬件完成上述方法的步驟。

本發(fā)明實施例中,處理器403,用于執(zhí)行前述實施例中描述的隊列管理方法,詳見前述實施例的說明。

在本發(fā)明實施例中,存儲器304存儲的實體隊列,實體隊列中入隊有第一宏單元,該第一宏單元包括:連續(xù)的N個緩存單元,所述N為大于或等于2的自然數(shù),第一緩存單元屬于N個緩存單元。

在本發(fā)明實施例中,處理器403,用于執(zhí)行如下步驟:

將第一報文存儲到第一宏單元包括的第一緩存單元,所述第一宏單元入隊到第一實體隊列,所述第一宏單元包括:連續(xù)的N個緩存單元,所述N為大于或等于2的自然數(shù),所述第一緩存單元屬于所述N個緩存單元;

根據(jù)所述第一報文的報文長度對所述第一宏單元存儲了所述第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度;

根據(jù)所述第一宏單元和所述第一實體隊列生成所述第一宏單元對應的隊列信息,所述第一宏單元對應的隊列信息包括:所述第一宏單元在所述第一實體隊列中的宏單元標識、所述第一宏單元內(nèi)部的頭指針、所述第一宏單元內(nèi)部的尾指針和所述第一宏單元的當前平均報文長度。

在本發(fā)明實施例中,所述第一實體隊列,至少包括:第一宏單元和在所述第一實體隊列中處于所述第一宏單元之前且相鄰的第二宏單元,處理器403,還用于執(zhí)行如下步驟:

從所述第一實體隊列中確定出需要報文出隊的宏單元為第二宏單元,所述第二宏單元對應的隊列信息包括:所述第二宏單元在所述第一實體隊列中的宏單元標識、所述第二宏單元內(nèi)部的頭指針、所述第二宏單元內(nèi)部的尾指針和所述第二宏單元的當前平均報文長度;

根據(jù)所述第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文,并修改所述第二宏單元內(nèi)部的頭指針對應的偏移值。

在本發(fā)明一些實施例中,處理器403,還用于執(zhí)行如下步驟:根據(jù)所述第二宏單元內(nèi)部的頭指針讀取到需要出隊的第二報文之后,將所述第二宏單元的當前平均報文長度發(fā)送給調(diào)度器和限速器,以使所述調(diào)度器根據(jù)所述第二宏單元的當前平均報文長度刷新所述調(diào)度器的權重,所述限速器根據(jù)所述第二宏單元的當前平均報文長度刷新所述限速器的令牌。

在本發(fā)明一些實施例中,處理器403,還用于執(zhí)行如下步驟:根據(jù)所述第一宏單元和所述第一實體隊列生成所述第一宏單元對應的隊列信息之后,根據(jù)所述第一宏單元對應的隊列信息維護所述第一實體隊列的鏈表。

在本發(fā)明一些實施例中,處理器403,具體用于執(zhí)行如下步驟:

將所述第一宏單元內(nèi)部的尾指針分配給第一報文,并修改所述第一宏單元內(nèi)部的尾指針對應的偏移值。

在本發(fā)明一些實施例中,處理器403,具體用于執(zhí)行如下步驟:

獲取所述第一宏單元存儲所述第一報文之前已經(jīng)存儲的所有報文數(shù)量;

根據(jù)所述已經(jīng)存儲的所有報文數(shù)量、所述第一宏單元存儲了所述第一報文之前的平均報文長度和所述第一報文的報文長度計算第一宏單元的當前平均報文長度。

通過前述實施例對本發(fā)明的描述可知,首先將第一報文存儲到第一宏單元中的第一緩存單元,該第一宏單元包括:連續(xù)的N個緩存單元,然后根據(jù)第一報文的報文長度對第一宏單元存儲第一報文之前的平均報文長度進行修正,得到第一宏單元的當前平均報文長度,最后將第一宏單元入隊到第一實體隊列,并根據(jù)第一宏單元和第一實體隊列生成第一宏單元對應的隊列信息,第一宏單元對應的隊列信息包括:第一宏單元在第一實體隊列中的宏單元標識、第一宏單元內(nèi)部的頭指針、第一宏單元內(nèi)部的尾指針和第一宏單元的當前平均報文長度。本發(fā)明實施例中對于連續(xù)的多個緩存單元可封裝為一個宏單元,并且宏單元是入隊到實體隊列中,例如第一宏單元入隊到第一實體隊列,實體隊列的管理是以宏單元為粒度來使用緩存單元的資源,不需要存儲每個報文指向的下一個報文的指針,由于本發(fā)明實施例中對于一個宏單元只需要維護宏單元內(nèi)部的平均報文長度,也不需要存儲每個報文的報文長度,因此本發(fā)明實施例中在網(wǎng)絡芯片外緩存報文的規(guī)模相同的情況下,減小了網(wǎng)絡芯片內(nèi)實體隊列占用的網(wǎng)絡芯片內(nèi)部的存儲資源,從而可以降低網(wǎng)絡芯片的成本和功耗。

另外需說明的是,以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。另外,本發(fā)明提供的裝置實施例附圖中,模塊之間的連接關系表示它們之間具有通信連接,具體可以實現(xiàn)為一條或多條通信總線或信號線。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。

通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過專用硬件包括專用集成電路、專用CPU、專用存儲器、專用元器件等來實現(xiàn)。一般情況下,凡由計算機程序完成的功能都可以很容易地用相應的硬件來實現(xiàn),而且,用來實現(xiàn)同一功能的具體硬件結構也可以是多種多樣的,例如模擬電路、數(shù)字電路或?qū)S秒娐返?。但是,對本發(fā)明而言更多情況下軟件程序?qū)崿F(xiàn)是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機的軟盤、U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。

綜上所述,以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照上述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對上述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質(zhì)脫離本發(fā)明各實施例技術方案的精神和范圍。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
蒙阴县| 千阳县| 晴隆县| 呈贡县| 勐海县| 磴口县| 宝坻区| 建水县| 黄浦区| 竹溪县| 阳山县| 太康县| 富阳市| 揭西县| 黄浦区| 临夏县| 天等县| 芜湖市| 达尔| 宜宾县| 石阡县| 博野县| 浑源县| 青海省| 民县| 鲁甸县| 叙永县| 正安县| 邵武市| 东辽县| 甘肃省| 新晃| 阿瓦提县| 静安区| 新安县| 班戈县| 东乡族自治县| 普陀区| 门源| 元阳县| 顺昌县|