專利名稱:一種公平性好效率高的動態(tài)輪詢分組調度方法
技術領域:
本發(fā)明屬于網絡通信技術領域,具體來說涉及一種公平性好、效率高的動態(tài)輪詢分組調度方法。
背景技術:
隨著互聯(lián)網的發(fā)展,網絡上提供的服務越來越豐富,除了傳統(tǒng)的盡力而為 (Best-effort)服務,以視頻會議、網絡電話、遠程醫(yī)療服務等為代表的許多業(yè)務都已在互聯(lián)網上開展,可以預見,將來還會有更多的業(yè)務通過互聯(lián)網實現(xiàn)。不同的業(yè)務具有不同的特征,也會有不同的質量要求,如視頻會議對帶寬和端到端時延有要求,而傳統(tǒng)的數據業(yè)務卻沒有明顯的QoS (Quality of krvice)要求。因此,即使傳輸媒介的可靠性、傳輸速率都有了大幅度的提高,但仍然需要有相應的區(qū)分機制來保證不同業(yè)務流的QoS要求。對于如何提供QoS支持,已經提出了許多相關的算法和方法,分組調度就是其中最重要的方法之一,也是通信網絡QoS體系結構中一個很重要的組成部分。分組調度的任務是按怎樣的順序將到達網絡節(jié)點的數據分組通過輸出鏈路傳送出去,網絡的交換節(jié)點都要依賴分組調度方法來對到達該節(jié)點的所有分組進行緩存、調度和輸出,實現(xiàn)對不同類型的業(yè)務流提供有區(qū)別的服務,進而提供相應的QoS保障。如果不進行分組調度,就是傳統(tǒng)路由器所采用的先來先服務(First Come First krve)機制,平等地對待所有的業(yè)務流。分組調度方法主要分為兩大類基于時間戳(Time-stamp)的方法和基于輪詢 (Round-robin)的方法。時間戳調度方法的基本思想是為每個分組維持兩個時間戳,標明其開始服務和結束服務的時間,然后對時間排序,選擇具有最小結束服務時間的分組發(fā)送。這類方法有 WFQ (Weighted Fair Queuing)、WF2Q (Worst-case Fair Weighted Fair Queuing)、VC(Virtual Clock) , SCFQ(Self-Clocked Fair Queuing)等,它們都具有良好的時延性能和公平性。但是,由于要涉及到對系統(tǒng)中每個分組時間的排序計算,這類方法的時間復雜度至少為0(logN)(N為系統(tǒng)中活動業(yè)務流的數目),當業(yè)務流的數目較大時(成千上萬),其時間復雜度也較高,不利于硬件實現(xiàn),因此,這類方法在實際應用中受到了極大的限制,不適合應用在高速網絡設備中。舉個例子,IOGbps的鏈路傳送一個長度為100字節(jié)的分組大概需要0. 08微妙,這意味著復雜度為O(IogN)的調度器需要在0. 08微妙時間內完成分組的選擇,不管業(yè)務流的數量有多少都要達到這個要求,否則就會影響數據的傳輸速度。如果輸出鏈路的容量達到40(ibpS或更高,情況會變得更糟,這樣的調度方法會嚴重影響到高速網絡設備的性能。輪詢類調度方法的基本思想是調度器循環(huán)地對每個業(yè)務流的隊列進行輪流服務來發(fā)送隊列中的分組,不需要對系統(tǒng)中的每個業(yè)務流維持一個時間戳,大多具有0(1)的時間復雜度,且實現(xiàn)簡單,比較適合在高速網絡中使用,如DRR (Deficit Round Robin)就是典型的輪詢調度方法。但DRR有以下一些不足(1)只能提供長時間尺度的公平性,從短時間尺度來看,它會導致數據流的輸出有很大的突發(fā)性;(2)時延特性也不理想,有的隊列可能長時間得不到服務;(3) DRR給每個隊列分配一個定額值(Quantum),并通過
3DC (Deficit Counter)來衡量過去的不公平性,只有當一個隊列首部的分組長度小于定額值與DC的和值時才會發(fā)送此分組,這就要求發(fā)送分組前必須知道分組的長度,增加了實現(xiàn)的開銷。因此,減小數據流輸出的突發(fā)性、改善時延特性、降低實現(xiàn)開銷是現(xiàn)階段輪詢類分組調度方法中需要解決的問題。
發(fā)明內容
為了解決上述分組調度方法存在的技術問題,本發(fā)明提供一種公平性好、效率高的動態(tài)輪詢分組調度方法。本發(fā)明不僅具有更好的公平性和時延特性,而且發(fā)送分組前不需要知道分組的長度。本發(fā)明解決上述技術問題的技術方案包括以下步驟
分組調度模塊進行初始化,將活動數據流列表的初值賦值為空列表;訪問數據流計數器的初值賦值為0 ;
入隊列排隊過程,當一個新的分組到達時,進入到與它所屬數據流對應的隊列中,等候發(fā)送;當所屬的數據流加入到活動數據流列表時,給數據流的P值的初值置0,字節(jié)數計數器置0,所述數據流的P值為一個數據流在一個輪次中所允許發(fā)送的分組字節(jié)數,其計算為數據流下一輪次的P值=所述數據流本輪次P值+本輪次其他數據流平均發(fā)送的分組字節(jié)數-所述數據流本輪次發(fā)送的字節(jié)數;
出隊列調度過程,出隊列調度過程包括以下步驟
(1)當活動數據流列表為空時,分組調度模塊進入等待分組到達的狀態(tài);否則,訪問數據流計數器的值等于活動數據流列表中數據流的個數;
(2)選擇活動數據流列表中的第一個數據流,將這個數據流所對應的隊列中的第一個分組從輸出鏈路發(fā)送出去;將所發(fā)送出去分組的字節(jié)數累加到所述數據流的字節(jié)數計數器;
(3)判斷所選數據流的隊列是否為空,如果是,將該數據流從活動數據流列表中刪除, 執(zhí)行步驟(7);否則,繼續(xù);
(4)判斷所選數據流的P值減去本輪次中所發(fā)送出去的分組的長度和是否大于0,如果是,繼續(xù);否則,執(zhí)行步驟(6);
(5)繼續(xù)發(fā)送所選隊列中的下一個分組;將所發(fā)送出去分組的字節(jié)數累加到所述數據流的字節(jié)數計數器;執(zhí)行步驟(3);
(6)將所選擇的數據流移到活動數據流列表的尾部;
(7)訪問數據流計數器減1;
(8)判斷訪問數據流計數器是否為0,如果是,繼續(xù);否則,執(zhí)行步驟(2);
(9)計算活動數據流列表中每個數據流的下一個輪次的P值;將活動數據流列表中每個數據流的字節(jié)數計數器置為0 ;
(10)執(zhí)行步驟(1)。本發(fā)明的技術效果在于本發(fā)明中一個數據流在一個輪次中所允許發(fā)送的字節(jié)數,即一個數據流的P值,不是對所有的輪次都是固定不變的,而是依賴于前一個輪次中各個數據流的發(fā)送情況進行計算,從而使在一個輪次中獲得很少服務(發(fā)送的字節(jié)數很少)的數據流會在下一個輪次中給予更多的服務機會,這樣就保證數據流之間比較好的公平性。(2)本發(fā)明只要一個數據流的隊列不為空,那么在每一個輪次中,這個數據流至少都有一個分組被發(fā)送到輸出鏈路,這樣就避免了數據流長時間得不到服務的情況。(3)在調度方法的入隊列排隊過程中,包括分組加入到隊列、數據流添加到活動數據流列表中、給變量賦初值等操作,這些操作都可以在0(1)的時間復雜度中完成。在調度方法的出隊列調度過程中, 包括了發(fā)送分組、從活動數據流列表的首部移出一個數據流、在活動數據流列表的尾部添加一個數據流、更新變量的值等操作,這些操作都可以在常數時間內完成,這樣降低了復雜度,并且容易實現(xiàn)。綜上所述,本發(fā)明提高了分組調度的效率,公平地分配輸出鏈路的帶寬資源,減少擁塞和降低分組丟失率,并具有較低的復雜度,同時,硬件實現(xiàn)也很簡單。
圖1本發(fā)明中數據流、隊列、分組調度模塊、輸出鏈路之間的關系示意圖。圖2本發(fā)明實施例中,數據流及其隊列的示意圖。圖3本發(fā)明實施例中,第1輪次的分組調度情形示意圖,從左至右的內容是數據流標識、數據流本輪次的P值、發(fā)送的分組、數據流下一個輪次的P值計算(圖4、圖5、圖6的內容與圖3相同,除了圖6中沒有數據流下一個輪次的P值計算)。圖4本發(fā)明實施例中,第2輪次的分組調度情形示意圖。圖5本發(fā)明實施例中,第3輪次的分組調度情形示意圖。圖6本發(fā)明實施例中,第4輪次的分組調度情形示意圖。圖7本發(fā)明中入隊列排隊過程流程圖。圖8本發(fā)明中出隊列調度過程流程圖。
具體實施例方式在結合實施例說明本發(fā)明所提供的動態(tài)輪詢分組調度方法之前,首先對相關概念和參數進行說明。本發(fā)明中,定義一個數據流是活動的(Active),當這個數據流的分組正在出隊列調度過程中被訪問,或者這個數據流對應的隊列非空。為了描述本發(fā)明所述的分組調度方法,將所有活動的數據流放在一個列表中,這個列表稱為活動數據流列表。定義一個輪次 (Round)是某一時刻Tl (T1>0),活動數據流列表中所包含的數據流被分組調度模塊訪問的過程。在本輪次執(zhí)行過程中,新到達的或重新成為活動的數據流可以加入到活動數據流列表的尾部,但將從下一輪次開始被訪問。本發(fā)明中,為了表示一個輪次中所需要訪問的數據流的數目,采用計數器記錄數據流的數目,這個計數器稱為訪問數據流計數器,表示在一個輪次開始時活動數據流列表中數據流的數量。每當分組調度模塊訪問一個數據流,訪問數據流計數器就減少1,當訪問數據流計數器最終等于0時,就說明這個輪次結束。本發(fā)明中,將一個數據流在一個輪次中所允許(Permission)發(fā)送的分組字節(jié)數稱為這個數據流的P值。P值不是固定不變的,除了數據流的第1個輪次的P值為初值0夕卜, 其余輪次的P值都需要通過重新計算得到。計算方法是所述數據流下一輪次的P值=所述數據流本輪次P值+本輪次其他數據流平均發(fā)送的分組字節(jié)數-所述數據流本輪次發(fā)送的字節(jié)數。所述的動態(tài)輪詢分組調度方法,用一個計數器記錄一個數據流在一個輪次中總共發(fā)送出去的分組字節(jié)數,這個計數器稱為字節(jié)數計數器,每個數據流都有一個字節(jié)數計數器。在一個輪次開始前,字節(jié)數計數器的初值為0,然后每發(fā)送一個分組,就將分組的字節(jié)數累加到對應數據流的字節(jié)數計數器。所述的動態(tài)輪詢分組調度方法,初始化過程中對分組調度模塊進行初始化操作, 包括初始化活動數據流列表和訪問數據流計數器。所述的動態(tài)輪詢分組調度方法,入隊列排隊過程是指當一個新的分組到達時,進入到與它所屬數據流對應的隊列中,等候發(fā)送。如果該分組所屬的數據流不在活動數據流列表中,則將該分組所屬的數據流加入到活動數據流列表的尾部;設置該數據流的P值為初值0 ;設置該數據流的字節(jié)數計數器為初值0。本發(fā)明所提供的輪詢分組調度方法中,數據流、隊列、分組調度模塊、輸出鏈路之間的關系如圖1所示。有η (η為大于0的自然數) 個數據流1共享一條輸出鏈路5,每一個數據流的分組在發(fā)送到輸出鏈路5之前,進入到數據流所對應的隊列2,等候發(fā)送。分組調度模塊3使用本發(fā)明的分組調度方法4來調度分組的傳送,使輸出鏈路5的帶寬資源得到公平分配,減少擁塞、降低分組丟失率。如果數據流-1是“活動的”,那么數據流-1需要滿足兩個條件中的一個。第一條件是,數據流-1對應的隊列-1非空;第二個條件是,數據流-1有分組正在被訪問,并將發(fā)送到輸出鏈路5。第二個條件的含義是,雖然數據流-1對應的隊列-1中已經沒有分組,但數據流-1有分組正在被訪問,在該分組被發(fā)送到輸出鏈路5之前,數據流-1仍然是活動的。只有當數據流-1的所有分組都已被經過輸出鏈路5發(fā)送出去,并且沒有新的分組到達時,數據流-1才成為“非活動的”。為了表述更直觀,用ActiveFlowList表示活動數據流列表,是所有活動的數據流的列表。當一個數據流由活動的變成非活動的時,該數據流將從ActiveFlowList中移走。 當一個數據流由非活動的變成活動的時,該數據流將加入到ActiveFlowList的尾部。一個輪次中數據流的確定現(xiàn)考慮輪次1的開始時間是Tl,結束時間是T2 (Τ2ΧΓ1)。在Tl時刻,ActiveFlowList中包含數據流_1、數據流_2、數據流-3等三個數據流,那么在輪次1,分組調度模塊將訪問上述的三個數據流。在T1、T2之間,數據流-4變成活動的并加入到了 ActiveFlowList,但分組調度模塊不會在輪次1訪問數據流-4,因為數據流-4在輪次1開始時刻Tl不在ActiveFlowList中。定義輪次2在T2時刻開始,在輪次2中,分組調度模塊將訪問T2時刻ActiveFlowList中的數據流,即訪問數據流_1、數據流_2、數據流_3、數據流-4。另外,第幾輪次是相對于某個數據流來講的,如從T2開始的輪次,對于數據流-1、數據流_2、數據流-3來說,是第2輪次,但對于數據流-4來說,是第 1輪次。為了表述更直觀,用VisitFlowCount表示訪問數據流計數器,是在一個輪次開始時ActiveFlowList列表中數據流的數量。每當分組調度模塊完成對一個數據流的訪問, VisitFlowCount就減少1,當VisitFlowCount最終等于O時,就說明這個輪次結束。一個數據流的P值是一個數據流在一個輪次中所允許發(fā)送的分組的字節(jié)數量。 在第r (r為大于O的自然數)個輪次中數據流_i (1 < i < n,i為自然數)所允許發(fā)送的分組字節(jié)數,記為Pi (r)。
為了表述更直觀,用knd表示字節(jié)數計數器,是一個數據流在一個輪次中所發(fā)送的字節(jié)數。用knd i表示數據流-i的字節(jié)數計數器;用knd i (r)表示在第r輪次中從數據流_i的隊列中發(fā)送出去的分組字節(jié)數。Average Count (AC)對數據流_i來說,AC表示從第r (r彡2)個輪次開始,除了數據流_i之外的其余數據流在前一個輪次r-Ι所發(fā)送的平均字節(jié)數,記為ACi (r-l)0 如果第 r-Ι 輪次總共有 η 個流,則 ACi (r_l)= [Send (r_l)+…+ Send (r_l)+ Send i+1 (r-1)+…+ Send n (r_l) ]/(n_l),當不能整除時,取不小于商的整數,即商的整數部分 +1。一個數據流P值的計算當r=l時,數據流-i的卩值?1 (I)=O ;當r>l時,Pi (r) =Pi (r-1) + ACi (r-1) - Send j (r_l)。下面結合實施例來說明本發(fā)明所提供的動態(tài)輪詢分組調度方法,實施例中有三個數據流數據流-1包含4個分組,數據流-2包含7分組,數據流-3包含6個分組,分組的排列及分組的長度(本實施例中以字節(jié)為單位,如果分組大小是以其他的單位來衡量,本發(fā)明同樣適用,亦屬于本發(fā)明所涵蓋范圍之內)如圖2所示,左邊的分組比右邊的分組先期到達。一、初始化過程
這是分組調度模塊進行初始化的過程,包括以下一些操作 ActiveFlowList的初值賦值為空列表; VisitFlowCount的初值賦值為O。二、入隊列排隊過程
當一個數據流的分組到達分組調度模塊時,進入到所述數據流的隊列中排隊,等候發(fā)送。如圖2所示,本實施例中,數據流-1的4個分組已經進入到數據流-1的隊列中,數據流-2的7個分組已經進入到數據流-2的隊列中,數據流-3的6個分組已經進入到數據流-3的隊列中。與此同時,由于數據流-1、數據流_2、數據流-3等三個數據流的隊列都非空,所以,數據流-1、數據流_2、數據流-3都是“活動的”,三個數據流都加入到ActiveFlowList 中,于是,ActiveFlowList=!數據流-1,數據流_2,數據流-3}。數據流-1、數據流-2、數據流-3三個數據流的P值賦初值為0,即當數據流_i加入到 ActiveFlowList 中時,Pi=Oa ( i Sn,本實施例中 n=3 ;
ACi的初值賦值為0,1 < i彡η,本實施例中η=3 ; Send i的初值賦值為0,1彡i彡η,本實施例中η=3。入隊列排隊過程的流程如圖7所示。三、出隊列調度過程
分組調度模塊開始對ActiveFlowList中數據流進行訪問,從隊列中選取分組并將分組從輸出鏈路發(fā)送出去。開始時,首先判斷ActiveFlowList是否為空集,本實施例中,ActiveFlowList= {數據流-1,數據流_2,數據流-3},非空。這時, VisitFlowCount=ActiveFlowList中數據流的個數=3,進入三個數據流的第1輪次
因為此時數據流-1是ActiveFlowList中的第一個數據流,所以對數據流_1的隊列進行操作,選擇數據流-1隊列中的第一個分組從輸出鏈路發(fā)送出去;分組的長度為20, 所以Send1=0+20=20 ;判斷P1-Send1是否大于0,P1-Send1=OjO=IO小于0,于是不再發(fā)送數據流-1隊列中的下一個分組,并將數據流-1移到ActiveFlowList的尾部,這時, ActiveFlowList= {數據流 _2,數據流 _3,數據流-1} ;VisitFlowCount=3_l=2。繼續(xù)對ActiveFlowList中的第一個數據流即數據流_2進行操作,選擇數據流_2 隊列中的第一個分組從輸出鏈路發(fā)送出去;分組的長度為10,所以Send2=0+10=10 ;判斷 P2-Send2是否大于0,P2-Send2=O-IO=-IO小于0,于是不再發(fā)送數據流_2隊列中的下一個分組,并將數據流-2移到ActiveFlowList的尾部,這時,ActiveFlowList= {數據流_3,數據流-1,數據流-2} ;VisitFlowCount=2-l=l0繼續(xù)對ActiveFlowList中的第一個數據流即數據流_3進行操作,選擇數據流_3 隊列中的第一個分組從輸出鏈路發(fā)送出去;分組的長度為15,所以Send3=0+15=15 ;判斷 P3-Send3是否大于0,P3-Send3=0-15=-15小于0,于是不再發(fā)送數據流_3隊列中的下一個分組,并將數據流-3移到ActiveFlowList的尾部,這時,ActiveFlowList= {數據流-I,數據流-2,數據流-3} ;VisitFlowCount=l_l=0。VisitFlowCount=O說明輪次1已經結束,于是計算ActiveFlowList中每個數據流下一個輪次即輪次2的P值,數據流-1在輪次2的P值為P (2) =0+13-20=-7,數據流-2 在輪次2的P值為P O) =0+18-10=8,數據流3在輪次2的P值為PQ) =0+15-15=0 ;并將每個數據流_i的knd i置為0,1彡i彡n,本實施例中n=3 ;第1輪次的分組調度情形如圖 3所示,圖的右邊顯示的是下一輪次P值的計算。下面進入第2輪次
ActiveFlowList={數據流_1, 數據流_2, 數據流_3}, VisitFlowCount=ActiveFlowList 中數據流的個數=3。首先對數據流-1進行操作,選擇數據流-1隊列中的第一個分組從輸出鏈路發(fā)送出去;分組的長度為15,所以^1^=0+15=15 ;判斷P1-Send1是否大于0, P1-Send1=-7-15=-22小于0,于是不再發(fā)送數據流-1隊列中的下一個分組,并將數據流_1 移到ActiveFlowList的尾部,這時,ActiveFlowList= {數據流_2,數據流_3,數據流-1}; VisitFlowCount=3_l=20對數據流-2進行操作,選擇數據流-2隊列中的第一個分組從輸出鏈路發(fā)送出去; 分組的長度為5,所以knd2=0+5=5 ;判斷P2-Send2是否大于0,P2-Send2=8_5=3大于0,于是繼續(xù)發(fā)送數據流-2隊列中的下一個分組,分組的長度為5,Send2=5+5=10 ;判斷P2-Send2是否大于0,P2-Send2=8-10=-2小于0,于是不再發(fā)送數據流_2隊列中的下一個分組,并將數據流-2移到ActiveFlowList的尾部,這時,ActiveFlowList=!數據流_3,數據流-1,數據流-2} ;VisitFlowCount=2-l=l0對數據流-3進行操作,選擇數據流-3隊列中的第一個分組從輸出鏈路發(fā)送出去; 分組的長度為3,所以knd3=0+3=3 ;判斷P3-Send3是否大于0,P3-Send3=0_3=-3小于0,于是不再發(fā)送數據流-3隊列中的下一個分組,并將數據流-3移到ActiveFlowList的尾部, 這時,ActiveFlowList= {數據流 _1,數據流 _2,數據流-3} ;VisitFlowCount=l_l=0。VisitFlowCount=O說明輪次2已經結束,于是計算VisitFlowCount中每個數據流下一個輪次即輪次3的P值,數據流-1在輪次3的P值為P (3) =-7+7-15=-15,數據流-2在輪次3的P值為P (3) =8+9-10=7,數據流3在輪次3的P值為P (3) =0+13-3=10 ;并將每個數據流_i的knd i置為0,1彡i彡n,本實施例中n=3 ;第2輪次的分組調度情形如圖4所示ο下面進入第3輪次
ActiveFlowList={數據流_1, 數據流_2, 數據流_3}, VisitFlowCount=ActiveFlowList 中數據流的個數=3。首先對數據流-1進行操作,選擇數據流-1隊列中的第一個分組從輸出鏈路發(fā)送出去;分組的長度為8,所以^1^=0+8=8 ;判斷P1-Send1是否大于0,P1-Send1=-IS-S=IS小于0,于是不再發(fā)送數據流-1隊列中的下一個分組,并將數據流-1移到ActiveFlowList的尾部,這時,ActiveFlowList= {數據流 _2,數據流 _3,數據流-1} ;VisitFlowCount=3_l=2。對數據流-2進行操作,選擇數據流-2隊列中的第一個分組從輸出鏈路發(fā)送出去; 分組的長度為6,所以knd2=0+6=6 ;判斷P2-Send2是否大于0,P2-Send2=7-6=1大于0,于是繼續(xù)發(fā)送數據流-2隊列中的下一個分組,分組的長度為9,Send2=6+9=15 ;判斷P2-Send2是否大于0,P2-Send2=7-15=-8小于0,于是不再發(fā)送數據流_2隊列中的下一個分組,并將數據流-2移到ActiveFlowList的尾部,這時,ActiveFlowList=!數據流_3,數據流-1,數據流-2} ;VisitFlowCount=2-l=l0對數據流-3進行操作,選擇數據流-3隊列中的第一個分組從輸出鏈路發(fā)送出去; 分組的長度為7,所以knd3=0+7=7 ;判斷P3-Send3是否大于0,P34end3=10-7=3大于0,于是繼續(xù)發(fā)送數據流-3隊列中的下一個分組,分組的長度為2,Send3=7+2=9 ;判斷P3-Send3 是否大于0,P3-knd3=10-9=l大于0,于是繼續(xù)發(fā)送數據流-3隊列中的下一個分組,分組的長度為 11,Send3=9+ll=20 ;判斷 P3-Send3 是否大于 0,P3-Send3=10-20=-10 小于 0,于是不再發(fā)送數據流-3隊列中的下一個分組,并將數據流-3移到ActiveFlowList的尾部,這時, ActiveFlowList= {數據流 _1,數據流 _2,數據流-3} ;VisitFlowCount=l_l=0。VisitFlowCount=O說明輪次3已經結束,于是計算ActiveFlowList中每個數據流下一個輪次即輪次4的P值,數據流-1在輪次4的P值為P (4) =-15+18-8=-5,數據流-2 在輪次4的P值為P (4) =7+14-15=6,數據流3在輪次4的P值為P (4) =10+12-20=2 ;并將每個數據流_i的knd i置為0,1彡i彡n,本實施例中n=3 ;第3輪次的分組調度情形如圖 5所示。下面進入第4輪次
ActiveFlowList={數據流_1, 數據流_2, 數據流_3}, VisitFlowCount=ActiveFlowList 中數據流的個數=3。首先對數據流-1進行操作,選擇數據流-1隊列中的第一個分組從輸出鏈路發(fā)送出去;分組的長度為5,所以^11(^=0+5=5 ;由于這時數據流-1的隊列中已經沒有分組,數據流-1變成非活動的,所以將數據流-1從ActiveFlowList中刪除,于是 ActiveFlowList= {數據流 _2,數據流-3} ;VisitFlowCount=3_l=2。對數據流-2進行操作,選擇數據流-2隊列中的第一個分組從輸出鏈路發(fā)送出去;分組的長度為4,所以Send2=0+4=4 ;判斷P2-Send2是否大于0,P2-Send2=6-4=2大于0,于是繼續(xù)發(fā)送數據流-2隊列中的下一個分組,分組的長度為6,Send2=4+6=10 ;由于這時數據流-2的隊列中已經沒有分組,數據流-2變成非活動的,所以將數據流-2從
9ActiveFlowList 中刪除,于是 ActiveFlowList= {數據流-3} ;VisitFlowCount=2_l=l。對數據流-3進行操作,選擇數據流-3隊列中的第一個分組從輸出鏈路發(fā)送出去; 分組的長度為8,所以knd3=0+8=8 ;由于這時數據流-3的隊列中已經沒有分組,數據流_3 變成非活動的,所以將數據流"3 /AActiveFlowList中刪除,于是ActiveFlowList=!}; ViSitFlowCount=I-I=O οVisitFlowCount=O說明輪次4已經結束,由于ActiveFlowList中已沒有數據流, 所以不需要進行計算數據流下一輪次的P值及將數據流的knd置O等操作。第4輪次的分組調度情形如圖6所示。繼續(xù)執(zhí)行,由于ActiveFlowList已為空集,即此時已沒有數據流的隊列需要調度,因此,分組調度模塊進入等待分組到達的狀態(tài)。如上所述的實施例分組調度過程,只是描述了在給定實施例的情況下,執(zhí)行本發(fā)明所述的動態(tài)輪詢分組調度方法的開始的4個輪次。本發(fā)明所述的分組調度方法,對數據流數量、輪次的多少是沒有限制的,一旦有數據流變成活動的,分組調度模塊還將繼續(xù)往下執(zhí)行分組調度。出隊列調度過程的流程如圖8所示。以上實施例說明的就是本發(fā)明所提供的一種動態(tài)輪詢分組調度方法的具體實施方式
。本發(fā)明所提供的分組調度技術具有以下優(yōu)點(1) 一個數據流在一個輪次中所允許發(fā)送的字節(jié)數,即一個數據流的P值,不是對所有的輪次都是固定不變的,而是依賴于前一個輪次中各個數據流的發(fā)送情況進行計算。一般來講,在一個輪次中獲得很少服務(發(fā)送的字節(jié)數很少)的數據流會在下一個輪次中給予更多的服務機會。這樣就保證數據流之間比較好的公平性。(2)只要一個數據流的隊列不為空,那么在每一個輪次中,這個數據流至少都有一個分組被發(fā)送到輸出鏈路。這樣就避免了數據流長時間得不到服務的情況。(3)在調度方法的入隊列排隊過程中,包括分組加入到隊列、數據流添加到ActiveFlowList中、 給變量(P” ACpkndi)賦初值等操作,這些操作都可以在0(1)的時間復雜度中完成。在調度方法的出隊列調度過程中,包括了發(fā)送分組、從ActiveFlowList的首部移出一個數據流、在ActiveFlowList的尾部添加一個數據流、更新變量(VisitFlowCount AendiIi)的值等操作,這些操作都可以在常數時間內完成。因此,本發(fā)明所提供的動態(tài)輪詢分組調度方法復雜度低、效率高、容易實現(xiàn)。
權利要求
1. 一種公平性好效率高的動態(tài)輪詢分組調度方法,包括以下步驟分組調度模塊進行初始化,將活動數據流列表的初值賦值為空列表;訪問數據流計數器的初值賦值為0 ;入隊列排隊過程,當一個新的分組到達時,進入到與它所屬數據流對應的隊列中,等候發(fā)送;當所屬的數據流加入到活動數據流列表時,給數據流的P值的初值置0,字節(jié)數計數器置0,所述數據流的P值為一個數據流在一個輪次中所允許發(fā)送的分組字節(jié)數,其計算為數據流下一輪次的P值=所述數據流本輪次P值+本輪次其他數據流平均發(fā)送的分組字節(jié)數-所述數據流本輪次發(fā)送的字節(jié)數;出隊列調度過程,出隊列調度過程包括以下步驟(1)當活動數據流列表為空時,分組調度模塊進入等待分組到達的狀態(tài);否則,訪問數據流計數器的值等于活動數據流列表中數據流的個數;(2)選擇活動數據流列表中的第一個數據流,將這個數據流所對應的隊列中的第一個分組從輸出鏈路發(fā)送出去;將所發(fā)送出去分組的字節(jié)數累加到所述數據流的字節(jié)數計數器;(3)判斷所選數據流的隊列是否為空,如果是,將該數據流從活動數據流列表中刪除, 執(zhí)行步驟(7);否則,繼續(xù);(4)判斷所選數據流的P值減去本輪次中所發(fā)送出去的分組的長度和是否大于0,如果是,繼續(xù);否則,執(zhí)行步驟(6);(5)繼續(xù)發(fā)送所選隊列中的下一個分組;將所發(fā)送出去分組的字節(jié)數累加到所述數據流的字節(jié)數計數器;執(zhí)行步驟(3);(6)將所選擇的數據流移到活動數據流列表的尾部;(7)訪問數據流計數器減1;(8)判斷訪問數據流計數器是否為0,如果是,繼續(xù);否則,執(zhí)行步驟(2);(9)計算活動數據流列表中每個數據流的下一個輪次的P值;將活動數據流列表中每個數據流的字節(jié)數計數器置為0 ;(10)執(zhí)行步驟(1)。
全文摘要
本發(fā)明公開了一種公平性好效率高的動態(tài)輪詢分組調度方法。它包括以下步驟初始化;入隊列排隊過程;出隊列調度過程。出隊列調度過程中按照輪詢的方式根據數據流的P值進行發(fā)送。本發(fā)明中數據流的P值依賴于前一個輪次中各個數據流的發(fā)送情況進行計算,從而使在一個輪次中獲得很少服務的數據流會在下一個輪次中給予更多的服務機會,這樣就保證數據流之間比較好的公平性。本發(fā)明提高了分組調度的效率,公平地分配輸出鏈路的帶寬資源,減少擁塞和降低分組丟失率,并具有較低的復雜度,同時,硬件實現(xiàn)也很簡單。
文檔編號H04L12/56GK102271093SQ201110271188
公開日2011年12月7日 申請日期2011年9月14日 優(yōu)先權日2011年9月14日
發(fā)明者劉桂開, 鄧茜, 高蕾 申請人:湖南科技大學