本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度方法及調(diào)度系統(tǒng)。
背景技術(shù):
隨著IP業(yè)務(wù)的發(fā)展,尤其是音頻、視頻等多媒體業(yè)務(wù)的迅速增長(zhǎng);傳統(tǒng)的IP網(wǎng)絡(luò)不僅要提供傳統(tǒng)類型的數(shù)據(jù)業(yè)務(wù),還要對(duì)帶寬、延遲要求較高的新業(yè)務(wù)提供支持,即,要求傳統(tǒng)的IP網(wǎng)絡(luò)對(duì)不同的業(yè)務(wù)實(shí)現(xiàn)區(qū)分,同時(shí)還要提供一定的QoS保證。所述QoS的英文全拼為:Quality of Service,譯為服務(wù)質(zhì)量。
在IETF定義的QoS模型中的DiffServ模型一般通過(guò)邊緣節(jié)點(diǎn)實(shí)現(xiàn)大部分復(fù)雜的 QoS功能,例如:分類、流量調(diào)節(jié)、標(biāo)記等,中間節(jié)點(diǎn)則根據(jù)差分服務(wù)編碼對(duì)流量進(jìn)行不同的PHB。所述DiffServ的英文全拼為:Differentiated Services,譯為差分服務(wù);所述PHB的英文全拼為:Per Hop Behavior譯為逐跳行為。
調(diào)度,其屬于PHB的其中一種行為,目前在報(bào)文交換領(lǐng)域中,主要的調(diào)度算法有RR、DRR、MDRR等。所述RR的英文全拼為:Round Robin,譯為逐跳行為;所述DRR的英文全拼為:Deficit Round Robin,譯為補(bǔ)償型循環(huán)輪詢;所述MDRR的英文全拼為:Modi?ed De?cit Round Robin,譯為修改的補(bǔ)償型循環(huán)輪詢。
上述幾種算法均已成為本領(lǐng)域中較為成熟的算法,其中DRR算法如圖1所示,其為一種現(xiàn)有技術(shù),目前已獲得普遍的應(yīng)用,在此不做詳細(xì)贅述。
相應(yīng)的,在DRR算法的基礎(chǔ)上實(shí)現(xiàn)MDRR算法,是本領(lǐng)域目前最為成熟的輪詢算法。
所述MDRR算法實(shí)現(xiàn)過(guò)程中,在 DRR 的基礎(chǔ)上,對(duì)每一個(gè)調(diào)度對(duì)象進(jìn)行輪詢調(diào)度,每次調(diào)度一個(gè)數(shù)據(jù)報(bào)文后,判斷虧欠計(jì)數(shù)器是否產(chǎn)生虧欠(為負(fù)數(shù))。若不虧欠,將調(diào)度對(duì)象放到輪詢尾部;若虧欠,則將調(diào)度對(duì)象放到備用列表中,表示當(dāng)前輪次調(diào)度完畢;進(jìn)過(guò)反復(fù)輪詢調(diào)度后,所有調(diào)度對(duì)象全部進(jìn)入備用列表,此時(shí),相應(yīng)的虧欠計(jì)數(shù)器也全部為負(fù)數(shù),此時(shí),確認(rèn)當(dāng)前調(diào)度輪次完成;同時(shí),將活動(dòng)調(diào)度列表和備用列表進(jìn)行交換;并且按照預(yù)先配置的調(diào)度比例填充所有調(diào)度對(duì)象的虧欠計(jì)數(shù)器。
傳統(tǒng)的MDRR算法中,在調(diào)度之前,需要指定一個(gè)固定的補(bǔ)充顆粒,所述固定的補(bǔ)充顆粒以granularity表示,且不可更改,每次調(diào)度過(guò)程中,在切換調(diào)度輪次的時(shí)候,若未能將虧欠計(jì)數(shù)器補(bǔ)正,切換后的虧欠計(jì)數(shù)器所對(duì)應(yīng)的調(diào)度節(jié)點(diǎn)還是會(huì)被調(diào)度,并虧欠更多的值;考慮到數(shù)字邏輯實(shí)現(xiàn)的計(jì)數(shù)器有位寬限制,多次此事件發(fā)生后,虧欠計(jì)數(shù)器將會(huì)發(fā)生翻轉(zhuǎn),變成極大的正數(shù),使最終調(diào)度比例不準(zhǔn)確;如此,為了避免出現(xiàn)上述現(xiàn)象,通常將補(bǔ)充顆粒的數(shù)值設(shè)置為網(wǎng)絡(luò)傳輸過(guò)程中報(bào)文的最大長(zhǎng)度,稱作MTU,即設(shè)置granularity = MTU;然而,很多情況下,數(shù)據(jù)報(bào)文并不大,若每次都按照 MTU的權(quán)重倍數(shù)去填充虧欠計(jì)數(shù)器,勢(shì)必導(dǎo)致在通過(guò)流量是小報(bào)文的時(shí)候,輪次切換比較少;這樣會(huì)導(dǎo)致調(diào)度出的流量不夠平滑、有突發(fā)流量情況,最終精度同樣達(dá)不到用戶需求。
技術(shù)實(shí)現(xiàn)要素:
為解決上述技術(shù)問(wèn)題,本發(fā)明的目的在于提供一種基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度方法及調(diào)度系統(tǒng)。
為實(shí)現(xiàn)上述發(fā)明目的之一,本發(fā)明一實(shí)施方式提供的基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度方法, 所述方法包括:每次輪詢調(diào)度開(kāi)始前,
根據(jù)各個(gè)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值,以及各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)判斷各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象是否需要從備用列表轉(zhuǎn)換至活動(dòng)列表;
所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)包括:存在數(shù)據(jù)等待發(fā)送和無(wú)數(shù)據(jù)等待發(fā)送;
若是,根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的數(shù)值獲得虧欠計(jì)數(shù)器的補(bǔ)充顆粒;
同時(shí),根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的權(quán)重系數(shù)比,當(dāng)前各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài),以及當(dāng)前虧欠計(jì)數(shù)器的補(bǔ)充顆粒修改各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值;
若否,保持各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值。
作為本發(fā)明一實(shí)施方式的進(jìn)一步改進(jìn),“根據(jù)各個(gè)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值,以及各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)判斷各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象是否需要從備用列表轉(zhuǎn)換至活動(dòng)列表”具體包括:
若各個(gè)通道對(duì)應(yīng)的所述虧欠計(jì)數(shù)器的計(jì)數(shù)值均小于零,則同時(shí)將各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象從備用列表轉(zhuǎn)換至活動(dòng)列表;
若各個(gè)通道對(duì)應(yīng)的所述虧欠計(jì)數(shù)器中至少一個(gè)所述虧欠計(jì)數(shù)器的計(jì)數(shù)值小于零,同時(shí),至少一個(gè)所述虧欠計(jì)數(shù)器的計(jì)數(shù)值大于等于零;
則判斷所述虧欠計(jì)數(shù)器的計(jì)數(shù)值大于等于零的所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)是否為無(wú)數(shù)據(jù)等待發(fā)送,
若是,將所有虧欠計(jì)數(shù)器的計(jì)數(shù)值小于零的轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象均從備用列表轉(zhuǎn)換至活動(dòng)列表;
若否,保持各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象的當(dāng)前存儲(chǔ)狀態(tài)。
作為本發(fā)明一實(shí)施方式的進(jìn)一步改進(jìn),當(dāng)確認(rèn)轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象需要從備用列表轉(zhuǎn)換至活動(dòng)列表后,所述方法具體包括: 若當(dāng)前通道對(duì)應(yīng)的計(jì)數(shù)器的計(jì)數(shù)值小于零,
則將當(dāng)前通道的虧欠計(jì)數(shù)器的計(jì)數(shù)值均修改為:
X. deficitnext= X. deficit+ X.weight* granularity;
若當(dāng)前通道對(duì)應(yīng)的計(jì)數(shù)器的計(jì)數(shù)值大于等于零,
則將當(dāng)前通道的虧欠計(jì)數(shù)器的計(jì)數(shù)值清零后再進(jìn)行修改,
修改后的虧欠計(jì)數(shù)器的計(jì)數(shù)值為:
X. deficitnext= X.weight* granularity;
其中,X表示轉(zhuǎn)換通道的序號(hào),X. deficitnext表示修改后的虧欠計(jì)數(shù)器的計(jì)數(shù)值;X. deficit表示轉(zhuǎn)換前的虧欠計(jì)數(shù)器的計(jì)數(shù)值;X.weight表示當(dāng)前轉(zhuǎn)換通道的權(quán)重系數(shù)比;granularity表示本次轉(zhuǎn)換過(guò)程中填充的補(bǔ)充顆粒大小。
作為本發(fā)明一實(shí)施方式的進(jìn)一步改進(jìn),“根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的數(shù)值獲得虧欠計(jì)數(shù)器的補(bǔ)充顆?!本唧w包括:
依次比對(duì)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值;
獲得虧欠計(jì)數(shù)器的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值;
將所述負(fù)數(shù)值最接近的2的冪作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒。
作為本發(fā)明一實(shí)施方式的進(jìn)一步改進(jìn),所述方法具體包括:
獲得虧欠計(jì)數(shù)器的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值;
將所述負(fù)數(shù)值轉(zhuǎn)化為二進(jìn)制數(shù)據(jù),并對(duì)其取反;
查找取反后的所述負(fù)數(shù)值中第一個(gè)二進(jìn)制數(shù)字“1”所在比特位n;
將n+1作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒偏移值lastshift;
將2 lastShift 作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒。
為了實(shí)現(xiàn)上述發(fā)明目的之一,本發(fā)明一實(shí)施方式提供一種基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度系統(tǒng),所述系統(tǒng)包括:存儲(chǔ)模塊,判斷模塊,調(diào)度填充模塊;
所述存儲(chǔ)模塊包括:虧欠計(jì)數(shù)器;
每次輪詢調(diào)度開(kāi)始前,
所述判斷模塊用于根據(jù)各個(gè)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值,以及各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)判斷各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象是否需要從備用列表轉(zhuǎn)換至活動(dòng)列表;
所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)包括:存在數(shù)據(jù)等待發(fā)送和無(wú)數(shù)據(jù)等待發(fā)送;
若是,所述調(diào)度填充模塊根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的數(shù)值獲得虧欠計(jì)數(shù)器的補(bǔ)充顆粒;
同時(shí),根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的權(quán)重系數(shù)比,當(dāng)前各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài),以及當(dāng)前虧欠計(jì)數(shù)器的補(bǔ)充顆粒修改各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值;
若否,所述調(diào)度填充模塊用于保持各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值。
作為本發(fā)明一實(shí)施方式的進(jìn)一步改進(jìn),若所述判斷模塊確認(rèn)各個(gè)通道對(duì)應(yīng)的所述虧欠計(jì)數(shù)器的計(jì)數(shù)值均小于零,則通過(guò)所述調(diào)度填充模塊同時(shí)將各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象從備用列表轉(zhuǎn)換至活動(dòng)列表;
若所述判斷模塊確認(rèn)各個(gè)通道對(duì)應(yīng)的計(jì)數(shù)器中至少一個(gè)所述虧欠計(jì)數(shù)器的計(jì)數(shù)值小于零,同時(shí),至少一個(gè)所述虧欠計(jì)數(shù)器的計(jì)數(shù)值大于等于零;
則判斷所述虧欠計(jì)數(shù)器的計(jì)數(shù)值大于等于零的所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)是否為無(wú)數(shù)據(jù)等待發(fā)送,
若是,通過(guò)所述調(diào)度填充模塊將所有虧欠計(jì)數(shù)器的計(jì)數(shù)值小于零的轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象均從備用列表轉(zhuǎn)換至活動(dòng)列表;
若否,通過(guò)所述調(diào)度填充模塊保持各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象的當(dāng)前存儲(chǔ)狀態(tài)。
作為本發(fā)明一實(shí)施方式的進(jìn)一步改進(jìn),當(dāng)所述判斷模塊確認(rèn)轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象需要從備用列表轉(zhuǎn)換至活動(dòng)列表后,
若所述判斷模塊確認(rèn)當(dāng)前通道對(duì)應(yīng)的計(jì)數(shù)器的計(jì)數(shù)值小于零,
則通過(guò)所述填充調(diào)度模塊將當(dāng)前通道的虧欠計(jì)數(shù)器的計(jì)數(shù)值均修改為:
X. deficitnext= X. deficit+ X.weight* granularity;
若所述判斷模塊確認(rèn)當(dāng)前通道對(duì)應(yīng)的計(jì)數(shù)器的計(jì)數(shù)值大于等于零,
則通過(guò)所述填充調(diào)度模塊將當(dāng)前通道的虧欠計(jì)數(shù)器的計(jì)數(shù)值清零后再進(jìn)行修改,
修改后的虧欠計(jì)數(shù)器的計(jì)數(shù)值為:
X. deficitnext= X.weight*granularity;
其中,X表示轉(zhuǎn)換通道的序號(hào),X. deficitnext表示修改后的虧欠計(jì)數(shù)器的計(jì)數(shù)值;X. deficit表示轉(zhuǎn)換前的虧欠計(jì)數(shù)器的計(jì)數(shù)值;X.weight表示當(dāng)前轉(zhuǎn)換通道的權(quán)重系數(shù)比;granularity表示本次轉(zhuǎn)換過(guò)程中填充的補(bǔ)充顆粒大小。
作為本發(fā)明一實(shí)施方式的進(jìn)一步改進(jìn),所述判斷模塊還用于:依次比對(duì)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值;
獲得虧欠計(jì)數(shù)器的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值;
所述調(diào)度填充模塊還用于將所述負(fù)數(shù)值最接近的2的冪作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒。
作為本發(fā)明一實(shí)施方式的進(jìn)一步改進(jìn),所述判斷模塊具體用于:獲得虧欠計(jì)數(shù)器的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值;
所述調(diào)度填充模塊具體用于:將所述負(fù)數(shù)值轉(zhuǎn)化為二進(jìn)制數(shù)據(jù),并對(duì)其取反;
查找取反后的所述負(fù)數(shù)值中第一個(gè)二進(jìn)制數(shù)字“1”所在比特位n;
將n+1作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒偏移值lastshift;
將2 lastShift 作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒。
與現(xiàn)有技術(shù)相比,本發(fā)明的基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度方法及調(diào)度系統(tǒng),實(shí)時(shí)對(duì)所有調(diào)度對(duì)象的最大虧欠值進(jìn)行估算,以獲取最小的可以將所有虧欠計(jì)數(shù)器刷新成非負(fù)的“虧欠計(jì)數(shù)器的補(bǔ)充顆?!?,避免了預(yù)配置的所述補(bǔ)充顆粒無(wú)法兼顧大尺寸報(bào)文和小尺寸報(bào)文混合通過(guò)的情況,如此,減小虧欠計(jì)數(shù)器刷新的時(shí)候過(guò)度加入的值,從而減小了調(diào)度的抖動(dòng)、提高了調(diào)度的精度。
附圖說(shuō)明
圖1是傳統(tǒng)的DRR算法的代碼示意圖;
圖2是本發(fā)明一實(shí)施方式提供的基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度方法的流程示意圖;
圖3是本發(fā)明一實(shí)施方式中提供的基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度系統(tǒng)的模塊示意圖。
具體實(shí)施方式
以下將結(jié)合附圖所示的各實(shí)施方式對(duì)本發(fā)明進(jìn)行詳細(xì)描述。但這些實(shí)施方式并不限制本發(fā)明,本領(lǐng)域的普通技術(shù)人員根據(jù)這些實(shí)施方式所做出的結(jié)構(gòu)、方法、或功能上的變換均包含在本發(fā)明的保護(hù)范圍內(nèi)。
如圖2所示,本發(fā)明一實(shí)施方式提供的基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度方法,所述方法包括:
S1、每次輪詢調(diào)度開(kāi)始前,根據(jù)各個(gè)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值,以及各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)判斷各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象是否需要從備用列表轉(zhuǎn)換至活動(dòng)列表;
所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)包括:存在數(shù)據(jù)等待發(fā)送和無(wú)數(shù)據(jù)等待發(fā)送;
若是,進(jìn)入步驟S2,若否,進(jìn)入步驟S3;
S2、根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的數(shù)值獲得虧欠計(jì)數(shù)器的補(bǔ)充顆粒;
同時(shí),根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的權(quán)重系數(shù)比,當(dāng)前各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài),以及當(dāng)前虧欠計(jì)數(shù)器的補(bǔ)充顆粒修改各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值;
S3、保持各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值。
需要說(shuō)明的,初始狀態(tài)下,每個(gè)所述虧欠計(jì)數(shù)器的計(jì)數(shù)值均為零,隨著報(bào)文在交換芯片內(nèi)的轉(zhuǎn)發(fā),當(dāng)出現(xiàn)突發(fā)狀況時(shí),例如:轉(zhuǎn)發(fā)通道出現(xiàn)擁塞現(xiàn)象,則所述虧欠計(jì)數(shù)器的計(jì)數(shù)值也隨之發(fā)生變化。
相應(yīng)的,每次輪詢調(diào)度結(jié)束后,所述虧欠計(jì)數(shù)器的計(jì)數(shù)值會(huì)隨著轉(zhuǎn)發(fā)報(bào)文的長(zhǎng)度而更改,相應(yīng)的,所述虧欠計(jì)數(shù)器的計(jì)數(shù)值會(huì)出現(xiàn)兩種情況,一種為負(fù)值,另一種為非負(fù)值;
本發(fā)明具體實(shí)施方式中,每次輪詢調(diào)度結(jié)束后,需要分別獲取各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值,若當(dāng)前轉(zhuǎn)發(fā)通道中的虧欠計(jì)數(shù)器的計(jì)數(shù)值小于零,則將當(dāng)前轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象從活動(dòng)列表轉(zhuǎn)換至備用列表;若當(dāng)前轉(zhuǎn)發(fā)通道中的虧欠計(jì)數(shù)器的計(jì)數(shù)值大于等于零,則保持當(dāng)前轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象處于所述活動(dòng)列表中;
本發(fā)明一優(yōu)選實(shí)施方式中,所述步驟S1具體包括:
若各個(gè)通道對(duì)應(yīng)的所述虧欠計(jì)數(shù)器的計(jì)數(shù)值均小于零,則同時(shí)將各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象從備用列表轉(zhuǎn)換至活動(dòng)列表;
若各個(gè)通道對(duì)應(yīng)的所述虧欠計(jì)數(shù)器中至少一個(gè)所述虧欠計(jì)數(shù)器的計(jì)數(shù)值小于零,同時(shí),至少一個(gè)所述虧欠計(jì)數(shù)器的計(jì)數(shù)值大于等于零;
則判斷所述虧欠計(jì)數(shù)器的計(jì)數(shù)值大于等于零的所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)是否為無(wú)數(shù)據(jù)等待發(fā)送,
若是,將所有虧欠計(jì)數(shù)器的計(jì)數(shù)值小于零的轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象均從備用列表轉(zhuǎn)換至活動(dòng)列表;
若否,保持各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象的當(dāng)前存儲(chǔ)狀態(tài)。
該示例中,當(dāng)前調(diào)度節(jié)點(diǎn)上具有若干個(gè)隊(duì)列,每個(gè)隊(duì)列對(duì)應(yīng)一條轉(zhuǎn)發(fā)通道,當(dāng)該調(diào)度節(jié)點(diǎn)下的虧欠計(jì)數(shù)器的計(jì)數(shù)值其中一部分為非負(fù)值,另一部分為負(fù)值時(shí),根據(jù)各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)判斷各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象是否需要從備用列表轉(zhuǎn)換至活動(dòng)列表。
所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)為本次調(diào)度結(jié)束后,所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài),即當(dāng)前轉(zhuǎn)發(fā)通道的入端口是否有報(bào)文等待進(jìn)入該通道,若存在轉(zhuǎn)發(fā)報(bào)文,則其狀態(tài)為存在數(shù)據(jù)等待發(fā)送,若未有報(bào)文等待傳輸,則其狀態(tài)為無(wú)數(shù)據(jù)等待發(fā)送。
進(jìn)一步的,當(dāng)確認(rèn)轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象需要從備用列表轉(zhuǎn)換至活動(dòng)列表后,所述步驟S2具體包括:
若當(dāng)前通道對(duì)應(yīng)的計(jì)數(shù)器的計(jì)數(shù)值小于零,
則將當(dāng)前通道的虧欠計(jì)數(shù)器的計(jì)數(shù)值均修改為:
X. deficitnext= X. deficit+ X.weight*granularity;
若當(dāng)前通道對(duì)應(yīng)的計(jì)數(shù)器的計(jì)數(shù)值大于等于零,
則將當(dāng)前通道的虧欠計(jì)數(shù)器的計(jì)數(shù)值清零后再進(jìn)行修改,
修改后的虧欠計(jì)數(shù)器的計(jì)數(shù)值為:
X. deficitnext= X.weight* granularity;
其中,X表示轉(zhuǎn)換通道的序號(hào),X. deficitnext表示修改后的虧欠計(jì)數(shù)器的計(jì)數(shù)值;X. deficit表示轉(zhuǎn)換前的虧欠計(jì)數(shù)器的計(jì)數(shù)值;X.weight表示當(dāng)前轉(zhuǎn)換通道的權(quán)重系數(shù)比;granularity表示本次轉(zhuǎn)換過(guò)程中填充的補(bǔ)充顆粒大小。
所述權(quán)重系數(shù)比為在同一調(diào)度節(jié)點(diǎn)下,每個(gè)轉(zhuǎn)換通道對(duì)應(yīng)的調(diào)度比例,該權(quán)重系數(shù)可根據(jù)需要具體調(diào)整,例如:可由用戶指定,或者是按照各個(gè)傳輸通道的相對(duì)速率進(jìn)行設(shè)定。例如:一個(gè)調(diào)度節(jié)點(diǎn)M,其下屬4個(gè)隊(duì)列A,B,C,D,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)傳輸通道,將其調(diào)度比例依次設(shè)定為:1:1:1:1或1:2:3:4,在此不做詳細(xì)贅述。
上述步驟S2中,根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的數(shù)值獲得虧欠計(jì)數(shù)器的補(bǔ)充顆粒具體包括:
依次比對(duì)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值;
獲得虧欠計(jì)數(shù)器的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值;
將所述負(fù)數(shù)值最接近的2的冪作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒。
如此,鑒于硬件數(shù)據(jù)邏輯實(shí)現(xiàn)更為方便。
本發(fā)明一優(yōu)選實(shí)施方式中,根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器的數(shù)值獲得虧欠計(jì)數(shù)器的補(bǔ)充顆粒具體包括:
獲得虧欠計(jì)數(shù)器的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值;
將所述負(fù)數(shù)值轉(zhuǎn)化為二進(jìn)制數(shù)據(jù),并對(duì)其取反;
查找取反后的所述負(fù)數(shù)值中第一個(gè)二進(jìn)制數(shù)字“1”所在比特位n;
將n+1作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒偏移值lastshift;
將2 lastShift 作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒。
本發(fā)明一具體示例中,獲得虧欠計(jì)數(shù)器的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值為-3000為例做具體介紹;
首先,將-3000轉(zhuǎn)化為二進(jìn)制數(shù)據(jù),則所述-300的DWORD值為11111111111111111111010001001000;對(duì)上述獲得的DWORD 值取反為:0000000000000000000101110110111,
使用標(biāo)準(zhǔn) SP得到n值,n=11,則本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒偏移值lastshift= n+1=12,補(bǔ)充顆粒的大小2 lastShift=2n+1=212=4096。
為了便于理解,下述內(nèi)容中,以應(yīng)用本發(fā)明所示方法的具體示例進(jìn)行詳細(xì)說(shuō)明。
該示例中,一個(gè)調(diào)度節(jié)點(diǎn)M,其下屬4個(gè)隊(duì)列A,B,C,D,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)傳輸通道,將其調(diào)度比例依次設(shè)定為1:2:3:4。
采用數(shù)字邏輯配置,可表達(dá)為如下形式:A.weight=1,B.weight=2,C.weight=3,D.weight=4;
初始狀態(tài)下,對(duì)應(yīng)每個(gè)傳輸通道的虧欠計(jì)數(shù)器,其數(shù)字邏輯配置,可表達(dá)為如下形式:A.deficit=0,B.deficit=0,C.deficit=0,D.deficit=0;
假設(shè)交換機(jī)芯片運(yùn)行到一定時(shí)間后,上述隊(duì)列A,B,C,D全部處于擁塞狀態(tài),此時(shí),隊(duì)列A,B,C,D對(duì)應(yīng)的調(diào)度對(duì)象均處于活動(dòng)列表中。
當(dāng)前狀態(tài)下,例如:隊(duì)列A發(fā)送400B的報(bào)文,隊(duì)列B發(fā)送3000B的報(bào)文,隊(duì)列C發(fā)送64B的報(bào)文,隊(duì)列D發(fā)送9600B的報(bào)文,發(fā)送完成后,每個(gè)隊(duì)列對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值以及對(duì)應(yīng)的活動(dòng)列表標(biāo)志位均有可能發(fā)生變化;
本次輪詢調(diào)度結(jié)束后,對(duì)于隊(duì)列A,A.deficit=-400,A.inActive=FALSE,M.shift=9;對(duì)于隊(duì)列B,B.deficit=-3000,B.inActive=FALSE,M.shift=12;對(duì)于隊(duì)列C,C.deficit=-64,C.inActive=FALSE,M.shift=6;對(duì)于隊(duì)列D,D.deficit=-9600,D.inActive=FALSE,M.shift=14;
其中,A.inActive、B.inActive、C.inActive、D.inActive分別表示各個(gè)隊(duì)列中調(diào)度對(duì)象是否處于活動(dòng)列表的代碼標(biāo)識(shí),當(dāng)其值為0或FALSE表示當(dāng)前隊(duì)列中的調(diào)度對(duì)象從活動(dòng)列表轉(zhuǎn)置于備份列表中,當(dāng)其值為1或TURE時(shí),表示處于活動(dòng)列表中,所述活動(dòng)列表的代碼標(biāo)識(shí)為Active,所述備份列表的代碼標(biāo)識(shí)為Backup,M.shift表示每個(gè)隊(duì)列相對(duì)于所述虧欠計(jì)數(shù)器的計(jì)數(shù)值獲得的補(bǔ)充顆粒對(duì)應(yīng)的偏移值;當(dāng)然,在本發(fā)明的其他實(shí)施方式中,也可以以二進(jìn)制代碼“1”表示FALSE,以“0”表示TURE,在此不做詳細(xì)贅述。
進(jìn)一步的,當(dāng)前調(diào)度節(jié)點(diǎn)沒(méi)有額外的對(duì)象調(diào)度,即,沒(méi)有待發(fā)送數(shù)據(jù),如此,當(dāng)前節(jié)點(diǎn)的各個(gè)隊(duì)列中的調(diào)度對(duì)象均從Active轉(zhuǎn)換至Backup,則下一次輪詢調(diào)度開(kāi)始前,將Backup中的調(diào)度對(duì)象全部放回至Active中,同時(shí),獲得的M.lastShift = 14,M.shift=0,{A,B,C,D}.rstDeficit={A,B,C,D}.inActive=4'b0000;M.lastShift表示本次輪詢調(diào)度過(guò)程中,補(bǔ)充顆粒的偏移值,此處的M.shift=0表示將各個(gè)隊(duì)列對(duì)應(yīng)的補(bǔ)充顆粒值恢復(fù)為原始狀態(tài),以再次調(diào)度報(bào)文時(shí),重新計(jì)數(shù),{A,B,C,D}.rstDeficit為各個(gè)隊(duì)列對(duì)應(yīng)的重置虧欠計(jì)數(shù)器的標(biāo)識(shí)代碼;當(dāng)其值為0或 FALSE時(shí),表示正常調(diào)度,當(dāng)其值為TRUE或1時(shí),表示需要對(duì)當(dāng)前隊(duì)列的虧欠計(jì)數(shù)器清零后再繼續(xù)處理報(bào)文,以下將會(huì)詳細(xì)描述其為1時(shí)的場(chǎng)景,在此不做詳細(xì)贅述。
進(jìn)一步的,隊(duì)列A、B、C、D均繼續(xù)發(fā)送報(bào)文,例如:隊(duì)列A發(fā)送254B的報(bào)文,隊(duì)列B發(fā)送64B的報(bào)文,隊(duì)列C發(fā)送64B的報(bào)文,隊(duì)列D發(fā)送64B的報(bào)文,則在本次輪詢調(diào)度結(jié)束后,
對(duì)于隊(duì)列A,對(duì)虧欠計(jì)數(shù)器填充的數(shù)值為:cridit=A.weight<<M.lastShift=1*16384=16384,A.deficit=-400+16384-254=15730,保持A處于Active,對(duì)應(yīng)的A.shift=0;A.rstDeficit=FALSE;
對(duì)于隊(duì)列B,對(duì)虧欠計(jì)數(shù)器填充的數(shù)值為:ridit=B.weight<<M.lastShift=2*16384=32768,B.deficit=-3000+32768-64=29704,保持B在 Active,對(duì)應(yīng)的B.shift=0;B.rstDeficit=FALSE;
對(duì)于隊(duì)列C,對(duì)虧欠計(jì)數(shù)器填充的數(shù)值為:cridit=C.weight<<M.lastShift=3*16384=49152,C.deficit =-64+49152-64=49152,保持C在Active,對(duì)應(yīng)的C.shift=0;C.rstDeficit=FALSE;
對(duì)于隊(duì)列D,對(duì)虧欠計(jì)數(shù)器填充的數(shù)值為:cridit=D.weight<<M.lastShift=4*16384=65536,D.deficit=-9600+65536-64=55872,保持 D 在Active,對(duì)應(yīng)的D.shift=0;D.rstDeficit=FALSE。
若干輪后,可能出現(xiàn)的一種狀態(tài)如下:每個(gè)隊(duì)列對(duì)應(yīng)的虧欠計(jì)數(shù)器的計(jì)數(shù)值有正有負(fù),且報(bào)文的發(fā)送狀態(tài)也在改變。
當(dāng)前狀態(tài)下:A.deficit->3428,A.inActive->TRUE,B.deficit->-300,B.inActive->FALSE,C.deficit->2232,C.inActive->TRUE,D.deficit->-63,D.inActive ->FALSE,同時(shí),端口沒(méi)有可用的對(duì)象調(diào)度,即當(dāng)前輪次下,仍然留在活動(dòng)列表中的A,C對(duì)應(yīng)的數(shù)據(jù)待發(fā)送狀態(tài)全部為沒(méi)有待發(fā)送數(shù)據(jù)。
此時(shí),獲得M.lastShift=9,M.shift=0;{A,B,C,D}.rstDeficit={A,B,C,D}.inActive=4'b1010,須將*.rstDeficit的值為0所對(duì)應(yīng)的隊(duì)列中的調(diào)度對(duì)象全部從Backup放回至Active;
進(jìn)一步的,當(dāng)該節(jié)點(diǎn)下的各個(gè)隊(duì)列再次開(kāi)始接收?qǐng)?bào)文時(shí),例如:隊(duì)列A發(fā)送320B的報(bào)文,隊(duì)列B發(fā)送1518B的報(bào)文,隊(duì)列C發(fā)送64B的報(bào)文,隊(duì)列D發(fā)送800B的報(bào)文時(shí);
首先,根據(jù){A,B,C,D}.rstDeficit的值,將上一輪中其值為1的隊(duì)列對(duì)應(yīng)的計(jì)數(shù)值為正的虧欠計(jì)數(shù)器清零,保持?jǐn)?shù)值為負(fù)的虧欠計(jì)數(shù)器的計(jì)數(shù)值后,再進(jìn)行填充;
相應(yīng)的,本輪調(diào)度開(kāi)始后,對(duì)于隊(duì)列A,對(duì)虧欠計(jì)數(shù)器填充的數(shù)值為:cridit=A.weight<<M.lastShift=1*512=512,A.deficit=0+512-320=192,保持A處于Active,對(duì)應(yīng)的A.shift=0;A.rstDeficit=FALSE;
對(duì)于隊(duì)列B,對(duì)虧欠計(jì)數(shù)器填充的數(shù)值為:cridit=B.weight<<M.lastShift=2*512=102,B.deficit=-300+1024-1518=-794,將隊(duì)列B的調(diào)度對(duì)象從Active轉(zhuǎn)至Backup,對(duì)應(yīng)的 B.inActive=FALSE,B.shift=10;B.rstDeficit=FALSE;
對(duì)于隊(duì)列C,對(duì)虧欠計(jì)數(shù)器填充的數(shù)值為:cridit=C.weight<<M.lastShift=3*512=1536,C.deficit =0+1536-64=1472,保持C在Active,對(duì)應(yīng)的C.shift=0;C.rstDeficit=FALSE;
對(duì)于隊(duì)列D,對(duì)虧欠計(jì)數(shù)器填充的數(shù)值為:cridit=D.weight<<M.lastShift=4*512=2048,D.deficit=-63+2048-800=1185,保持D在Active,對(duì)應(yīng)的D.shift=0;D.rstDeficit=FALSE。
依次輪詢,直至報(bào)文調(diào)度結(jié)束,在此不在繼續(xù)贅述。
結(jié)合圖3所示,本發(fā)明一實(shí)施方式提供的基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度系統(tǒng),所述系統(tǒng)包括:數(shù)據(jù)獲取模塊100、判斷模塊200、存儲(chǔ)模塊300、填充調(diào)度模塊400;其中,所述存儲(chǔ)模塊300包括對(duì)應(yīng)每個(gè)傳輸通道設(shè)置的虧欠計(jì)數(shù)器301。
每次輪詢調(diào)度開(kāi)始前,判斷模塊200用于根據(jù)各個(gè)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器301的計(jì)數(shù)值,以及各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)判斷各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象是否需要從備用列表轉(zhuǎn)換至活動(dòng)列表;
所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)包括:存在數(shù)據(jù)等待發(fā)送和無(wú)數(shù)據(jù)等待發(fā)送;
若是,所述調(diào)度填充模塊400用于根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器301的數(shù)值獲得虧欠計(jì)數(shù)器301的補(bǔ)充顆粒;
同時(shí),所述調(diào)度填充模塊400還用于根據(jù)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的權(quán)重系數(shù)比,當(dāng)前各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài),以及當(dāng)前虧欠計(jì)數(shù)器301的補(bǔ)充顆粒修改各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器301的計(jì)數(shù)值;
若否,所述調(diào)度填充模塊400用于保持各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器301的計(jì)數(shù)值。
需要說(shuō)明的,初始狀態(tài)下,每個(gè)所述虧欠計(jì)數(shù)器301的計(jì)數(shù)值均為零,隨著報(bào)文在交換芯片內(nèi)的轉(zhuǎn)發(fā),當(dāng)出現(xiàn)突發(fā)狀況時(shí),例如:轉(zhuǎn)發(fā)通道出現(xiàn)擁塞現(xiàn)象,則所述虧欠計(jì)數(shù)器301的計(jì)數(shù)值也隨之發(fā)生變化。
相應(yīng)的,每次輪詢調(diào)度結(jié)束后,所述虧欠計(jì)數(shù)器301的計(jì)數(shù)值會(huì)隨著轉(zhuǎn)發(fā)報(bào)文的長(zhǎng)度而更改,相應(yīng)的,所述虧欠計(jì)數(shù)器301的計(jì)數(shù)值會(huì)出現(xiàn)兩種情況,一種為負(fù)值,另一種為非負(fù)值;
本發(fā)明具體實(shí)施方式中,每次輪詢調(diào)度結(jié)束后,數(shù)據(jù)獲取模塊100需要分別獲取各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器301的計(jì)數(shù)值,若所述判斷模塊200確認(rèn)當(dāng)前轉(zhuǎn)發(fā)通道中的虧欠計(jì)數(shù)器301的計(jì)數(shù)值小于零,則將當(dāng)前轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象從活動(dòng)列表轉(zhuǎn)換至備用列表;若所述判斷模塊200確認(rèn)當(dāng)前轉(zhuǎn)發(fā)通道中的虧欠計(jì)數(shù)器301的計(jì)數(shù)值大于等于零,則保持當(dāng)前轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象處于所述活動(dòng)列表中;
本發(fā)明一優(yōu)選實(shí)施方式中,若所述判斷模塊200確認(rèn)各個(gè)通道對(duì)應(yīng)的所述虧欠計(jì)數(shù)器301的計(jì)數(shù)值均小于零,則同時(shí)將各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象從備用列表轉(zhuǎn)換至活動(dòng)列表;
若所述判斷模塊200確認(rèn)各個(gè)通道對(duì)應(yīng)的所述虧欠計(jì)數(shù)器301中至少一個(gè)所述虧欠計(jì)數(shù)器301的計(jì)數(shù)值小于零,同時(shí),至少一個(gè)所述虧欠計(jì)數(shù)器301的計(jì)數(shù)值大于等于零;
則繼續(xù)判斷所述虧欠計(jì)數(shù)器301的計(jì)數(shù)值大于等于零的所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)是否為無(wú)數(shù)據(jù)等待發(fā)送,
若是,所述判斷模塊200用于將所有虧欠計(jì)數(shù)器301的計(jì)數(shù)值小于零的轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象均從備用列表轉(zhuǎn)換至活動(dòng)列表;
若否,所述判斷模塊200用于保持各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象的當(dāng)前存儲(chǔ)狀態(tài)。
該示例中,當(dāng)前調(diào)度節(jié)點(diǎn)上具有若干個(gè)隊(duì)列,每個(gè)隊(duì)列對(duì)應(yīng)一條轉(zhuǎn)發(fā)通道,當(dāng)該調(diào)度節(jié)點(diǎn)下的虧欠計(jì)數(shù)器301的計(jì)數(shù)值其中一部分為非負(fù)值,另一部分為負(fù)值時(shí),根據(jù)各個(gè)轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)判斷各個(gè)轉(zhuǎn)發(fā)通道中調(diào)度對(duì)象是否需要從備用列表轉(zhuǎn)換至活動(dòng)列表。
所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài)為本次調(diào)度結(jié)束后,所述轉(zhuǎn)發(fā)通道的數(shù)據(jù)待發(fā)送狀態(tài),即當(dāng)前轉(zhuǎn)發(fā)通道的入端口是否有報(bào)文等待進(jìn)入該通道,若存在轉(zhuǎn)發(fā)報(bào)文,則其狀態(tài)為存在數(shù)據(jù)等待發(fā)送,若未有報(bào)文等待傳輸,則其狀態(tài)為無(wú)數(shù)據(jù)等待發(fā)送。
進(jìn)一步的,當(dāng)所述判斷模塊200確認(rèn)轉(zhuǎn)發(fā)通道中的調(diào)度對(duì)象需要從備用列表轉(zhuǎn)換至活動(dòng)列表后,
若所述判斷模塊200確認(rèn)當(dāng)前通道對(duì)應(yīng)的計(jì)數(shù)器的計(jì)數(shù)值小于零,
則通過(guò)所述調(diào)度填充模塊400將當(dāng)前通道的虧欠計(jì)數(shù)器301的計(jì)數(shù)值均修改為:
X. deficitnext= X. deficit+ X.weight* granularity;
若所述判斷模塊200當(dāng)前通道對(duì)應(yīng)的計(jì)數(shù)器的計(jì)數(shù)值大于等于零,
則通過(guò)所述調(diào)度填充模塊400將當(dāng)前通道的虧欠計(jì)數(shù)器301的計(jì)數(shù)值清零后再進(jìn)行修改,
修改后的虧欠計(jì)數(shù)器301的計(jì)數(shù)值為:
X. deficitnext= X.weight* granularity;
其中,X表示轉(zhuǎn)換通道的序號(hào),X. deficitnext表示修改后的虧欠計(jì)數(shù)器301的計(jì)數(shù)值;X. deficit表示轉(zhuǎn)換前的虧欠計(jì)數(shù)器301的計(jì)數(shù)值;X.weight表示當(dāng)前轉(zhuǎn)換通道的權(quán)重系數(shù)比;granularity表示本次轉(zhuǎn)換過(guò)程中填充的補(bǔ)充顆粒大小。
所述權(quán)重系數(shù)比為在同一調(diào)度節(jié)點(diǎn)下,每個(gè)轉(zhuǎn)換通道對(duì)應(yīng)的調(diào)度比例,該權(quán)重系數(shù)可根據(jù)需要具體調(diào)整,例如:可由用戶指定,或者是按照各個(gè)傳輸通道的相對(duì)速率進(jìn)行設(shè)定。例如:一個(gè)調(diào)度節(jié)點(diǎn)M,其下屬4個(gè)隊(duì)列A,B,C,D,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)傳輸通道,將其調(diào)度比例依次設(shè)定為:1:1:1:1或1:2:3:4,在此不做詳細(xì)贅述。
一實(shí)施方式中,所述判斷模塊200還用于:依次比對(duì)各個(gè)轉(zhuǎn)發(fā)通道對(duì)應(yīng)的虧欠計(jì)數(shù)器301的計(jì)數(shù)值;
獲得虧欠計(jì)數(shù)器301的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值;
所述調(diào)度填充模塊400將所述負(fù)數(shù)值最接近的2的冪作為本輪次虧欠計(jì)數(shù)器301的補(bǔ)充顆粒。
如此,鑒于硬件數(shù)據(jù)邏輯實(shí)現(xiàn)更為方便。
本發(fā)明一優(yōu)選實(shí)施方式中,所述判斷模塊200還用于:
獲得虧欠計(jì)數(shù)器301的計(jì)數(shù)值中絕對(duì)值最大的負(fù)數(shù)值;
所述調(diào)度填充模塊400將所述負(fù)數(shù)值轉(zhuǎn)化為二進(jìn)制數(shù)據(jù),并對(duì)其取反;
查找取反后的所述負(fù)數(shù)值中第一個(gè)二進(jìn)制數(shù)字“1”所在比特位n;
將n+1作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒偏移值lastshift;
將2 lastShift 作為本輪次虧欠計(jì)數(shù)器的補(bǔ)充顆粒。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng)和模塊的具體工作過(guò)程,可參考前述方法實(shí)施方式中的對(duì)應(yīng)過(guò)程,在此不再贅述。
綜上所述,本發(fā)明的基于硬件實(shí)現(xiàn)的彈性的加權(quán)公平調(diào)度方法及調(diào)度系統(tǒng),實(shí)時(shí)對(duì)所有調(diào)度對(duì)象的最大虧欠值進(jìn)行估算,以獲取最小的可以將所有虧欠計(jì)數(shù)器刷新成非負(fù)的“虧欠計(jì)數(shù)器的補(bǔ)充顆粒”,避免了預(yù)配置的所述補(bǔ)充顆粒無(wú)法兼顧大尺寸報(bào)文和小尺寸報(bào)文混合通過(guò)的情況,如此,減小虧欠計(jì)數(shù)器刷新的時(shí)候過(guò)度加入的值,從而減小了調(diào)度的抖動(dòng)、提高了調(diào)度的精度。
為了描述的方便,描述以上裝置時(shí)以功能分為各種模塊分別描述。當(dāng)然,在實(shí)施本發(fā)明時(shí)可以把各模塊的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。
以上所描述的裝置實(shí)施方式僅僅是示意性的,其中所述作為分離部件說(shuō)明的模塊可以是或者也可以不是物理上分開(kāi)的,作為模塊顯示的部件可以是或者也可以不是物理模塊,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)模塊上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施方式方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
應(yīng)當(dāng)理解,雖然本說(shuō)明書(shū)按照實(shí)施方式加以描述,但并非每個(gè)實(shí)施方式僅包含一個(gè)獨(dú)立的技術(shù)方案,說(shuō)明書(shū)的這種敘述方式僅僅是為清楚起見(jiàn),本領(lǐng)域技術(shù)人員應(yīng)當(dāng)將說(shuō)明書(shū)作為一個(gè)整體,各實(shí)施方式中的技術(shù)方案也可以經(jīng)適當(dāng)組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實(shí)施方式。
上文所列出的一系列的詳細(xì)說(shuō)明僅僅是針對(duì)本發(fā)明的可行性實(shí)施方式的具體說(shuō)明,它們并非用以限制本發(fā)明的保護(hù)范圍,凡未脫離本發(fā)明技藝精神所作的等效實(shí)施方式或變更均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。