專利名稱:分級(jí)式優(yōu)先級(jí)循環(huán)(hprr)規(guī)劃的制作方法
相關(guān)申請(qǐng)的交叉引用本申請(qǐng)要求本申請(qǐng)人于1999年9月25日提交的美國臨時(shí)申請(qǐng)的優(yōu)先權(quán),該臨時(shí)申請(qǐng)的專利號(hào)為60/156,123,題為“分級(jí)式優(yōu)先級(jí)循環(huán)(HPRR)規(guī)劃”。
控制網(wǎng)絡(luò)資源既涉及本地使用決策,又需考慮每條連接的端對(duì)端需求。鏈路共享機(jī)制的功能之一是啟用網(wǎng)關(guān)來控制本地鏈路上的帶寬分布,藉以響應(yīng)純本地的請(qǐng)求。
由于需要在共享的鏈路上支持不同的業(yè)務(wù)類型(包括共享鏈路上的實(shí)時(shí)服務(wù)),故而需要一種含有各類業(yè)務(wù)的分級(jí)鏈路共享。鏈路共享服務(wù)和實(shí)時(shí)服務(wù)須同時(shí)滿足網(wǎng)關(guān)上的各套約束條件;還要在滿足鏈路共享需求的條件下,既保證了優(yōu)先級(jí)較高的業(yè)務(wù),又能兼顧優(yōu)先級(jí)較低的業(yè)務(wù)。
目前的規(guī)劃方法使用優(yōu)先級(jí)CBQ(基于類的隊(duì)列)或WFQ(加權(quán)平等隊(duì)列)等手段的變異,從而支持分級(jí)式QOS(服務(wù)質(zhì)量)?,F(xiàn)有技術(shù)的CBQ和WFQ方法忽視了兩個(gè)重要因素(一)超限的業(yè)務(wù),即超出約定的業(yè)務(wù)速率以外的那部份業(yè)務(wù)流,和(二)對(duì)業(yè)務(wù)流有意的過度預(yù)定,藉以提供帶寬和延遲的總體保證,而非絕對(duì)保證。過度預(yù)定是指在全部業(yè)務(wù)流同時(shí)處于活動(dòng)狀態(tài)時(shí),即使缺乏足夠的容量來提供帶寬,也要允許為業(yè)務(wù)流至少保留最小的帶寬。
CBQ算法假設(shè)業(yè)務(wù)流固定,并總處于活動(dòng)狀態(tài),而未考慮到不斷迅速變化的環(huán)境下的活動(dòng)業(yè)務(wù)流。CBQ算法使用反應(yīng)緩慢的各業(yè)務(wù)流的平均速率來區(qū)分超限的業(yè)務(wù)。CBQ算法之所以反應(yīng)較慢,是因?yàn)樗烙?jì)算出來的類平均速率來判斷該類是否超出了業(yè)務(wù)上限。它計(jì)算出反應(yīng)較慢的各業(yè)務(wù)流(或類)平均速率,依此來標(biāo)記超限的類,再通過一種較復(fù)雜的算法來給超限的類平等地指配帶寬。最終,它沒有限定類內(nèi)業(yè)務(wù)流的過度預(yù)定(即有意地允許了過多業(yè)務(wù)流的進(jìn)入,并需確保這些業(yè)務(wù)流的服務(wù)速率的最小值),而是寄希望于所允許的業(yè)務(wù)流從總體上看不會(huì)被同時(shí)積壓。CBQ算法未考慮到過度預(yù)定時(shí)的強(qiáng)制性類帶寬分配。
按照CBQ算法,各類皆被局限在分配給自己的平均帶寬內(nèi),但對(duì)于未超限的類,則無法避免它們的瞬時(shí)帶寬損失。這是因?yàn)樯鲜龅腃BQ算法需仰仗變化較慢的平均速率來判斷類是否超限。
單級(jí)WFQ方法會(huì)受到過度預(yù)定問題的困擾,因?yàn)橐唤M過度預(yù)定的業(yè)務(wù)流可隨意獲得大段帶寬。即使業(yè)務(wù)流的數(shù)量過多,各業(yè)務(wù)流也要平等地享有帶寬份額。分級(jí)式WFQ規(guī)劃的引入可緩解過度預(yù)定的問題,不過,WFQ算法假設(shè)各業(yè)務(wù)流皆遵循自己的業(yè)務(wù)規(guī)范,而該算法未對(duì)超出業(yè)務(wù)規(guī)劃限制的個(gè)別業(yè)務(wù)流加以限定。在分級(jí)式WFQ方法里,某一類里的業(yè)務(wù)流不可能與最高效的類共享帶寬。若某較高級(jí)別業(yè)務(wù)流超限了,它也只能局限于指配給自己所屬類的帶寬,而不能與缺省類里的最高效的業(yè)務(wù)流爭奪帶寬。例如,假設(shè)在一種情形里,某確保類里有五個(gè)業(yè)務(wù)流,各分得10%的帶寬份額,而缺省類里只有一個(gè)業(yè)務(wù)流,并也分得50%的帶寬。由于缺省業(yè)務(wù)流經(jīng)常積壓,故分得50%的帶寬。若某個(gè)確保業(yè)務(wù)流的需求驟增,需要盡可能多的帶寬,它還是只能得到10%的鏈路帶寬,即分配給使用分級(jí)式WFQ的確保類的那50%帶寬的1/5。
在WFQ規(guī)劃算法里,過度預(yù)定的流仍依各自的重要程度來使用帶寬,且正是由于足夠的過度預(yù)定而能夠隨意占用大段帶寬。WFQ算法未對(duì)局限于一部份帶寬里的業(yè)務(wù)流的所屬類加以限定,甚至在過度預(yù)定時(shí),也未對(duì)強(qiáng)制性帶寬分配加以限定。對(duì)于帶寬提供商來說,過度預(yù)定是出于重要的經(jīng)濟(jì)需要。固然,與DRR(差額循環(huán))算法相比,WFQ算法在最差條件下可提供較好的延遲,但也帶入了一些復(fù)雜運(yùn)算。最突出的問題是要用除法運(yùn)算來計(jì)算數(shù)據(jù)包的結(jié)束時(shí)刻,以及在結(jié)束時(shí)刻的基礎(chǔ)上,維持隊(duì)列次序所需的復(fù)雜運(yùn)算。通常認(rèn)為這些復(fù)雜運(yùn)算出現(xiàn)在N個(gè)可能的業(yè)務(wù)流的次序O(log N)里。
欲在數(shù)據(jù)網(wǎng)絡(luò)服務(wù)里提供分級(jí)式QOS(服務(wù)質(zhì)量),需要一個(gè)重要組件,那就是為通往向外傳輸界面的數(shù)據(jù)包進(jìn)行規(guī)劃的方法。本發(fā)明是一種規(guī)劃傳輸界面上的數(shù)據(jù)包的方法,該方法可向不同的業(yè)務(wù)流的所屬類提供帶寬分配,其中每一類里皆包含一定數(shù)量的業(yè)務(wù)流。該方法可有效而平等地處理過度預(yù)定的流,即允許的流的業(yè)務(wù)速率之和超出了分配給這些流的所屬類的容量。本發(fā)明改進(jìn)了DRR(差額循環(huán))算法,依各類的優(yōu)先級(jí)而提供數(shù)據(jù)包的優(yōu)先級(jí)運(yùn)送,同時(shí)又沿用了DRR的機(jī)制,即把各類的帶寬限制在分配給他們的容量以內(nèi)。本發(fā)明關(guān)鍵在于把某個(gè)類指定為缺省類,其中,那些超出所屬類的業(yè)務(wù)速率的流仍可在缺省類分得的帶寬里運(yùn)送數(shù)據(jù)包。
按照HPRR,在上例里,確保類里需求驟增的流可分得10%的確保帶寬加上最高效的帶寬的一半(即總帶寬的25%),共占總帶寬的35%。HPRR方法有效而輕易地把缺省帶寬即最高效的帶寬指配給了超出業(yè)務(wù)上限的、所屬級(jí)別不同的類里的業(yè)務(wù)流。
HPRR使用即時(shí)精確的令牌戽速率分類標(biāo)記,從而把各數(shù)據(jù)包標(biāo)記為“滿足”或“不滿足”該流的業(yè)務(wù)規(guī)范。本發(fā)明關(guān)鍵在于把各業(yè)務(wù)流看成屬于兩種不同的類之一各流所屬的類和缺省類、或最高效的類。HPRR方法允許按以下兩種方式之一來運(yùn)送業(yè)務(wù)流里的數(shù)據(jù)包要么占用分配給該流所屬類的帶寬,要么占用最高效的帶寬。與CBQ方法不同,HPRR方法既不想把類標(biāo)記為超限與否,也不去判斷超限的類是否被允許運(yùn)送各自的數(shù)據(jù)包。完全毋需任何算法來檢查各同級(jí)的類是否超限,而是向各流皆提供兩條數(shù)據(jù)包傳送路徑,于是各流總能平等地分享兩種不同的類的份額該流主要的即所屬的類,和最高效的類。
HPRR方法是一種可處理過度預(yù)定的類的簡單而有效的算法。一個(gè)過度預(yù)定的類里的各流皆需全力爭奪分配給該類的帶寬,但是,因?yàn)楦髁鹘钥墒褂米罡咝У膸?,所以它們也可平等地分享最高效的帶寬,從而在別的類處于不活動(dòng)狀態(tài)時(shí)使得這些類的帶寬得以確保。
HPRR方法在逐個(gè)數(shù)據(jù)包的基礎(chǔ)上判斷數(shù)據(jù)包自身是否滿足業(yè)務(wù)速率令牌戽。若某個(gè)數(shù)據(jù)包不滿足該流的業(yè)務(wù)規(guī)范令牌戽,則它沒有資格經(jīng)該流所屬類的帶寬來運(yùn)送,但仍有資格經(jīng)缺省類的帶寬來運(yùn)送。HPRR方法使用了新穎的優(yōu)先級(jí)DRR方法,從而以最差條件下的延遲變長為代價(jià),省卻了除法運(yùn)算和維持有序隊(duì)列的O(logN)運(yùn)算。詞匯定義普通規(guī)劃系統(tǒng)不依鏈路共享的規(guī)定來規(guī)劃葉片類里的數(shù)據(jù)包。
鏈路共享規(guī)劃系統(tǒng)規(guī)劃某些類里的數(shù)據(jù)包,這些類在網(wǎng)絡(luò)擁擠時(shí)超出了鏈路共享的份額。
規(guī)則類此類里的數(shù)據(jù)包在網(wǎng)關(guān)處,由鏈路共享規(guī)劃系統(tǒng)來規(guī)劃。
不規(guī)則類此類里的業(yè)務(wù)由普通規(guī)劃系統(tǒng)來規(guī)劃。
超限、未超限、滿限若某類占用的帶寬超出了指配給它的鏈路共享帶寬(在規(guī)定的時(shí)間間隔內(nèi)的平均值,以字節(jié)/秒來計(jì)算),則稱該類“超限”;若它占用的帶寬小于它分得的鏈路共享的帶寬段,則稱該類“未超限”;除此之外皆稱為“滿限”。
通過以下的詳細(xì)說明并結(jié)合附圖,方可更為透徹地理解本發(fā)明及其上述乃至更多優(yōu)點(diǎn)。在附圖里,
具體實(shí)施例方式
圖1是根據(jù)本發(fā)明的原理而示出的分級(jí)式優(yōu)先級(jí)循環(huán)(HPRR)規(guī)劃的部份方案流程圖。本發(fā)明公開了一種方法和儀器,用來在數(shù)據(jù)傳輸鏈路上規(guī)劃數(shù)據(jù)包的傳輸。在傳輸鏈路上待傳輸?shù)臄?shù)據(jù)包被交給規(guī)劃系統(tǒng),規(guī)劃系統(tǒng)按需要把數(shù)據(jù)包列隊(duì)并記錄下來,以滿足預(yù)先確定的標(biāo)準(zhǔn)。
本文所述的規(guī)劃方法和儀器(統(tǒng)稱“規(guī)劃系統(tǒng)”)綜合了各流的隊(duì)列與優(yōu)先級(jí)服務(wù),該優(yōu)先級(jí)服務(wù)既限制了各優(yōu)先級(jí)上的最大驟增量,也限制了各優(yōu)先級(jí)基礎(chǔ)上的帶寬段。本發(fā)明綜合了加權(quán)平等隊(duì)列(WFQ)和基于類的隊(duì)列(CBQ)的關(guān)鍵。此外,本規(guī)劃方法和儀器還包括了改進(jìn)后的差額循環(huán)服務(wù)方法,改進(jìn)后的差額循環(huán)服務(wù)方法省卻了優(yōu)先級(jí)列隊(duì)和WFQ結(jié)束時(shí)刻所需除法運(yùn)算的麻煩。
參考圖1,根據(jù)本發(fā)明的規(guī)劃系統(tǒng)經(jīng)其內(nèi)部的各級(jí)來處理數(shù)據(jù)包。
1.先把數(shù)據(jù)包歸類為流。對(duì)于網(wǎng)際協(xié)議(IP)來說,流的歸類最好是自變量為數(shù)據(jù)包的源IP地址和目標(biāo)IP地址、IP協(xié)議類型和數(shù)據(jù)包里的用戶報(bào)文協(xié)議(UDP)或傳輸控制協(xié)議(TCP)端口數(shù)量的函數(shù)。在規(guī)劃系統(tǒng)里,數(shù)據(jù)包首先被列隊(duì),每隊(duì)即為一個(gè)流。各流最好具有盡可能多的緩沖區(qū),在此進(jìn)行列隊(duì)。流的歸類的一個(gè)例子是IP電話的數(shù)據(jù)包(即打包的語音)被歸入1號(hào)流,而別的數(shù)據(jù)包則被歸入4號(hào)流(缺省類里的流)。
各業(yè)務(wù)流皆被看成單一的服務(wù)類里的組成部份,該服務(wù)類描述了提供給流的數(shù)據(jù)運(yùn)送服務(wù)。
2.接著,數(shù)據(jù)包必須通過最高速率令牌戽的限制,這是在各流的基礎(chǔ)上對(duì)運(yùn)送速率的限制。若數(shù)據(jù)包能通過最高速率的限制,則有資格在以下兩類的任意一類里運(yùn)送該流的所屬類、或缺省類。
3.接著,數(shù)據(jù)包還須通過業(yè)務(wù)速率令牌戽的限制,這樣方可有資格運(yùn)送至各自的邏輯類的隊(duì)列。業(yè)務(wù)速率是業(yè)務(wù)流的源向網(wǎng)絡(luò)里注入業(yè)務(wù)的最高速率。網(wǎng)絡(luò)與業(yè)務(wù)源之間的服務(wù)合同使得數(shù)據(jù)包只有以低于業(yè)務(wù)速率來傳輸,方可享受網(wǎng)絡(luò)上分級(jí)式服務(wù)。對(duì)于約定信息率(CIR)的服務(wù),譬如在幀中繼網(wǎng)絡(luò)里提供的服務(wù),業(yè)務(wù)速率對(duì)應(yīng)于CIR速率。對(duì)于網(wǎng)絡(luò)來說,接收數(shù)據(jù)包的速率最好能高于業(yè)務(wù)速率,但是運(yùn)送數(shù)據(jù)包則要以最高效為基礎(chǔ)。在根據(jù)本發(fā)明優(yōu)選實(shí)施例的規(guī)劃系統(tǒng)里,若數(shù)據(jù)包以高于業(yè)務(wù)速率而抵達(dá),則運(yùn)送數(shù)據(jù)包時(shí)禁止占用分配給其所屬的服務(wù)類的帶寬,而只能占用分配給缺省類的帶寬。
4.在某個(gè)時(shí)刻,可能有某個(gè)類被過度預(yù)定了,這表明進(jìn)場控制算法允許業(yè)務(wù)速率超出原定分配給該類的傳輸信道容量。在這種情形里,規(guī)劃系統(tǒng)不僅允許數(shù)據(jù)包占用其所屬類的帶寬,還允許數(shù)據(jù)包占用缺省類的帶寬。
5.數(shù)據(jù)包在通過業(yè)務(wù)速率的限制后,在各類的隊(duì)列上進(jìn)行規(guī)劃,該隊(duì)列把全部流的數(shù)據(jù)包歸入同一類里。
數(shù)據(jù)包實(shí)際上只被列入各類的隊(duì)列里。圖1里的各類的隊(duì)列皆為虛擬隊(duì)列,用來說明本發(fā)明的操作方法。同樣,任何數(shù)據(jù)包,只要是滿足了業(yè)務(wù)流的最高速率令牌戽的限制,就既有資格占用所屬類的帶寬,也有資格占用缺省類的帶寬。
各流實(shí)際的隊(duì)列填充了含有該流所屬的服務(wù)類的隊(duì)列。本發(fā)明不涵蓋同一類里的流的數(shù)據(jù)包被運(yùn)送至各類的隊(duì)列的方式,該方式是平等隊(duì)列算法(譬如差額循環(huán)規(guī)劃)的一種優(yōu)選類型。
在規(guī)劃系統(tǒng)里為各流皆設(shè)定了最高速率的限制,于是,若超出了該流的設(shè)定最高速率,則系統(tǒng)將無法運(yùn)送數(shù)據(jù)包了。緩沖區(qū)的管理是以各流而不是以各類為基礎(chǔ)的。
各流還有業(yè)務(wù)流的限制,若該流超出了業(yè)務(wù)流的限制,則禁止把它運(yùn)送至所屬的服務(wù)類的隊(duì)列。各流皆需設(shè)定業(yè)務(wù)速率的限制,只有滿足該限制,才能占用分配給該流所屬的類的帶寬。雖然,業(yè)務(wù)流發(fā)出數(shù)據(jù)的速率允許高于業(yè)務(wù)速率,但是這樣發(fā)出的數(shù)據(jù)要停留在各流的隊(duì)列上,運(yùn)送數(shù)據(jù)時(shí)只能占用缺省類分得的帶寬。
規(guī)劃系統(tǒng)把數(shù)據(jù)包從流的隊(duì)列運(yùn)送到流所屬的服務(wù)類的虛擬隊(duì)列。之所以是虛擬隊(duì)列,是因?yàn)槲阈鑼?shí)現(xiàn)各類的隊(duì)列的實(shí)際隊(duì)列(譬如,鏈接的列表),而是只保留一個(gè)指針,指向各類的列表的頂層流的隊(duì)列。當(dāng)虛擬優(yōu)先級(jí)隊(duì)列解散時(shí),其頂層的數(shù)據(jù)包就離開了(真實(shí)的)流的隊(duì)列,再在該類里掃描處于活動(dòng)狀態(tài)的流的隊(duì)列,以確定類的隊(duì)列的下一個(gè)頂層。規(guī)劃系統(tǒng)最好是不要運(yùn)送任何不合次序的單獨(dú)隊(duì)列里的數(shù)據(jù)包。
各類皆可分得一個(gè)優(yōu)先級(jí)。隊(duì)列里的類受到帶寬的限制,依其優(yōu)先級(jí)的高低而享受服務(wù)。用DRR(差額循環(huán))算法來規(guī)劃各類的數(shù)據(jù)包固然不錯(cuò),但本發(fā)明為了實(shí)現(xiàn)優(yōu)先級(jí)規(guī)劃而改進(jìn)了DRR算法。優(yōu)先級(jí)最高的類最先享受服務(wù),一直到它的定額用完了,才掃描優(yōu)先級(jí)次高的類。當(dāng)諸類的定額全用完了,再開始下一輪的DRR循環(huán)。
規(guī)劃系統(tǒng)以各類的最大分配帶寬(MAB)設(shè)定值為基礎(chǔ),計(jì)算該類的優(yōu)先級(jí)DRR算法的定額。MAB最方便的表示法是使用介于1到100之間的整數(shù)百分比,不過在本發(fā)明的范圍內(nèi),還可使用別的測量方法。
某類分得的MAB確定了該類的DRR定額,于是各類的定額與它們的MAB成正比。下面說明由MAB來計(jì)算定額的算法。MAB最高的類分得的定額最大,該定額是系統(tǒng)所允許的最大數(shù)據(jù)包的大小。對(duì)于IP路由協(xié)議來說,合理的最大數(shù)據(jù)包應(yīng)為1600字節(jié),大于以太局域網(wǎng)(LAN)的IP最大傳輸單元(MTU)。再以別的類的MAB與最高M(jìn)AB的比值為基礎(chǔ),給別的類分配定額。例如,設(shè)最高M(jìn)AB為50%,分配給它的定額是1600,則MAB為10%的類分得的定額就是10÷50×1600,即320字節(jié)。使用這種算法來分配定額時(shí),動(dòng)態(tài)范圍的保留速率應(yīng)限制在1500比1以內(nèi),最好是限制在100比1左右,這樣方可限制1600字節(jié)差額所需的累加循環(huán)輪數(shù)。
本發(fā)明的規(guī)劃系統(tǒng)有一個(gè)重要理念,即優(yōu)先級(jí)不為零的流皆要被掃描兩次一次是被優(yōu)先級(jí)隊(duì)列規(guī)劃系統(tǒng)所掃描,另一次是被最高效(BE)的零優(yōu)先級(jí)DRR規(guī)劃系統(tǒng)所掃描,目的是把最高效的帶寬也分配給即各優(yōu)先級(jí)不等的流。例如,設(shè)想有5個(gè)優(yōu)先級(jí)的流,其業(yè)務(wù)速率為10kbps,以及1個(gè)最高效的流,它們共享500kbps的信道。優(yōu)先級(jí)的流一共只保留了500kpbs里的50kbps,但他們需要一種機(jī)制來分享留給最高效的流的那450kbps。上述對(duì)流進(jìn)行兩次掃描方可達(dá)到此目的。
在諸流被持續(xù)積壓的期間,某個(gè)流分得的帶寬是以下二速率之和1.該流的標(biāo)稱業(yè)務(wù)速率,即該流在其所屬類的優(yōu)先級(jí)上的傳輸速率;和2.該流所分得的最高效帶寬的剩余容量。
在IP組網(wǎng)時(shí),在任何時(shí)刻皆可識(shí)別出一些亟需帶寬的流,同時(shí)另一些流則處于空閑狀態(tài)。某給定流享受的服務(wù)份額并非其定額除以全部流的總定額,而是它的定額除以全部處于活動(dòng)狀態(tài)的流的總定額?!爸概洹币辉~指的是一個(gè)流,當(dāng)頻帶管理給某個(gè)特定的射頻信道分配調(diào)制解調(diào)器時(shí),也給該流分配了信道。僅當(dāng)該流的數(shù)據(jù)包被列隊(duì)于各流的隊(duì)列上(即該流被積壓)時(shí),或當(dāng)該流的數(shù)據(jù)包正在被傳輸時(shí),方認(rèn)為該流處于活動(dòng)狀態(tài)。
例如,設(shè)在分配給信道的最高效即零優(yōu)先級(jí)上有100個(gè)流,各流的定額是1500字節(jié)。在給定的網(wǎng)絡(luò)擁擠時(shí)段(即至少有一個(gè)數(shù)據(jù)包被列隊(duì)),只有10個(gè)調(diào)制解調(diào)器在傳輸數(shù)據(jù)。由于只有10個(gè)調(diào)制解調(diào)器在工作,故處于活動(dòng)狀態(tài)的定額之和就是15000字節(jié),各調(diào)制解調(diào)器皆分得1500/15000的帶寬傳輸份額,即零優(yōu)先級(jí)(優(yōu)先級(jí)最低)的業(yè)務(wù)所分得信道的10%。
本發(fā)明的規(guī)劃系統(tǒng)在過度預(yù)定時(shí)的操作至關(guān)重要。若進(jìn)入傳輸鏈路的業(yè)務(wù)流的速率超出了該流所屬類分得的鏈路容量,則會(huì)出現(xiàn)過度預(yù)定。各類皆被單獨(dú)規(guī)劃,且各類皆不得超出其平均速率(平均速率是在各類的規(guī)劃級(jí)別上使用DRR時(shí),由定額分配所確定的)。在本發(fā)明的另一種實(shí)施例里,各類的規(guī)劃步驟還可使用WFQ,此時(shí)同樣禁止任何類超份額地使用帶寬。
本發(fā)明改進(jìn)了DRR方法,從而可提供優(yōu)先級(jí)運(yùn)送。優(yōu)先級(jí)DRR方法最好是在本發(fā)明規(guī)劃系統(tǒng)的各類規(guī)劃的末級(jí)使用。現(xiàn)有技術(shù)的DRR仰仗分配給各規(guī)劃類的定額的理念,以循環(huán)方式來訪問各類。而根據(jù)本發(fā)明,各類皆可分得一個(gè)優(yōu)先級(jí)。本發(fā)明的優(yōu)先級(jí)DRR方法依優(yōu)先級(jí)的高低來訪問各類,若類的優(yōu)先級(jí)相同,則訪問時(shí)不分先后次序。優(yōu)先級(jí)最高的類首先享受服務(wù),一直到運(yùn)完了該類的隊(duì)列里的全部數(shù)據(jù)包、或是該類用盡了自己的差額值,才輪到優(yōu)先級(jí)次高的類享受服務(wù)。當(dāng)各類皆清空了各自的隊(duì)列或用盡了自己的差額值后,就開始了新一輪DRR循環(huán),即給全部積壓的類分配新的定額。按照DRR算法,定額的分配比率確定了該類所分得的傳輸鏈路帶寬的長期比率。
在本發(fā)明的優(yōu)選實(shí)施例里,業(yè)務(wù)流以過度預(yù)定的設(shè)定級(jí)別為基礎(chǔ)而進(jìn)入傳輸信道。一種手段是在服務(wù)類里人為設(shè)定處于活動(dòng)狀態(tài)的流的百分比。例如,若預(yù)計(jì)有10%的流同時(shí)處于活動(dòng)狀態(tài),則在此情形里,活動(dòng)百分比的設(shè)定值(CAP)即為10%。
各流皆有其業(yè)務(wù)規(guī)范,該業(yè)務(wù)規(guī)范給出了業(yè)務(wù)速率和業(yè)務(wù)速率令牌戽的驟增參數(shù)。需要判斷業(yè)務(wù)流里的數(shù)據(jù)包是否滿足業(yè)務(wù)規(guī)范。各類皆有與之關(guān)聯(lián)的最小保留帶寬。這種情況類似于異步傳輸模式(ATM)網(wǎng)絡(luò)里最小單元速率的幀中繼網(wǎng)絡(luò)CIR(約定信息速率)。以最小保留速率做為本發(fā)明的方法里業(yè)務(wù)速率令牌戽的業(yè)務(wù)規(guī)范。
接著,過度預(yù)定的進(jìn)場控制方法允許業(yè)務(wù)流進(jìn)入,使得CAP百分比乘以入流的總保留速率小于分配給信道里該類的MAB百分比。例如,設(shè)CAP為10%,把該類的MAB設(shè)定為1Mbps信道的50%,而該類的保留業(yè)務(wù)速率是100kpbs,則入流的數(shù)量是就是入流的數(shù)量=(MAB×信道容量)/(CAB×保留帶寬)=0.50×1,000,000/(0.10×100,000)=50個(gè)入流若流在出現(xiàn)過度預(yù)定時(shí)進(jìn)入,則實(shí)際處于活動(dòng)狀態(tài)的流要多于CAP所預(yù)計(jì)的數(shù)量。本發(fā)明的規(guī)劃方法把設(shè)定的類的容量全部均分給過度預(yù)定的入流,于是各流皆分得了少于“約定”帶寬的速率,而別的類則不受影響。各流皆可使用最高效的帶寬,不過,若別的最高效的流處于不活動(dòng)狀態(tài),則這些流仍有可能享受各自的約定帶寬。還有,最好是能報(bào)告抵達(dá)系統(tǒng)的數(shù)據(jù)包數(shù)量,從而獲悉所屬類的過度預(yù)定的狀況,即比CAP所設(shè)定的活動(dòng)百分比還多的流被同時(shí)積壓。由此可以指導(dǎo)CAP參數(shù)的設(shè)定,并可做為服務(wù)級(jí)別協(xié)議的基礎(chǔ)。
由于改變了業(yè)務(wù)規(guī)范和入場策略,故可使用本發(fā)明來實(shí)現(xiàn)主要的QOS服務(wù)方案。
依靠優(yōu)先級(jí)最高的類,且該類又帶有非零業(yè)務(wù)戽和零過度預(yù)定(即CAP為100%同時(shí)活動(dòng)),方可提供確保質(zhì)量的服務(wù)。這種結(jié)合確保了最小延遲和最大帶寬。
利用非零業(yè)務(wù)速率、低于確保類的優(yōu)先級(jí)、以及允許的過度預(yù)定,可實(shí)現(xiàn)約定信息速率(CIR)的服務(wù)類。由于允許了過度預(yù)定,典型數(shù)據(jù)通信里需求驟增的業(yè)務(wù)可享受總體確保的服務(wù),同時(shí)也可保持鏈路的高利用率。
利用無限業(yè)務(wù)速率戽和無限過度預(yù)定(CAP=0)、且該類的優(yōu)先級(jí)低于CIR類但高于缺省服務(wù)類,可提供優(yōu)先級(jí)的最高效服務(wù)類。
缺省服務(wù)類應(yīng)擁有無限業(yè)務(wù)速率戽、無限過度預(yù)定、以及低于上述優(yōu)先級(jí)的最高效服務(wù)類的優(yōu)先級(jí)。
優(yōu)先級(jí)高低不等的服務(wù)類應(yīng)擁有無限業(yè)務(wù)速率和無限過度預(yù)定,并應(yīng)擁有高于缺省類的優(yōu)先級(jí)。
圖2示出了在本發(fā)明的上述實(shí)施例里使用的關(guān)鍵數(shù)據(jù)的結(jié)構(gòu)。FLOW結(jié)構(gòu)100含有與單個(gè)數(shù)據(jù)包流關(guān)聯(lián)的全部信息。各流皆含有一個(gè)名為PacketQ的隊(duì)列結(jié)構(gòu),其中含有指針,指向待傳輸?shù)臄?shù)據(jù)包隊(duì)列的始末兩端。
QITEM結(jié)構(gòu)110允許包含它的結(jié)構(gòu)鏈接到一個(gè)雙鏈接列表。QUEUE結(jié)構(gòu)120含有指針,指向給定列的QITEM結(jié)構(gòu)的首尾兩端;并含有該列里項(xiàng)目的計(jì)數(shù)。
SLICONF結(jié)構(gòu)130含有參數(shù),當(dāng)它在特定界面INTF150運(yùn)行時(shí),可被設(shè)定為特定的服務(wù)類SCLASS140的操作。例如,SLICONF結(jié)構(gòu)含有參數(shù)過度預(yù)定,把入流可能過度預(yù)定的實(shí)際帶寬與超出容量的保留速率顯示在界面上。
DRRITEM結(jié)構(gòu)160含有對(duì)流(或服務(wù)類)進(jìn)行規(guī)劃所需的參數(shù),規(guī)范的算法使用差額循環(huán)(DRR)算法。通過分配給各項(xiàng)目一個(gè)起始定額來執(zhí)行DRR算法,指配給流的帶寬與分配給它們的定額成正比。各流的定額皆固定不變,而且是在創(chuàng)建流時(shí)就確定了的。
流的定額存儲(chǔ)在DRRITEM的“U32 quantum”域162里。允許流在任何給定的時(shí)間里輸送一定量的字節(jié),這些字節(jié)存儲(chǔ)在流的DRRITEM的差額計(jì)數(shù)里。在DRR隊(duì)列的各DRR循環(huán)起始處,隊(duì)列里的各DRRITEM皆以自己定額的量來遞增自己的差額計(jì)數(shù)。在處理各DRRITEM(使用后續(xù)驟增算法,后面將結(jié)合圖6~10來說明)時(shí),其差額要與即將被流的下一個(gè)數(shù)據(jù)包所運(yùn)送的字節(jié)數(shù)進(jìn)行比較。若差額計(jì)數(shù)里的字節(jié)數(shù)不足,則把該流移至其DRR隊(duì)列末端,等待下一輪DRR循環(huán),介時(shí)將遞增其差額;反之,若差額里有足夠的字節(jié),則運(yùn)送數(shù)據(jù)包,再用所運(yùn)送的字節(jié)數(shù)去減差額計(jì)數(shù)值。長遠(yuǎn)地看,DRR算法在DRR隊(duì)列里各流的定額分配的基礎(chǔ)上,平等地向他們提供帶寬。這比單獨(dú)傳輸隊(duì)列通常的“先為先來者服務(wù)”(FCFS)的服務(wù)原則要平等得多,因?yàn)槲阈杵仁购休^少和較小數(shù)據(jù)包的流一定要排在含有較大和較多數(shù)據(jù)包的流后面了。
服務(wù)級(jí)別界面(SLI)結(jié)構(gòu)170控制整個(gè)規(guī)劃,并含有操作于單獨(dú)界面(INTF)上的單獨(dú)服務(wù)類(SCLASS)的操作統(tǒng)計(jì)。本發(fā)明的規(guī)劃方法根據(jù)各SLI的設(shè)定加權(quán),把界面提供的邏輯帶寬段分配給各SLI。在分得的帶寬內(nèi),本實(shí)施例把等權(quán)的帶寬段提供給該服務(wù)類里的全部處于活動(dòng)狀態(tài)的流。
SLI是根據(jù)服務(wù)類(SCLASS140)的優(yōu)先級(jí)域來進(jìn)行排列的。INTF結(jié)構(gòu)150的p_classes域充當(dāng)SLI結(jié)構(gòu)170的鏈接列表的首部,并鏈接了SLI里名為“PRIORITY”的QITEM結(jié)構(gòu)110。
本發(fā)明使用了三個(gè)單獨(dú)的DRR隊(duì)列
優(yōu)先級(jí)流的DRR隊(duì)列流結(jié)構(gòu)100含有名為pq的DRRITEM160,其鏈接了一個(gè)服務(wù)類里的全部流(因而也是一個(gè)優(yōu)先級(jí)上的全部流)。該隊(duì)列的首尾即SLI結(jié)構(gòu)170里的QUEUE結(jié)構(gòu)120,名為flowList。
最高效流的DRR隊(duì)列流結(jié)構(gòu)100含有名為bq的DRRITEM160,其鏈接了一個(gè)界面上全部處于活動(dòng)狀態(tài)的流。界面結(jié)構(gòu)INTF150里所含的QUEUE結(jié)構(gòu)120提供了該流的鏈接列表的首尾。
類DRR隊(duì)列在界面上處于活動(dòng)狀態(tài)的SLI結(jié)構(gòu)170充當(dāng)SLI自身DRR隊(duì)列的一部份。規(guī)劃該類級(jí)別的DRRITEM160存儲(chǔ)在SLI170的cq對(duì)象里。
TOKBKT結(jié)構(gòu)180說明了業(yè)務(wù)速率令牌戽,該令牌戽確定了何時(shí)允許流使用各自的服務(wù)類帶寬;還說明了最高速率令牌戽,該令牌戽在流數(shù)據(jù)包快于流的最大允許運(yùn)送速率時(shí),讓這些數(shù)據(jù)包留在它們的流隊(duì)列上等待運(yùn)送。
圖3示出了圖2里結(jié)構(gòu)的實(shí)例,圖里只示出了各結(jié)構(gòu)的有關(guān)域。對(duì)于數(shù)據(jù)通信系統(tǒng)的特定傳輸界面,單獨(dú)的INTF結(jié)構(gòu)含有QUEUE結(jié)構(gòu),該結(jié)構(gòu)充當(dāng)了按優(yōu)先級(jí)降序排列的SLI鏈接列表的首部。在該實(shí)例里有兩個(gè)服務(wù)類“gold”,即SCLASS=“gold”結(jié)構(gòu)200;和“缺省”服務(wù)類結(jié)構(gòu)260的“default”,即SCLASS=“default”結(jié)構(gòu)210。缺省服務(wù)類總是有其SLI。
1.在“gold”SCLASS里有兩個(gè)處于活動(dòng)狀態(tài)的流,其中之一即1號(hào)流220。像所有處于活動(dòng)狀態(tài)的流一樣,它也擁有名為PacketQ222的QUEUE結(jié)構(gòu),該結(jié)構(gòu)充當(dāng)了數(shù)據(jù)包224,226的鏈接列表,并在流上發(fā)出該鏈接列表。本發(fā)明的規(guī)劃方法總是依次發(fā)出同一流里的各數(shù)據(jù)包。在圖3里,雖然只示出了1號(hào)流,其中數(shù)據(jù)包就在該流的PacketQ上;但是,在本實(shí)例里,處于活動(dòng)狀態(tài)的數(shù)據(jù)包皆擁有這樣的數(shù)據(jù)包。為了節(jié)省篇幅,未示出別的流里的PacketQ和數(shù)據(jù)包。
1號(hào)流220可處于兩個(gè)DRR隊(duì)列上。一是優(yōu)先級(jí)流的隊(duì)列,其首部是名為flowList的QUEUE結(jié)構(gòu),處于界面上“gold”類的SLI230里。1號(hào)流里名為pq的DRRITEM結(jié)構(gòu)含有鏈接,可鏈接到SLI的flowList上的別的流,即2號(hào)流235。1號(hào)流還可處于最高效流的DRR隊(duì)列上,其首部是名為beq的QUEUE結(jié)構(gòu),處于INTF界面結(jié)構(gòu)240里。最高效流的DRR隊(duì)列上的全部流皆經(jīng)流結(jié)構(gòu)里名為“bq”的DRRITEM而鏈接。注意圖3里的各流(220,235,245,250)皆處于首部為INTF.beq(240)的鏈接列表里,并經(jīng)各流的bqDRRITEM結(jié)構(gòu)而鏈接。
2.2號(hào)流235是“gold”服務(wù)類里的另一個(gè)流,和1號(hào)流一樣也處于活動(dòng)狀態(tài)。當(dāng)“活動(dòng)”一詞用來指流或SLI裝置時(shí),表示里面有需要傳輸?shù)牧鳌?br>
3.3號(hào)流245是最高效的流,它包括待發(fā)的數(shù)據(jù)包的PacketQ,不過圖里未示出;以及向后指向SLI的sli指針,用來操作缺省服務(wù)類(未示出)。3號(hào)流未使用其pqDRRITEM;3號(hào)流是唯一使用了pqDRRITEM的最高效的流。
4.4號(hào)流250類似于3號(hào)流245,也是最高效的流。它只在缺省服務(wù)類里規(guī)劃帶寬。
各流皆有一個(gè)名為S的指針255,該指針指向服務(wù)類(SCLASS)結(jié)構(gòu),各流皆在此被歸類。全部的流皆處于一個(gè)類里,缺省類里則含有未歸入任何別的類里的流。
缺省服務(wù)類210所屬的流(3號(hào)流245和4號(hào)流250)并未經(jīng)其pqDRRITEM鏈接,相反,當(dāng)NextBurst子程序給缺省類SLI提供帶寬時(shí),其中的流是從INTF結(jié)構(gòu)240的beq列表處獲得的,而非缺省類SLI260的flowList QUEUE。
各流還含有向后指向SLI結(jié)構(gòu)的sli指針,該指針控制了界面上各流的運(yùn)算。在圖3里為了清楚起見,只示出了2號(hào)流的向后指針sli。
圖4和圖5示出了根據(jù)本發(fā)明的方法來處理新抵達(dá)的數(shù)據(jù)包的運(yùn)算流程。圖4里的步驟是以C語言來表示的,并使用了圖2里說明的數(shù)據(jù)域;不過,本發(fā)明并不局限于這種編程語言。
參考圖4,當(dāng)數(shù)據(jù)通信系統(tǒng)根據(jù)界面的規(guī)劃系統(tǒng)來處理抵達(dá)的數(shù)據(jù)包時(shí),在步驟300處調(diào)用了PktArrival( )子程序。
Pkt是待發(fā)的數(shù)據(jù)包,里面包括該數(shù)據(jù)包的指針及其長度。
F是指向FLOW結(jié)構(gòu)的指針,該結(jié)構(gòu)里已歸入了數(shù)據(jù)包。
I是指向INTF結(jié)構(gòu)的指針,數(shù)據(jù)包經(jīng)過此處后被發(fā)出。
在步驟305處,本方法檢查在流F上列隊(duì)的數(shù)據(jù)包是否多于流F的服務(wù)類所允許的最大緩沖區(qū)數(shù)量。若的確如此,則在步驟310處遞增統(tǒng)計(jì)數(shù)值,并在步驟315處遺棄該數(shù)據(jù)包。
反之,則在步驟320處,把新抵達(dá)的數(shù)據(jù)包列入流F的PacketQ隊(duì)列上。在本方法里,用q_enq( )函數(shù)的第二個(gè)自變量做為QITEM的指針。在步驟320的情形里,Pkt用QITEM做為自己的第一個(gè)元素。
在步驟325處檢查流F的布爾值bActive。若已把該流標(biāo)記為“活動(dòng)”,則在數(shù)據(jù)包抵達(dá)時(shí)毋需進(jìn)一步運(yùn)算,于是流程跳至步驟380(在圖5里)。反之,則需在步驟330處激活該流,并把該流插入類似于圖3所示的數(shù)據(jù)結(jié)構(gòu)里。
下面參考圖5,在步驟335處檢查流是否屬于缺省服務(wù)類。若不屬于,則向前執(zhí)行步驟340,把該流列入其(非缺省的、優(yōu)先級(jí)的)SLI的flowList QUEUE。使用流的pq DRRITEM里的QITEM把同一SLI的流鏈接在一起。在步驟345處還把優(yōu)先級(jí)的SLI標(biāo)記為“活動(dòng)”,并遞增處于活動(dòng)狀態(tài)的流的計(jì)數(shù)(即SLI結(jié)構(gòu)170里的“nflow”域)。
在步驟345之后的步驟350,355和360處,檢查新激活的流是否對(duì)服務(wù)類的過度預(yù)定條件進(jìn)行了初始化。各流皆與一個(gè)正常保留速率(nrr)關(guān)聯(lián),該nrr的單位是比特/秒,它也就是各流的保留帶寬。本方法可讓操作者設(shè)定并允許過度預(yù)定的流(即允許進(jìn)入的流的總保留速率超出了分配給服務(wù)類的容量)進(jìn)入。容量是以百分比分配給各服務(wù)類的。分配給各服務(wù)類的比特/秒存儲(chǔ)在SLI的“正常最大分配速率”域、即“nmar”里。在任何給定的時(shí)間里,處于活動(dòng)狀態(tài)的流的保留速率總和存儲(chǔ)在SLI的“sumresv”域里(步驟350)。當(dāng)該速率總和超出該類的分配速率(nmar)時(shí)(步驟355),即在步驟360處把SLI標(biāo)記為“過度預(yù)定”狀態(tài)。在步驟365處繼續(xù)運(yùn)算。
無論新激活的流是否被置于pq DRR隊(duì)列,都需執(zhí)行步驟365,各流在此步驟處被列入最高效的流的隊(duì)列,該隊(duì)列的首部是QUEUE結(jié)構(gòu)的INTF I的beq。使用該流bq DRRITEM里的QITEM來把該流鏈接到最高效的流的列表。
在步驟370處,各流在目前的DRR循環(huán)里確定了自己怕位置,并設(shè)定流的差額等于該流分得的定額。在本實(shí)施例里,認(rèn)為pq(優(yōu)先級(jí)的隊(duì)列)和bq(最高效的隊(duì)列)里的全部流皆擁有相同的定額。例如,合理的定額可以是512字節(jié)。該定額的選取必須小于以太網(wǎng)最大數(shù)據(jù)包的大小(1500字節(jié)),但又不要小得太多,這樣,在按數(shù)據(jù)包的大小來遞增差額時(shí),不會(huì)占用DRR循環(huán)過多的輪次。注意在優(yōu)先級(jí)SLI里的流處于兩個(gè)不同的DRR隊(duì)列里,即他們各自所屬類的優(yōu)先級(jí)隊(duì)列(經(jīng)pq鏈接)和最高效的DRR隊(duì)列(經(jīng)bq鏈接)。對(duì)兩個(gè)DR隊(duì)列的差額皆進(jìn)行初始化。
在步驟375處,缺省SLI被標(biāo)記為“活動(dòng)”,因?yàn)樵谧罡咝У牧鞯牧斜砝锛尤肓艘粋€(gè)流;并遞增缺省SLI里處于活動(dòng)狀態(tài)的流的計(jì)數(shù)。
在步驟380處,檢查該流是否處于過度預(yù)定的狀態(tài)。若某個(gè)流已處于活動(dòng)狀態(tài),同時(shí)服務(wù)類里還有別的流也處于活動(dòng)狀態(tài),并且這些流的總保留速率超出了分配給該服務(wù)類的鏈路帶寬,則稱該流處于過度預(yù)定的狀態(tài)。本發(fā)明保持了該流過度預(yù)定的狀態(tài),并在過度預(yù)定的狀態(tài)下計(jì)算抵達(dá)的數(shù)據(jù)包,這一點(diǎn)是獨(dú)一無二的。
當(dāng)某個(gè)數(shù)據(jù)包抵達(dá)時(shí),若服務(wù)類正處于過度預(yù)定的狀態(tài),則在步驟390處,該抵達(dá)的數(shù)據(jù)包使“過度預(yù)定數(shù)據(jù)包的抵達(dá)”的計(jì)數(shù)遞增。
步驟395處中止了對(duì)抵達(dá)數(shù)據(jù)包的處理。
于是,數(shù)據(jù)包所歸入的流就被插入如圖3所示的數(shù)據(jù)結(jié)構(gòu)里了。
圖6,7,8,9和10皆示出了對(duì)接下來待發(fā)的需求驟增的數(shù)據(jù)包的規(guī)劃方法。當(dāng)數(shù)據(jù)通信的傳輸系統(tǒng)運(yùn)送完了一個(gè)或多個(gè)數(shù)據(jù)包、并選取下一個(gè)或下一組數(shù)據(jù)包時(shí),需調(diào)用NextBurst運(yùn)算。該算法的表達(dá)方式使得NextBurst的調(diào)用者可指定要傳輸?shù)淖止?jié)數(shù)最大值(maxBurst)或要傳輸?shù)臄?shù)據(jù)包數(shù)量最大值(maxPkts)。這兩個(gè)參數(shù)、以及指向下一個(gè)待發(fā)的數(shù)據(jù)所處的INTF界面結(jié)構(gòu)的指針,一同構(gòu)成了NextBurst運(yùn)算400的參數(shù)。
NextBurst運(yùn)算有一些本地參數(shù)active_classes是處于活動(dòng)狀態(tài)的SLI的數(shù)量。
overlimit_classes是“過限”的SLI的數(shù)量。過限的SLI里的全部流皆“過限”;而過限的流則是超出其業(yè)務(wù)令牌戽的流。業(yè)務(wù)令牌戽測量某個(gè)流是否超出了其最小保留速率。
nover是在特定服務(wù)類里超限的流的數(shù)量。
bReturn是一個(gè)控制標(biāo)志,當(dāng)本方法確定NextBurst運(yùn)算需返回時(shí),其值為“真”(即設(shè)為1)。
P是指針,指向目前分得了帶寬的SLI結(jié)構(gòu)。
F是指針,指向目前分得了帶寬的流(帶有P)。
Pkt是指針,指向目前正受到檢查的數(shù)據(jù)包F。
在步驟405處,本方法對(duì)本地變量進(jìn)行初始化,并掃描各SLI(經(jīng)INTF里的p_classes QUEUE),以及把類的bOverlimit位設(shè)為0(即“假”)。
在步驟410處開始了“優(yōu)先級(jí)DRR隊(duì)列”的下一輪DRR循環(huán)。該步驟把本地SLI指針P設(shè)為INTF的p_classes隊(duì)列的首部。注意“q_head(QUEUE)”運(yùn)算使指針返回隊(duì)列首部,但并未使其離開隊(duì)列。
在步驟415處,檢查在目前的優(yōu)先級(jí)類DRR循環(huán)里,是否全部的類皆分得了帶寬。若的確如此,則P指針為0,并在步驟420處開始下一輪類的DRR循環(huán)。在該步驟處,界面上的各類皆要執(zhí)行步驟425(即經(jīng)INTF結(jié)構(gòu)里p_classes QUEUE鏈接的全部SLI),并給變量bExhausted賦值1,表示各類用盡了其類的DRR差額。在步驟430處,依相應(yīng)的定額來遞增其差額,并清除bExhausted標(biāo)志使SLI準(zhǔn)備下一輪類的DRR循環(huán)。
在方才完成的一輪循環(huán)里,“超限”的類累加在本地計(jì)數(shù)器“overlimit_classes”里。這些類需等待以后被NextBurst調(diào)用,方可使其中的流有資格運(yùn)送數(shù)據(jù)包。在步驟435處,把該overlimit_classes計(jì)數(shù)與處于活動(dòng)狀態(tài)的類的數(shù)量進(jìn)行比較,若全部類皆過限,則NextBurst將不再運(yùn)送任何數(shù)據(jù)包,并在步驟445處返回sent=0。
在步驟440處,若上一輪類的DRR循環(huán)清空了全部列隊(duì)等候的數(shù)據(jù)包、從而不再有任何類處于活動(dòng)狀態(tài)了,則NextBurst也要在步驟445處返回。反之,若仍有類處于活動(dòng)狀態(tài),則跳回步驟410處,開始新一輪類的DRR循環(huán)。
回到步驟415處,若目前這輪類的DRR循環(huán)尚未完成,則在步驟450處繼續(xù)處理。在步驟450處,目前的SLI未被標(biāo)記為“活動(dòng)”,則表示沒有流處于活動(dòng)狀態(tài),于是可跳過該步驟。在此情形里,本方法轉(zhuǎn)到步驟455處,在界面上的p_classes隊(duì)列上取得優(yōu)先級(jí)更低的SLI,再跳回步驟415。
若目前的SLI(以P來尋址)處于活動(dòng)狀態(tài),則本方法跳回步驟450處,并在此把a(bǔ)ctive_classes的值加1。
在下面的步驟460處,檢查SLI是否在目前的優(yōu)先級(jí)DRR循環(huán)里用盡了其差額。使用p->bExhausted標(biāo)記就是這個(gè)目的。若是用盡了,則在目前的優(yōu)先級(jí)DRR循環(huán)里,該SLI不能再分得帶寬了,并需在步驟455處檢查下一個(gè)SLI。
反之,則本方法繼續(xù)執(zhí)行步驟470,在此檢查目前SLI的bOverlimit標(biāo)記。當(dāng)SLI的全部流也過限時(shí),即設(shè)定該標(biāo)記。在此情形里,不向優(yōu)先級(jí)SLI提供帶寬了,并經(jīng)步驟455檢查下一個(gè)SLI。
反之,則本方法繼續(xù)執(zhí)行步驟475,480和485,在此依目前的類是否“缺省”的類而設(shè)定本地變量“FlowQP”。若目前CLI(P)是缺省類,則把帶寬提供給流的相關(guān)隊(duì)列,即流的I->beq“最高效”的隊(duì)列。若目前的CLI(P)是優(yōu)先級(jí)隊(duì)列,則只有CLI的flowList隊(duì)列所鏈接的流才是有資格的流。設(shè)定FlowQP指向相應(yīng)的QUEUE結(jié)構(gòu)。
在以上任何一種情形里,本方法皆需繼續(xù)執(zhí)行步驟490,在此把目前的類(nover)里過限的流的數(shù)量初始化為零。
步驟495標(biāo)出了普通處理點(diǎn),藉以向目前服務(wù)類的“Next Flow”提供帶寬。標(biāo)有“Next Flow”的無頁連接器對(duì)象505做為圖6里的參考。在步驟495處,本地指針F被設(shè)定在FlowQP隊(duì)列的首部(但該流的隊(duì)列并未解散)。
接下來,本方法在步驟500處檢查目前的SLI里全部流是否皆清空了各自的數(shù)據(jù)包,即F是否為空。若F不為空,則本方法繼續(xù)執(zhí)行圖7里的步驟525。
若在步驟500處,給定服務(wù)類里的全部流被確定皆已用盡(即F=0),則在步驟510處把該服務(wù)類標(biāo)記為“不活動(dòng)”,并遞減處于活動(dòng)狀態(tài)的服務(wù)類的數(shù)量。在步驟515處,本方法檢查bReturn標(biāo)志是否為1,該標(biāo)志是在步驟795處設(shè)定的,介時(shí)已調(diào)用目前的NextBurst方法來發(fā)出希望數(shù)量的數(shù)據(jù)包。若該標(biāo)志為1,則NextBurst方法在步驟520處中止;反之,則繼續(xù)執(zhí)行步驟455,處理下一個(gè)服務(wù)類。
在步驟525處,本方法檢查目前服務(wù)類里的全部流是否皆過限。若的確如此,則本方法跳至步驟530,在此把該類自身標(biāo)記為過限,并檢測過限的類的數(shù)量,從而跳回步驟455調(diào)用NextBurst方法,以檢查下一個(gè)服務(wù)類。
若該類自身未超限,則本方法從步驟525轉(zhuǎn)到步驟535。于是開始了目前流的下一個(gè)數(shù)據(jù)包的“Next Packet”處理過程。本地指針Pkt被設(shè)在目前流的數(shù)據(jù)包隊(duì)列(PacketQ)的首部,但數(shù)據(jù)包自身尚未離開隊(duì)列。
在下一步545里將檢查Pkt指針。若該指針為空,則表明目前流里的全部數(shù)據(jù)包皆已發(fā)出,于是本方法跳至步驟585。在此情形下,當(dāng)流變?yōu)椴换顒?dòng)時(shí),步驟585更新圖2里的統(tǒng)計(jì)數(shù)字?jǐn)?shù)據(jù)結(jié)構(gòu);從優(yōu)先級(jí)DRR隊(duì)列(即SLI的flowList QUEUE)和最高效的DRR隊(duì)列(來自INTF的“beq”QUEUE)里去掉該流。步驟585還要遞減類里全部處于活動(dòng)狀態(tài)的流的總保留速率,即“p->sumresv”計(jì)數(shù)。在步驟590處,若p->sumresv值降至“正常最大分配速率”(p->nmar)以下,則不再認(rèn)為該類處于過度預(yù)定狀態(tài)了。若出現(xiàn)這種情形,則在步驟595處清除p->Overbooked標(biāo)志。不管何種情形,在步驟590處檢查之后,本方法在步驟495處繼續(xù)對(duì)目前SLI里的下一個(gè)流進(jìn)行處理。
返回步驟545,目前的Pkt指針不為空,則本方法跳至步驟550。在這一步里,檢查bReturn標(biāo)志,若在步驟765處設(shè)定了該標(biāo)志,則本方法返回步驟560。反之,若尚未設(shè)定bReturn標(biāo)志,繼續(xù)執(zhí)行步驟555。
步驟555檢查數(shù)據(jù)包的發(fā)出是否會(huì)導(dǎo)致NextBurst子程序超出調(diào)用NextBurst子程序所允許的最大字節(jié)數(shù)。目前運(yùn)行的總發(fā)出字節(jié)數(shù)保存在本地變量“sent”里。在此情形里,NextBurst在步驟560處返回,而不發(fā)出目前的數(shù)據(jù)包。
若步驟555未檢查到超出一次調(diào)用的最大需求,則本方法繼續(xù)執(zhí)行步驟565,在此檢查優(yōu)先級(jí)DRR隊(duì)列的“差額”。若數(shù)據(jù)包長度大于優(yōu)先級(jí)“類”的DRR項(xiàng)目的差額,則目前的類用盡了該優(yōu)先級(jí)DRR循環(huán)里的允許傳輸。在此情形里,服務(wù)類的標(biāo)志bExhausted被設(shè)為1(真),然后本方法在步驟455處繼續(xù)處理下一個(gè)服務(wù)類。
若在步驟565處,服務(wù)類的DRR差額未被用盡,則本方法繼續(xù)執(zhí)行步驟575,在此更新該流的最大令牌戽。更新令牌戽的子程序(tokbkt_update( ))以上次更新后中央處理器的時(shí)間為基礎(chǔ),向令牌戽里加入正確數(shù)量的令牌戽。令牌戽里的各“令牌”皆可傳輸一個(gè)字節(jié)。
在步驟580處,本方法把數(shù)據(jù)包長度與方才更新的最高速率令牌戽里的令牌數(shù)進(jìn)行比較(F->maxBkt)。若令牌數(shù)不足,則本方法跳至步驟600,在此遞增“overMaximu”數(shù)據(jù)包規(guī)劃數(shù),并遞增目前服務(wù)類(本地變量“nover”)里的“超限”的流的數(shù)量。在步驟605處,調(diào)用“MoveFLowToEnd( )”操作把超限的流移至目前流的隊(duì)列的末尾,直到以后調(diào)用了NextBurst才允許該流發(fā)出數(shù)據(jù)包,此時(shí),可能已經(jīng)有足夠的時(shí)間來向最高速率令牌戽里增加更多的令牌了。本方法從步驟605跳至步驟495以處理目前的類里的下一個(gè)流。
若在步驟580處,本方法通過了最高速率令牌戽的限制,則繼續(xù)執(zhí)行步驟610,該步驟與圖8和圖9里NextBurst子程序的后續(xù)部份相連接。
步驟620開始執(zhí)行圖7里NextBurst子程序的后續(xù)部份。
步驟625檢查目前分得帶寬的類是否為缺省的類,若不是,則步驟630更新該流的保留速率“業(yè)務(wù)”速率令牌戽(F->trafBkt)并在步驟635處檢查該流目前是否“低于”其保留速率。若不低于之,則本方法在步驟640處把數(shù)據(jù)包標(biāo)記為超出其業(yè)務(wù)速率,并在步驟645處調(diào)用如步驟700~720處所述的MoveFlowToEnd( )子程序,從而把該流移至其優(yōu)先級(jí)DRR列表的末端。不允許流超出其帶寬的最大令牌戽以外而發(fā)出數(shù)據(jù)包,該帶寬是分配給它所屬的優(yōu)先級(jí)服務(wù)類的;而是只在給缺省服務(wù)類分配了帶寬之后,方可發(fā)出數(shù)據(jù)包。在把該流移至CLI的flowList末尾之后,從步驟650跳至步驟495以處理目前類里下一個(gè)流。
步驟635判斷流是否超出了其保留業(yè)務(wù)速率的限制,再跳至步驟655,在此檢查該流的目前數(shù)據(jù)包是否超出了各流的DRR循環(huán)差額,即F->pq.deficit。若是超出,則程序跳至步驟660,因?yàn)樵摿餍璧却乱惠喐髁鞯腄RR循環(huán)。在步驟660處,該流的“pq”DRR項(xiàng)目差額按其定額增加。在步驟665處調(diào)用MoveFlowToEnd子程序,從而把該流從目前類的flowList的前部移至后部,再在步驟495處繼續(xù)處理下一個(gè)流。
若在步驟625處,目前分得帶寬的類確實(shí)是缺省的類,則本方法繼續(xù)執(zhí)行步驟675,步驟675~690類似于非缺省類所使用的方法。步驟675把流的長度與最高效的DRR列表上的流的差額(F->bq.deficit)進(jìn)行比較。若流的長度小于流的差額,則本方法繼續(xù)執(zhí)行步驟725;反之,若流的長度超出了最高效的DRR差額,則本方法繼續(xù)執(zhí)行步驟680。在步驟680處,流的最高效的DRR差額按流的最高效的DRR定額(F->bq.quantum)來增加。在步驟685處調(diào)用如步驟700~720處所述的MoveFlowToEnd子程序,從而把該流移至類里流的列表的末端。完成步驟685后,本方法跳至步驟690,從而經(jīng)“Next Flow”標(biāo)簽返回步驟495去處理下一個(gè)流。
上述步驟605、645、665和685所調(diào)用的MoveFlowToEnd子程序始于步驟700。MoveFlowToEnd子程序是為特定的DRR隊(duì)列FlowPQ和特定的流F而調(diào)用的。記住一個(gè)流可能屬于兩種不同的DRR隊(duì)列,因而擁有兩種不同的DRRITEMS(160)F->pq和F->bq。MoveFlowToEnd子程序無非是適當(dāng)選取將要修改的DRRITEM。在步驟705處,檢查DRR隊(duì)列的指針FlowPQ,看它是否為最高效的隊(duì)列。若是,則本方法跳至步驟715,在此先從最高效的DRR隊(duì)列的起始處取出該流(q-remove(FlowPQ,&P->bq)),再把它排在該DRR隊(duì)列的末尾(q_enq(FlowPQ,&P->bq))。隨后,MoveFlowToEnd中止于步驟720。若步驟705確定被修改的隊(duì)列是優(yōu)先級(jí)DRR隊(duì)列,而非最高效的DRR隊(duì)列,則本方法跳至步驟710,在此先從優(yōu)先級(jí)DRR隊(duì)列的起始處取出該流,再把它排在末尾。
參考圖10所示的NextBurst子程序,若在步驟655或675處確定流缺乏在目前流的DRR循環(huán)里發(fā)出數(shù)據(jù)包的足夠差額,則跳至步驟725(在圖9里),在步驟725處,數(shù)據(jù)包實(shí)際上是被從流的數(shù)據(jù)包隊(duì)列里取出了。
步驟730調(diào)用“send( )”操作以把實(shí)際數(shù)據(jù)包發(fā)至傳輸鏈路上。經(jīng)“send( )”操作發(fā)出的字節(jié)數(shù)累加在本地變量“sent”里。
步驟735、740、745和750從相應(yīng)DRRITEM的“差額”計(jì)數(shù)里遞減方才發(fā)出的數(shù)據(jù)包長度,從而更新相應(yīng)的流的DRR隊(duì)列。對(duì)于缺省的類來說,這一步是F->bq(步驟740);對(duì)于非缺省的類來說,則是F->pq。不管是哪一種情形,皆需繼續(xù)執(zhí)行步驟750,在此從類級(jí)別DRR隊(duì)列的DRR差額(p->cq)里減去數(shù)據(jù)包長度。
在步驟755處更新一些統(tǒng)計(jì)值。對(duì)于各傳輸字節(jié),從流的業(yè)務(wù)速率和最高速率令牌戽里移去一個(gè)令牌。對(duì)于各流和各類的統(tǒng)計(jì)值,遞增目前統(tǒng)計(jì)值采集間隔里的數(shù)據(jù)包和字節(jié)數(shù)。
步驟760遞增該NextBurst(sentPkts)調(diào)用所發(fā)出的數(shù)據(jù)包數(shù)。若該計(jì)數(shù)低于請(qǐng)求發(fā)出的數(shù)據(jù)包的最大數(shù)量(參數(shù)maxPackets),則繼續(xù)處理目前流里的下一個(gè)數(shù)據(jù)包,并經(jīng)“NextPacket”指示轉(zhuǎn)至步驟535。若已達(dá)maxPackets計(jì)數(shù),則在步驟765處把控制標(biāo)志“bReturn”設(shè)為“真”,接著本方法返回步驟540,以處理下一個(gè)數(shù)據(jù)包。若方才發(fā)出的數(shù)據(jù)包是處于活動(dòng)狀態(tài)的服務(wù)類里的最后一個(gè)數(shù)據(jù)包,則本方法在正確更新了圖2里的數(shù)據(jù)結(jié)構(gòu)后,檢查在步驟765處所設(shè)定的“bReturn”標(biāo)志。
應(yīng)當(dāng)明白,上述實(shí)施例無非是用來說明本發(fā)明的原理的。熟悉本領(lǐng)域的技術(shù)人員可進(jìn)行各種別的修改和變化,這些修改和變化也體現(xiàn)了本發(fā)明的原理,并被涵蓋在本發(fā)明的精神和范圍內(nèi)。
權(quán)利要求
1.一種方法,用來在數(shù)據(jù)傳輸鏈路上對(duì)數(shù)據(jù)包的傳輸量進(jìn)行規(guī)劃,包括以下步驟a)接收數(shù)據(jù)流的一組數(shù)據(jù)包;b)把所述流設(shè)定至某一服務(wù)類里;c)給所述服務(wù)類的傳輸帶寬設(shè)定一個(gè)選取的限制;d)運(yùn)送滿足所述選取的限制的所述流里的數(shù)據(jù)包;e)識(shí)別出占用缺省類帶寬的缺省類;f)運(yùn)送數(shù)據(jù)包時(shí),既使用服務(wù)類分得的帶寬,也使用缺省類分得的帶寬。
2.一種方法,用來在一組優(yōu)先級(jí)數(shù)據(jù)包隊(duì)列里選取下一個(gè)要在網(wǎng)絡(luò)里傳輸?shù)臄?shù)據(jù)包,包括以下步驟a)把共享的帶寬按指配定額分配給一組優(yōu)先級(jí)數(shù)據(jù)包隊(duì)列里的各隊(duì)列;b)把代表所述隊(duì)列允許運(yùn)送的數(shù)據(jù)量的差額分配給一組優(yōu)先級(jí)數(shù)據(jù)包隊(duì)列里的各隊(duì)列;c)從隊(duì)列里選取下一個(gè)待發(fā)數(shù)據(jù)包,該隊(duì)列擁有較高優(yōu)先級(jí)以及超出所述下一個(gè)數(shù)據(jù)包大小的差額值;d)從步驟c)所選取的隊(duì)列的差額里減去所述選取的下一個(gè)數(shù)據(jù)包的大??;e)若所述一組優(yōu)先級(jí)數(shù)據(jù)包隊(duì)列里的全部積壓隊(duì)列皆無足夠差額以運(yùn)送下一個(gè)數(shù)據(jù)包了,則把定額值加入所述積壓隊(duì)列里的差額里去,于是開始了新一輪的在一組優(yōu)先級(jí)數(shù)據(jù)包隊(duì)列里的選取。
3.如權(quán)利要求2的方法,進(jìn)一步包括以下步驟f)若全部隊(duì)列皆被清空了,則把差額值加入所述各已被清空的隊(duì)列的定額值里去,于是開始了新一輪的在一組優(yōu)先級(jí)數(shù)據(jù)包隊(duì)列里的選取。
全文摘要
HPRR使用令牌戽速率分類標(biāo)記,從而把各數(shù)據(jù)包標(biāo)記為“滿足”或“不滿足”該流的業(yè)務(wù)規(guī)范。各業(yè)務(wù)流皆被看成屬于單一的服務(wù)類,其中一個(gè)這樣的類是一種特殊的服務(wù)類,即缺省的“最高效”的服務(wù)類。HPRR方法允許按以下兩種方式之一來運(yùn)送業(yè)務(wù)流里的數(shù)據(jù)包:要么占用分配給該流所屬類的帶寬,要么占用最高效的帶寬。由于為各流皆提供兩條數(shù)據(jù)包傳送路徑,故各流總能平等地分享兩種不同的類的份額:該流主要的即所屬的類,和最高效的類。
文檔編號(hào)H04L12/54GK1376345SQ00813310
公開日2002年10月23日 申請(qǐng)日期2000年9月25日 優(yōu)先權(quán)日1999年9月25日
發(fā)明者邁克爾·帕特里克 申請(qǐng)人:摩托羅拉公司