孟祥奎 張瓊聲 李村合 徐晨升
(中國石油大學(xué)(華東)計(jì)算機(jī)與通信工程學(xué)院 青島 266580)
在互聯(lián)網(wǎng)時(shí)代,網(wǎng)絡(luò)上的數(shù)據(jù)量出現(xiàn)了爆炸式的增長,如何實(shí)現(xiàn)高帶寬低延遲的網(wǎng)絡(luò)通信具有現(xiàn)實(shí)意義。網(wǎng)絡(luò)通信對數(shù)據(jù)處理的延遲要求往往會(huì)很高,比如使用即時(shí)聊天軟件時(shí),用戶幾乎感覺不到數(shù)據(jù)處理和傳輸?shù)难舆t。如何實(shí)現(xiàn)這種高效率的網(wǎng)絡(luò)數(shù)據(jù)的處理,在操作系統(tǒng)層面減小數(shù)據(jù)傳輸延遲相關(guān)的理論和技術(shù)研究具有重要意義。
在數(shù)據(jù)包的傳輸過程中,操作系統(tǒng)內(nèi)核負(fù)責(zé)完成對數(shù)據(jù)包的封裝和解封裝;帶寬分配以及數(shù)據(jù)包發(fā)送方式;采用輪詢或觸發(fā)中斷的方式,查看網(wǎng)卡是否有數(shù)據(jù)包到達(dá),以及是否接收。因此,數(shù)據(jù)包在傳輸?shù)倪^程中的延遲主要包括五個(gè)部分:數(shù)據(jù)包的封裝、數(shù)據(jù)包的發(fā)送、數(shù)據(jù)包在網(wǎng)絡(luò)中間設(shè)備中的傳輸、數(shù)據(jù)包的接收以及數(shù)據(jù)包的解封裝。為了提高帶寬的利用率,降低數(shù)據(jù)包發(fā)送延遲,系統(tǒng)為每個(gè)網(wǎng)絡(luò)設(shè)備設(shè)置隊(duì)列規(guī)則。將到達(dá)的數(shù)據(jù)包按照一定的規(guī)則進(jìn)行分類,并為每個(gè)分類分配不同的帶寬,根據(jù)隊(duì)列規(guī)則的設(shè)置,每次選擇一個(gè)數(shù)據(jù)包進(jìn)行發(fā)送。本文針對常用的HTB 帶寬分配算法,在數(shù)據(jù)包發(fā)送的過程中,通過對各個(gè)應(yīng)用程序的帶寬使用的歷史狀況進(jìn)行分析,將帶寬合理地分配給各個(gè)應(yīng)用程序,降低數(shù)據(jù)包在發(fā)送過程中的時(shí)間消耗,降低數(shù)據(jù)包傳輸?shù)臅r(shí)延,提高帶寬的利用率。
本文主要闡述HTB 算法、HTB 的改進(jìn)算法、實(shí)驗(yàn)與性能評估。
HTB 算法,全稱為Hierarchical Token Bucket,分層令牌桶算法,是一種功能強(qiáng)大的流量整型算法。
HTB算法在Linux內(nèi)核中被實(shí)現(xiàn)為一種樹形分層結(jié)構(gòu),如圖1所示。
圖1 HTB算法結(jié)構(gòu)圖
HTB 算法主要包括三個(gè)部分:隊(duì)列規(guī)則(Qdisc,Queue Discipline)、分類(Classes)以及分類器(Filters)。Linux 內(nèi)核為每個(gè)網(wǎng)絡(luò)設(shè)備設(shè)置一個(gè)隊(duì)列規(guī)則,規(guī)定到達(dá)這個(gè)網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)包如何分類、如何獲取、如何發(fā)送,以及帶寬如何分配[3]。
在HTB 算法中,節(jié)點(diǎn)分為兩類:內(nèi)部節(jié)點(diǎn)和葉子節(jié)點(diǎn)[5]。內(nèi)部節(jié)點(diǎn)中,根節(jié)點(diǎn)作為入口與數(shù)據(jù)流進(jìn)行交互,其余內(nèi)部節(jié)點(diǎn)實(shí)現(xiàn)對流量的整形、令牌租借等功能。內(nèi)部節(jié)點(diǎn)不掛載數(shù)據(jù)包,只有葉子節(jié)點(diǎn)中才掛載數(shù)據(jù)包。每個(gè)節(jié)點(diǎn)中設(shè)置如下參數(shù),實(shí)現(xiàn)高效的令牌租借機(jī)制:節(jié)點(diǎn)模式(cmode)、保證速率(AR,Assured Rate)、最大速率(CR,Ceil Rate)、額定量(Quantum)、優(yōu)先級(priority)以及節(jié)點(diǎn)層級(level)。
Linux 內(nèi) 核 中 節(jié) 點(diǎn) 模 式 有 三 種 :HTB_CANT_SEND ( 無 法 發(fā) 送 模 式) 、HTB_MAY_BORROW( 可 租 借 模 式)以 及HTB_CAN_SEND(可發(fā)送模式)。
AR 和CR 是為每個(gè)節(jié)點(diǎn)設(shè)置的兩個(gè)閾值。AR表示系統(tǒng)保證該節(jié)點(diǎn)可以獲得的數(shù)據(jù)包的發(fā)送速率。當(dāng)數(shù)據(jù)包發(fā)送速率小于AR 時(shí),節(jié)點(diǎn)處于可發(fā)送模式,無限制。CR 為系統(tǒng)能為該節(jié)點(diǎn)提供的最大的數(shù)據(jù)包發(fā)送速率。當(dāng)數(shù)據(jù)包發(fā)送速率大于CR時(shí),節(jié)點(diǎn)變?yōu)椴豢砂l(fā)送模式。當(dāng)數(shù)據(jù)包發(fā)送速率介于AR和CR之間時(shí),表明該節(jié)點(diǎn)處于可租借模式。
Quantum 為額定量參數(shù),系統(tǒng)從某節(jié)點(diǎn)獲取數(shù)據(jù)包時(shí),累計(jì)數(shù)據(jù)包的字節(jié)總數(shù)超過此數(shù)值或者數(shù)據(jù)包剩余個(gè)數(shù)為0 時(shí),就要停止從此節(jié)點(diǎn)中獲取數(shù)據(jù)包,轉(zhuǎn)向處理其他的節(jié)點(diǎn)。同時(shí),在節(jié)點(diǎn)向其父節(jié)點(diǎn)租借令牌時(shí),也是以Quantum為單位。
Linux 內(nèi)核中,共設(shè)置8 個(gè)不同的優(yōu)先級,用于描述數(shù)據(jù)包發(fā)送的先后順序。
節(jié)點(diǎn)層級表示該節(jié)點(diǎn)在HTB 算法的樹結(jié)構(gòu)中所處的層次,葉子節(jié)點(diǎn)為0層。
HTB算法的執(zhí)行流程主要包括兩個(gè)部分:數(shù)據(jù)包的入隊(duì)列和出隊(duì)列。當(dāng)數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)設(shè)備時(shí),根據(jù)數(shù)據(jù)包的優(yōu)先級、目的IP 地址等信息進(jìn)行分類,進(jìn)入到不同的數(shù)據(jù)鏈路中,加入到葉子節(jié)點(diǎn)的數(shù)據(jù)包隊(duì)列。以圖2為例,介紹HTB算法的執(zhí)行流程。
圖2 HTB算法樹結(jié)構(gòu)圖
網(wǎng)絡(luò)設(shè)備的名稱為eth0,在eth0上根據(jù)HTB算法設(shè)置隊(duì)列規(guī)則,并為該隊(duì)列規(guī)則分配ID 為1。樹節(jié)點(diǎn)的id 包括兩部分,左側(cè)部分表示隊(duì)列規(guī)則的id,右側(cè)表示節(jié)點(diǎn)id。根節(jié)點(diǎn)的id 為1:1。其余四個(gè)id 的節(jié)點(diǎn)如圖2 所示。假設(shè)該網(wǎng)絡(luò)設(shè)備可用的帶寬總量為10M。在根節(jié)點(diǎn)時(shí)還未進(jìn)行帶寬的分配,所以根節(jié)點(diǎn)的Rate 和Ceil 參數(shù)相同,均為10M。HTB 算法為不同的數(shù)據(jù)流分配不同量的帶寬,以保證不同應(yīng)用的帶寬需求。將節(jié)點(diǎn)1:10 的Rate 值設(shè)置為5M,節(jié)點(diǎn)1:20 的Rate 值設(shè)置為2M,兩個(gè)節(jié)點(diǎn)的Rate參數(shù)之和小于10M,但是兩個(gè)節(jié)點(diǎn)的Ceil 參數(shù)之和大于10M,當(dāng)有節(jié)點(diǎn)流量突增時(shí),存在調(diào)節(jié)的空間,使系統(tǒng)具有一定應(yīng)對流量突發(fā)狀況的能力。在Linux 系統(tǒng)中,Quantum 參數(shù)的設(shè)置默認(rèn)為Rate 參數(shù)的1/10。在此處,節(jié)點(diǎn)1:10 的Quantum 設(shè) 置 為50000,1:20 的Quantum 設(shè) 置 為20000,其余節(jié)點(diǎn)的Rate、Ceil 和Quantum 參數(shù)設(shè)置均如圖2 所示,單位為字節(jié),使得不同的數(shù)據(jù)鏈路占用網(wǎng)絡(luò)設(shè)備的時(shí)間不同,體現(xiàn)出HTB 算法對帶寬的分配作用。節(jié)點(diǎn)的優(yōu)先級均設(shè)置為最高的0。數(shù)據(jù)包i1、i2和j 到達(dá)網(wǎng)絡(luò)設(shè)備eth0 之后,根據(jù)在內(nèi)部節(jié)點(diǎn)中得到的判決,進(jìn)入到相應(yīng)數(shù)據(jù)鏈路中,最終加入到葉子節(jié)點(diǎn)的數(shù)據(jù)包隊(duì)列中。
數(shù)據(jù)包在出隊(duì)列時(shí),首先尋找一個(gè)可以發(fā)送數(shù)據(jù)包的葉子節(jié)點(diǎn),隨后從該節(jié)點(diǎn)的數(shù)據(jù)包隊(duì)列里選擇一個(gè)數(shù)據(jù)包進(jìn)行發(fā)送。在圖2 所示的結(jié)構(gòu)圖中,假設(shè)所有的節(jié)點(diǎn)的優(yōu)先級均為0。節(jié)點(diǎn)1:10 為1:101 和1:102 的父節(jié)點(diǎn),1:1 為1:10 和1:20 的父節(jié)點(diǎn)。在HTB 算法中,使用紅黑樹來管理每層的節(jié)點(diǎn),不同優(yōu)先級的節(jié)點(diǎn)屬于不同的紅黑樹。在紅黑樹中,根據(jù)節(jié)點(diǎn)ID的大小進(jìn)行排序,因此1:20節(jié)點(diǎn)為左孩子,1:101 節(jié)點(diǎn)為根節(jié)點(diǎn),1:102 為右孩子。以圖2為示例說明數(shù)據(jù)包出隊(duì)列的過程。
1)最初三個(gè)節(jié)點(diǎn)均處于可發(fā)送模式,當(dāng)有報(bào)文掛載到三個(gè)節(jié)點(diǎn)下時(shí),節(jié)點(diǎn)被激活。
2)從第0 層節(jié)點(diǎn)開始尋找處于可發(fā)送模式且優(yōu)先級最高的節(jié)點(diǎn)。在圖2 所示的示例中找到1:101/1:102/1:20三個(gè)節(jié)點(diǎn)構(gòu)成的紅黑樹,選取ID 最小的節(jié)點(diǎn)1:20,發(fā)送該節(jié)點(diǎn)數(shù)據(jù)包隊(duì)列中的數(shù)據(jù)包。
3)當(dāng)從1:20 中獲取的數(shù)據(jù)包的字節(jié)總數(shù)達(dá)到其Quantum 參數(shù)設(shè)置的值,即20000 字節(jié)時(shí),開始尋找下一個(gè)葉子節(jié)點(diǎn),此時(shí)找到的是ID 較小的節(jié)點(diǎn)1:101。節(jié)點(diǎn)1:101 和1:102 的發(fā)送模式與1:20相同。
4)三個(gè)節(jié)點(diǎn)不斷發(fā)送數(shù)據(jù)包,三個(gè)節(jié)點(diǎn)陸續(xù)達(dá)到參數(shù)Rate 的設(shè)置,節(jié)點(diǎn)的模式變?yōu)榭勺饨枘J?,并對?jié)點(diǎn)進(jìn)去行激活處理,同時(shí)激活父節(jié)點(diǎn),將1:20 加入到其父節(jié)點(diǎn)的供給樹中。供給樹是為內(nèi)部節(jié)點(diǎn)維護(hù)的一個(gè)字段,用于管理向該節(jié)點(diǎn)借用帶寬的節(jié)點(diǎn),按優(yōu)先級,分為8個(gè)紅黑樹結(jié)構(gòu)。
5)此時(shí)第0 層已經(jīng)沒有激活的節(jié)點(diǎn),轉(zhuǎn)而向高層即第1 層尋找激活的節(jié)點(diǎn)。此時(shí)找到節(jié)點(diǎn)1:10。由于節(jié)點(diǎn)1:10 為非葉子節(jié)點(diǎn),因此首先找到1:10 的優(yōu)先級最高的供給樹,然后從樹中找到ID最小的節(jié)點(diǎn),作為發(fā)送數(shù)據(jù)包的節(jié)點(diǎn)。
6)繼續(xù)發(fā)送數(shù)據(jù)包,當(dāng)節(jié)點(diǎn)的數(shù)據(jù)包發(fā)送速率達(dá)到其設(shè)置的Ceil 參數(shù)后,節(jié)點(diǎn)變?yōu)椴豢砂l(fā)送模式,無法再發(fā)送數(shù)據(jù)包。
7)隨著時(shí)間的推移,令牌會(huì)不斷生成。令牌生成的數(shù)量足夠多時(shí),節(jié)點(diǎn)的模式可以從不可發(fā)送模式變?yōu)榭勺饨枘J交蚩砂l(fā)送模式。
8)重復(fù)上面的過程,繼續(xù)發(fā)送數(shù)據(jù)包,直到數(shù)據(jù)包發(fā)送完成。
在HTB 算法中,將數(shù)據(jù)包按照優(yōu)先級、目的ip等信息進(jìn)行分類,優(yōu)先保障高優(yōu)先級的數(shù)據(jù)包被發(fā)送出去。同時(shí)設(shè)置參數(shù)quantum,可以保證高優(yōu)先級的數(shù)據(jù)包優(yōu)先發(fā)送的前提下,優(yōu)先級較低的數(shù)據(jù)包不會(huì)因?yàn)轲囸I而失去發(fā)送的機(jī)會(huì)。Ceil 參數(shù)大于rate 參數(shù)的設(shè)置,可以使系統(tǒng)擁有一定的應(yīng)對流量突發(fā)狀況的能力。當(dāng)數(shù)據(jù)包流量突然增大時(shí),通過從父節(jié)點(diǎn)中借用帶寬的方式,完成數(shù)據(jù)包的發(fā)送。
在HTB 算法中,為節(jié)點(diǎn)設(shè)置了三種模式,隨著數(shù)據(jù)包的不斷發(fā)送,節(jié)點(diǎn)的模式變化可能有多種情況。
1)數(shù)據(jù)包發(fā)送之后節(jié)點(diǎn)的模式不變,對節(jié)點(diǎn)發(fā)送數(shù)據(jù)包的個(gè)數(shù)和字節(jié)數(shù)進(jìn)行統(tǒng)計(jì),不做其他操作。
2)數(shù)據(jù)包發(fā)送之后節(jié)點(diǎn)的模式發(fā)生改變,由可發(fā)送模式變?yōu)椴豢砂l(fā)送模式或可租借模式時(shí),需要將節(jié)點(diǎn)插入到該節(jié)點(diǎn)所在層次的等待隊(duì)列中,將節(jié)點(diǎn)去激活;節(jié)點(diǎn)模式在可租借模式和不可發(fā)送模式之間變化時(shí),首先將節(jié)點(diǎn)從等待隊(duì)列中取出,然后重新加入到等待隊(duì)列中;節(jié)點(diǎn)模式由可租借模式或不可發(fā)送模式變化為可發(fā)送模式時(shí),需要將節(jié)點(diǎn)從等待隊(duì)列中取出并激活節(jié)點(diǎn)。在完成上述操作后,兩種情況都需要對節(jié)點(diǎn)發(fā)送數(shù)據(jù)包的個(gè)數(shù)和字節(jié)數(shù)進(jìn)行統(tǒng)計(jì)。
3)當(dāng)節(jié)點(diǎn)長時(shí)間處于不可發(fā)送狀態(tài)時(shí),會(huì)消耗大量時(shí)間等待令牌的生成,因此會(huì)降低帶寬利用率,增加數(shù)據(jù)包發(fā)送的延遲。
當(dāng)節(jié)點(diǎn)的模式頻繁發(fā)生改變時(shí),會(huì)頻繁觸發(fā)這些操作,從而增加在OS 內(nèi)核層面發(fā)送數(shù)據(jù)包需要的時(shí)間,增加了數(shù)據(jù)包發(fā)送的延遲。本文提出一種HTB算法的改進(jìn)算法,通過定期對每個(gè)節(jié)點(diǎn)的帶寬使用情況進(jìn)行分析,對于帶寬使用量較大的節(jié)點(diǎn),由系統(tǒng)為其預(yù)留出部分帶寬,變相地增大其rate 和Ceil 參數(shù)的設(shè)置,從而減少節(jié)點(diǎn)的模式改變次數(shù),降低延遲,提高帶寬的利用率。
在HTB 算法中,使用結(jié)構(gòu)體struct HTB_class來描述節(jié)點(diǎn)。此結(jié)構(gòu)體中有一個(gè)聯(lián)合類型的字段un,其中定義了兩種結(jié)構(gòu)體,struct leaf 和struct in?ner,分別用于表示葉子節(jié)點(diǎn)和內(nèi)部節(jié)點(diǎn)。在struct leaf結(jié)構(gòu)中添加三個(gè)字段:
unsigned long tokens_reserved;
unsigned long tokens_used;
unsigned long pkts_nums;
tokens_reserved用于記錄父節(jié)點(diǎn)為孩子節(jié)點(diǎn)預(yù)留下令牌數(shù)量,tokens_used用于記錄該節(jié)點(diǎn)在一段時(shí)間內(nèi)的令牌消耗數(shù)量,pkts_nums 記錄發(fā)送的數(shù)據(jù)包個(gè)數(shù)。這兩個(gè)參數(shù)的初值均設(shè)置為0。當(dāng)從該節(jié)點(diǎn)中獲取數(shù)據(jù)包時(shí),便進(jìn)行統(tǒng)計(jì),對數(shù)據(jù)包的長度進(jìn)行累計(jì),一共參數(shù)調(diào)節(jié)時(shí)使用,當(dāng)參數(shù)調(diào)節(jié)完成后清0,重新開始計(jì)數(shù)。
在struct inner結(jié)構(gòu)中添加字段:
struct list_reserved*head_reserved;
此字段用于記錄該節(jié)點(diǎn)為其子節(jié)點(diǎn)預(yù)留的令牌數(shù)量。由于HTB 算法為多叉樹結(jié)構(gòu),因此struct list_reserved結(jié)構(gòu)體的定義如下:
struct list_reserved{
u32 classid;
unsigned long tokens;
struct list_reserved*next;}
tokens 字段表示該節(jié)點(diǎn)為id 為classid 的節(jié)點(diǎn)預(yù)留的令牌數(shù)量。
在得到上述參數(shù)之后,對節(jié)點(diǎn)進(jìn)行令牌使用情況的分析。
1)在系統(tǒng)中設(shè)置參數(shù)調(diào)節(jié)的頻率,當(dāng)系統(tǒng)發(fā)送出相應(yīng)數(shù)量(程序中設(shè)置的數(shù)量為1000,參數(shù)可調(diào))的數(shù)據(jù)包之后,便進(jìn)行分析。
2)分析時(shí),遍歷所有的葉子節(jié)點(diǎn),再由葉子節(jié)點(diǎn),上溯到根節(jié)點(diǎn),對節(jié)點(diǎn)的參數(shù)進(jìn)行處理。針對之前獲取的該節(jié)點(diǎn)在此此發(fā)送過程中的表現(xiàn)(即從該節(jié)點(diǎn)中獲取的數(shù)據(jù)包的個(gè)數(shù)和字節(jié)數(shù)),計(jì)算其數(shù)據(jù)包發(fā)送的速率,若數(shù)據(jù)包發(fā)送的速率超過了該節(jié)點(diǎn)的rate 參數(shù)的限制,則認(rèn)為此節(jié)點(diǎn)屬于帶寬消耗量較高的節(jié)點(diǎn),為其預(yù)留帶寬,預(yù)留帶寬數(shù)量設(shè)置為其參數(shù)quantum,即tokens_reseved 字段設(shè)置為quantum,并且可以累加,并以此參數(shù)來增加節(jié)點(diǎn)的rate和Ceil參數(shù)。
3)在后續(xù)進(jìn)行使用情況的分析時(shí),首先保留tokens_reserved 字段不清除,從rate 和Ceil 參數(shù)中減去tokens_reserved 字段的值,即恢復(fù)初值。而且如果此時(shí)節(jié)點(diǎn)的數(shù)據(jù)包發(fā)送速率仍然高于rate 參數(shù)的限制,則在tokens_reserved 值的基礎(chǔ)上遞加quantum 參數(shù)的值;若此時(shí)節(jié)點(diǎn)的數(shù)據(jù)包發(fā)送速率小于rate 參數(shù)的限制,則將tokens_reserved 減去quantum的值,而非立即清0。
在64 位Ubuntu16.04LTS 系統(tǒng)下,在應(yīng)用層實(shí)現(xiàn)HTB 算法,模擬在內(nèi)核代碼中HTB 算法實(shí)現(xiàn)過程中所需要的所有數(shù)據(jù)結(jié)構(gòu)和函數(shù)調(diào)用,并在原HTB 算法的基礎(chǔ)上,實(shí)現(xiàn)HTB 改進(jìn)算法。讓兩個(gè)算法在相同的數(shù)據(jù)集上執(zhí)行,得到發(fā)送數(shù)據(jù)包所消耗的時(shí)間。
為了測試程序在不同帶寬下數(shù)據(jù)量大小不同情況下的性能,實(shí)驗(yàn)中設(shè)置了2000 個(gè)數(shù)據(jù)集。一共設(shè)置了12 種不同的帶寬,800KB,1200KB,1600KB,2000KB,2400KB,2800KB,3200KB,4800KB, 6400KB, 8000KB, 9600KB 以 及11200KB,每種帶寬下設(shè)置200種不同的數(shù)據(jù)量,以數(shù)據(jù)包的個(gè)數(shù)為單位,512 個(gè)數(shù)據(jù)包為步長,從512個(gè)數(shù)據(jù)包一直到102400 個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包的大小被隨機(jī)設(shè)置為500/600/800/1000/1200 五種值之一。
在應(yīng)用層環(huán)境中,仿真實(shí)現(xiàn)兩種算法,并在相同的數(shù)據(jù)集上運(yùn)行,得到發(fā)送數(shù)據(jù)包花費(fèi)的時(shí)間數(shù)據(jù)。
圖3 表示的是帶寬為11200KB 時(shí)的算法運(yùn)行時(shí)間的對比圖,每25 個(gè)數(shù)據(jù)為一組,取平均值,得到表1中的數(shù)據(jù)。表1中耗時(shí)改進(jìn)比率一欄表示為改進(jìn)前后耗時(shí)之差與改進(jìn)前耗時(shí)比值,用以表示算法的改進(jìn)效果。由此可以看到,當(dāng)數(shù)據(jù)包個(gè)數(shù)較少時(shí),可以看到改進(jìn)后的HTB 算法的改進(jìn)效果比較明顯,但隨著數(shù)據(jù)包個(gè)數(shù)的增多,改進(jìn)后的HTB 算法的效果迅速減小,但趨于穩(wěn)定,能夠有效降低數(shù)據(jù)包發(fā)送的時(shí)間延遲。
圖3 帶寬為11200KB時(shí)的數(shù)據(jù)包獲取時(shí)間對比圖
表1 帶寬為11200KB的實(shí)驗(yàn)用例中的數(shù)據(jù)
下面以45056個(gè)數(shù)據(jù)包為例,計(jì)算帶寬利用率。
在數(shù)據(jù)集中,45056 個(gè)數(shù)據(jù)包中的數(shù)據(jù)總量為36945920B,即36080KB,3602.56ms 間獲取了總量為36080KB 數(shù)據(jù),帶寬為11200KB,因此帶寬利用率為
由表1中數(shù)據(jù)可以看出,改進(jìn)后的HTB 算法能夠有效提高帶寬利用率,降低數(shù)據(jù)包發(fā)送的時(shí)間延遲。
雖然HTB 改進(jìn)算法能夠在一定程度上降低數(shù)據(jù)包發(fā)送的延遲,提高帶寬利用率,但是該算法的魯棒性較差,有較小的概率程序會(huì)運(yùn)行崩潰,且對復(fù)雜環(huán)境的適應(yīng)能力較弱。因此下一步的工作目標(biāo)就是針對算法在不同應(yīng)用場景下都能取得較好效果以及提高魯棒性的改進(jìn)。