專利名稱:大用戶量的QoS公平調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種大用戶量的QoS公平調(diào)度方法,屬于網(wǎng)絡(luò)安全技術(shù)領(lǐng)域。
背景技術(shù):
隨著Internet網(wǎng)絡(luò)的越來越盛行,網(wǎng)絡(luò)應(yīng)用越來越多,網(wǎng)絡(luò)帶寬與需求的矛盾越來越突出,一方面每個上網(wǎng)的人員都想要無 窮大的帶寬和最小的延遲,另一方面網(wǎng)絡(luò)的總帶寬是有限的,而且網(wǎng)絡(luò)處理總會帶來時間延遲。目前多種操作系統(tǒng),包括Unix (linux)、網(wǎng)絡(luò)操作系統(tǒng)(CIS⑶I0S)等等,都提供了 QoS實現(xiàn),主要包括出入端口的流量限速和整形、出端口的隊列調(diào)度,這些功能一般只能匹配若干個對象,包括IP、MAC、端口等等。實際應(yīng)用中經(jīng)常有如下場景,同一個局域網(wǎng)內(nèi),所有用戶共享IOOM帶寬,用戶總數(shù)最多可能有500個,為防止某用戶使用P2P工具占用帶寬,在通用QoS設(shè)備中必須下發(fā)500條規(guī)則來限制所有人的帶寬占用,每個人的帶寬上限為200K,而且如此配置下某個用戶的帶寬無法動態(tài)調(diào)整,比如當(dāng)前僅有10個人在線,該用戶也只能使用200K,無法使用剩余的帶寬。即通用QoS設(shè)備需要下發(fā)大量的規(guī)則,會導(dǎo)致性能顯著下降,同時又無法使用剩余的帶寬。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)存在的不足,提供一種大用戶量的QoS公平調(diào)度方法,使用戶享受剩余的帶寬,同時下發(fā)的規(guī)則也相當(dāng)少,對系統(tǒng)性能的影響也很小。本發(fā)明的目的通過以下技術(shù)方案來實現(xiàn)
大用戶量的QoS公平調(diào)度方法,特點是每個用戶構(gòu)造一個隊列,目前用戶以IP為唯一標志,用戶需要發(fā)送的報文均入隊列,用戶隊列以HASH鏈表方式存儲;在端口發(fā)送報文時,輪循每個隊列進行發(fā)送,使公平調(diào)度、分享帶寬,當(dāng)同時上線的用戶較少時,每個用戶獲取大的帶寬,隨著上線的用戶逐漸增多,每個用戶獲取的帶寬逐漸減少;同時實現(xiàn)帶寬上限功能,引入一個活動鏈表概念,鏈表記錄當(dāng)前所有可發(fā)送的用戶,輪循鏈表發(fā)送報文,每個用戶按照令牌桶算法決定是否已超過帶寬上限,若超過則移出活動鏈表,等待一段時間后再加入活動鏈表等待發(fā)送。進一步地,上述的大用戶量的QoS公平調(diào)度方法,報文入隊列,輸入為出端口的報文,首先按照報文的IP獲取對應(yīng)的用戶隊列,如果獲取不到則新建一個用戶隊列,將報文入隊列;如果用戶隊列不屬于活躍鏈表,且僅有一個本次處理的報文,則將用戶隊列加入到活躍鏈表;
報文出隊列,首先獲取活躍鏈表中的當(dāng)前用戶隊列,同時標記當(dāng)前用戶隊列的下一個結(jié)點,作為下一次輪循的當(dāng)前用戶隊列;當(dāng)前用戶隊列的隊頭報文為需要發(fā)送的報文,查看報文發(fā)送是否超過帶寬上限,如果超過則不允許發(fā)送,計算需要延期等待的時間,如果不超過則直接發(fā)送報文。本發(fā)明技術(shù)方案突出的實質(zhì)性特點和顯著的進步主要體現(xiàn)在本發(fā)明確保設(shè)定范圍內(nèi)的用戶公平調(diào)度,平均分享帶寬,獲取幾乎相同的時間延遲,還可以設(shè)置這些用戶的上限帶寬;為每個用戶構(gòu)造一個隊列,目前用戶以IP為唯一標志,該用戶需要發(fā)送的報文均入此隊列;用戶隊列以HASH鏈表方式存儲,可以適用于相當(dāng)大的規(guī)模;在端口發(fā)送報文時,輪循每個隊列進行發(fā)送,達到公平調(diào)度、分享帶寬的效果,當(dāng)同時上線的用戶較少時,每個用戶可以獲取大的帶寬,隨著上線的用戶逐漸增多,每個用戶獲取的帶寬逐漸減少;同時為實現(xiàn)帶寬上限功能,引入一個活動鏈表概念,該鏈表記錄當(dāng)前所有可以發(fā)送的用戶,輪循該鏈表發(fā)送報文,每個用戶按照令牌桶算法決定是否已超過帶寬上限,若超過則移出活動鏈表,等待一段時間后再加入活動鏈表等待發(fā)送;本發(fā)明可以任意設(shè)定范圍內(nèi)的用戶,可以使用網(wǎng)絡(luò)地址范圍、MAC地址集合、部門等等,有極強的應(yīng)用性;提出QoS公平調(diào)度算法,極大的改善了網(wǎng)絡(luò)環(huán)境和網(wǎng)絡(luò)質(zhì)量,具有豐富的實用場景。
下面結(jié)合附圖對本發(fā)明技術(shù)方案作進一步說明
圖I:入隊列流程示意 圖2:出隊列流程示意圖。
具體實施例方式大用戶量的QoS公平調(diào)度方法,為每個用戶構(gòu)造一個隊列,目前用戶以IP為唯一標志,該用戶需要發(fā)送的報文均入隊列;用戶隊列以HASH鏈表方式存儲,當(dāng)前的HASH表長度為256,適用于相當(dāng)大的規(guī)模;為實現(xiàn)帶寬上限功能,引入一個活動鏈表概念,該鏈表記錄當(dāng)前所有可以發(fā)送的用戶,輪循該鏈表發(fā)送報文;在端口發(fā)送報文時,輪循活躍鏈表的用戶隊列進行發(fā)送,達到公平調(diào)度、分享帶寬的效果,當(dāng)同時上線的用戶較少時,每個用戶可獲取大的帶寬,隨著上線的用戶逐漸增多,每個用戶獲取的帶寬逐漸減少;同時每個用戶按照令牌桶算法決定是否已超過帶寬上限,若超過則移出活動鏈表,等待一段時間后再加入活動鏈表等待發(fā)送。調(diào)度的數(shù)據(jù)結(jié)構(gòu),所有的用戶隊列按照HASH隊列存儲,同時有一個動態(tài)變化的活躍鏈表(active),該鏈表內(nèi)的所有用戶隊列都可發(fā)送報文(沒有被限速)而且都可以發(fā)送報文(隊列中有報文需要發(fā)送),當(dāng)前用戶鏈表(cur)指向下一個待發(fā)送的用戶隊列;
每個用戶隊列存儲所有待發(fā)送的報文,同時還存儲了兩個定時器,一個是超時定時器,當(dāng)該用戶隊列在固定設(shè)置的時間段內(nèi)一直沒有報文來時觸發(fā),觸發(fā)時刪除用戶隊列并釋放資源;另一個是超時定時器,當(dāng)該用戶隊列在發(fā)送某個報文時超過帶寬上限時啟動超時定時器,超時時間通過上限帶寬和當(dāng)前帶寬的計算獲得,當(dāng)超時時間滿足后觸發(fā)定時器,觸發(fā)時將該用戶隊列加入到活躍鏈表,并重新調(diào)度。如圖I所示,報文入隊列,首先查找報文屬于的用戶隊列,如果找不到則新建一個用戶隊列并插入活躍鏈表;如果找到則更新超時定時器,如果用戶隊列存儲的報文過長則丟棄,否則添加到用戶隊列,如果該用戶隊列不在活躍鏈表且原先存儲的報文個數(shù)為0,則添加該用戶隊列到活躍鏈表中。這一操作主要是因為沒有報文的用戶隊列會從活躍鏈表中移除,因此當(dāng)有報文到來時必須添加到活躍鏈表,只有活躍鏈表中的用戶隊列才會被調(diào)度,才有可能發(fā)送報文。
如圖2所示,報文出隊列,首先獲取當(dāng)前用戶隊列的隊頭報文,再判斷是否設(shè)置帶寬上限,如果設(shè)置則需要使用令牌桶算法決定是否發(fā)送此報文,超過帶寬上限則不能發(fā)送報文并移出活躍鏈表,啟動限流定時器,超時時間通過上限帶寬和當(dāng)前帶寬的計算獲得,當(dāng)超時時間滿足后觸發(fā)限流定時器,觸發(fā)時將該用戶隊列加入到活躍鏈表,并重新調(diào)度;再查看當(dāng)前用戶隊列的報文數(shù),如果為0,則移出活躍隊列;最后更新當(dāng)前用戶隊列以供下次輪循調(diào)度。目前本方法按照報文個數(shù)來進行調(diào)度,在現(xiàn)實情況下已經(jīng)可基本滿足需求,將該算法變換后,按照報文長度來進行調(diào)度,則可以達到非常精確的公平狀態(tài)。本方法可以存在多個活動單元,在設(shè)備的同一個物理接口可以同時設(shè)置多個調(diào)度機制,同時為不同的用戶群設(shè)置不同的帶寬上限進行公平調(diào)度、帶寬共享。在設(shè)置時只要將需要調(diào)度的報文進入調(diào)度結(jié)構(gòu)即可,在Linux上可以利用netfilter實現(xiàn),舉例來說,匹配設(shè)定的IP地址段,這段IP地址的所有報文進行公平調(diào)度且設(shè)置一個帶寬上限,如此可以設(shè)置多個IP地址段滿足不同的調(diào)度需求。 本方法還可以和其他調(diào)度機制進行配合使用,比如和Linux的HTB調(diào)度機制配合,可以為設(shè)定IP段設(shè)置總帶寬限制,并且該IP段內(nèi)的所有用戶公平調(diào)度、分享帶寬,還可以設(shè)置每個用戶的帶寬上限。另外,在應(yīng)用時還要查看具體場景,本發(fā)明應(yīng)用在一個相對平均的環(huán)境,即該環(huán)境下的所有用戶都是同等對待的,如果某環(huán)境下的用戶需要嚴格區(qū)別對待,則需要使用其他調(diào)度機制。綜上所述,本發(fā)明提出了大用戶量的QoS公平調(diào)度算法,極大的提高了 Q0S設(shè)備的帶寬限制性能,適用于相當(dāng)大的規(guī)模,使用一條規(guī)則實現(xiàn)設(shè)定范圍內(nèi)的用戶帶寬上限,傳統(tǒng)的QoS設(shè)備可能需要上百條規(guī)則;充分利用了剩余帶寬,實現(xiàn)了分享帶寬的效果;并且可以和其他調(diào)度機制配合使用,相當(dāng)方便靈活,可以充分滿足需求。需要理解到的是以上所述僅是本發(fā)明的優(yōu)選實施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
權(quán)利要求
1.大用戶量的QoS公平調(diào)度方法,其特征在于每個用戶構(gòu)造一個隊列,目前用戶以IP為唯一標志,用戶需要發(fā)送的報文均入隊列,用戶隊列以HASH鏈表方式存儲;在端口發(fā)送報文時,輪循每個隊列進行發(fā)送,使公平調(diào)度、分享帶寬,當(dāng)同時上線的用戶較少時,每個用戶獲取大的帶寬,隨著上線的用戶逐漸增多,每個用戶獲取的帶寬逐漸減少;同時實現(xiàn)帶寬上限功能,引入一個活動鏈表概念,鏈表記錄當(dāng)前所有可發(fā)送的用戶,輪循鏈表發(fā)送報文,每個用戶按照令牌桶算法決定是否已超過帶寬上限,若超過則移出活動鏈表,等待一段時間后再加入活動鏈表等待發(fā)送。
2.根據(jù)權(quán)利要求I所述的大用戶量的QoS公平調(diào)度方法,其特征在于報文入隊列,輸入為出端口的報文,首先按照報文的IP獲取對應(yīng)的用戶隊列,如果獲取不到則新建一個用戶隊列,將報文入隊列;如果用戶隊列不屬于活躍鏈表,且僅有一個本次處理的報文,則將用戶隊列加入到活躍鏈表; 報文出隊列,首先獲取活躍鏈表中的當(dāng)前用戶隊列,同時標記當(dāng)前用戶隊列的下一個結(jié)點,作為下一次輪循的當(dāng)前用戶隊列;當(dāng)前用戶隊列的隊頭報文為需要發(fā)送的報文,查看報文發(fā)送是否超過帶寬上限,如果超過則不允許發(fā)送,計算需要延期等待的時間,如果不超過則直接發(fā)送報文。
全文摘要
本發(fā)明涉及大用戶量的QoS公平調(diào)度方法,每個用戶構(gòu)造一個隊列,目前用戶以IP為唯一標志,用戶需要發(fā)送的報文均入隊列,用戶隊列以HASH鏈表方式存儲;在端口發(fā)送報文時,輪循每個隊列進行發(fā)送,使公平調(diào)度、分享帶寬,當(dāng)同時上線的用戶較少時,每個用戶獲取大的帶寬,隨著上線的用戶逐漸增多,每個用戶獲取的帶寬逐漸減少;同時實現(xiàn)帶寬上限功能,引入一個活動鏈表概念,鏈表記錄當(dāng)前所有可發(fā)送的用戶,輪循鏈表發(fā)送報文,每個用戶按照令牌桶算法決定是否已超過帶寬上限,若超過則移出活動鏈表,等待一段時間后再加入活動鏈表等待發(fā)送。提出大用戶量的QoS公平調(diào)度算法,極大的提高、QoS設(shè)備的帶寬限制性能。
文檔編號H04L12/56GK102624625SQ20121006460
公開日2012年8月1日 申請日期2012年3月13日 優(yōu)先權(quán)日2012年3月13日
發(fā)明者劉繼明, 林恩峰, 王東泉, 謝煒 申請人:網(wǎng)經(jīng)科技(蘇州)有限公司