王巍振,張安琳,黃道穎,謝兆賢,陳 慧
(鄭州輕工業(yè)學院計算機與通信工程學院,鄭州 450000)
軟件定義網(wǎng)絡(luò)(Software-Defined Network,SDN)作為一種新型的網(wǎng)絡(luò)體系結(jié)構(gòu),引起了學術(shù)和工業(yè)界高度關(guān)注,其基本思想是將控制平面與數(shù)據(jù)平面分離。控制平面通過交換機集中控制數(shù)據(jù)包的轉(zhuǎn)發(fā)。2008年出現(xiàn)的OpenFlow[1]已被業(yè)界默認為控制平面和轉(zhuǎn)發(fā)平面之間的協(xié)議,OpenFlow通過Packer-in消息和Per-Port計數(shù)器,控制器可以定期輪詢交換機以獲取網(wǎng)絡(luò)流量信息,包括每流字節(jié)數(shù)、數(shù)量以及持續(xù)時間。利用OpenFlow這種特性可以定制測量策略,但通常會存在以下問題:如果對所有流進行細粒度的測量,這會對控制器和交換機帶來巨大的負擔。此外,由于數(shù)據(jù)中心的網(wǎng)絡(luò)流量存在許多對延遲敏感的老鼠流,頻繁的測量會使到達交換機的新流產(chǎn)生TCP超時,因此,細粒度的測量通常在數(shù)據(jù)中心中不可行[2]。其中的一個解決辦法是對網(wǎng)絡(luò)進行周期性測量,例如每隔一秒測量一次以減少控制器的負擔[3]。網(wǎng)絡(luò)通常具有突發(fā)性和波動性且在數(shù)據(jù)中心這種特點尤為明顯,周期性測量可能在網(wǎng)絡(luò)波動時無法準確地捕獲測量數(shù)據(jù)。
因此,為解決細粒度測量控制器負載較高,周期性測量不準確的問題,本文提出一種基于吞吐量變化的OpenFlow網(wǎng)絡(luò)自適應測量算法,該算法可根據(jù)網(wǎng)絡(luò)狀態(tài)自適應地調(diào)整測量周期,在網(wǎng)絡(luò)波動時,縮短測量周期,以獲得更為精確的測量指標,在網(wǎng)絡(luò)平穩(wěn)時,延長測量周期,來降低控制器的開銷。
網(wǎng)絡(luò)測量根據(jù)測量方式不同可以分為主動測量和被動測量。主動測量通常需要向網(wǎng)絡(luò)中注入探測包來監(jiān)測它們的行為,比如ping和iperf,但由于需要注入探測包,可能對測量結(jié)果產(chǎn)生影響;被動測量通常不會對網(wǎng)絡(luò)增加負載,但需要大量的前期部署和協(xié)議支持。通常來說,主動測量在獲取網(wǎng)絡(luò)性能指標應用上比被動測量更為普遍。
SDN架構(gòu)如圖1所示,主要包含3個部分,轉(zhuǎn)發(fā)層、控制層和應用層[4]。轉(zhuǎn)發(fā)層通常負責數(shù)據(jù)轉(zhuǎn)發(fā),處理和收集流的狀態(tài);控制層包含一系列控制器[5-6],用來集中控制網(wǎng)絡(luò);應用層包含一系列應用程序。在轉(zhuǎn)發(fā)層和控制層中間,目前使用最為廣泛的協(xié)議為OpenFlow協(xié)議。根據(jù)OpenFlow中(Request和Reply)的消息機制,可獲取流統(tǒng)計信息、端口統(tǒng)計信息及隊列信息。統(tǒng)計信息通常包含了字節(jié)數(shù)、數(shù)據(jù)包數(shù)和持續(xù)時間,通過這些信息,可在控制器上開發(fā)更為復雜的流量測量系統(tǒng)來監(jiān)控網(wǎng)絡(luò)。
圖1 SDN架構(gòu)圖
在基于 OpenFlow 的測量研究中,flowSense[7]利用Packet-in和Flow-Removed消息來評估流的鏈路利用率,但因其使用了定期推送方式犧牲了測量準確性;OpenSketch[8]提出了在 OpenFlow 中并行新協(xié)議,以高精度和低延遲支持各種測量任務,但需要增加新協(xié)議于現(xiàn)有網(wǎng)絡(luò),增加了網(wǎng)絡(luò)部署成本;文獻[9]提出了一種基于隊列測量的方法,利用QoS參數(shù)隊列來進行網(wǎng)絡(luò)測量,但該方法僅僅降低了網(wǎng)絡(luò)開銷,并不能適應網(wǎng)絡(luò)狀態(tài)變化;SDN-Mon[10]將測量與部分轉(zhuǎn)發(fā)表分離,把部分測量任務交給交換機,從而減少測量開銷;文獻[11]通過從交換機計數(shù)器中分析流量自相關(guān)的特性,利用隨機抽樣方法來完成細粒度測量同時減少測量的開銷。與現(xiàn)有測量方法不同,本文主要針對網(wǎng)絡(luò)的突發(fā)和波動使用的周期性測量方法進行改進。由于大多數(shù)基于OpenFlow的測量框架中,統(tǒng)計收集數(shù)據(jù)的精確度和測量開銷之間存在著長期的折中,如何在不同網(wǎng)絡(luò)狀態(tài)下保持測量精度,同時盡量減少控制器開銷是本文主要解決的問題。
利用周期性測量方法可以獲取相應的測量數(shù)據(jù),但設(shè)定測量周期較長時會降低測量準確性,測量周期較短會導致控制器負載過大。
借鑒于無線傳感器網(wǎng)絡(luò)中自適應調(diào)整來減少網(wǎng)絡(luò)開銷[12],本文在OpenFlow網(wǎng)絡(luò)周期性測量的基礎(chǔ)上提出了一種自適應測量算法,增加了網(wǎng)絡(luò)狀態(tài)判定和更改測量周期,當網(wǎng)絡(luò)流量突發(fā)和波動時縮短測量周期;當網(wǎng)絡(luò)平穩(wěn)時延長測量周期。其中重點包括兩個方面,第1點為如何判斷網(wǎng)絡(luò)為突發(fā)狀態(tài),第2點為探測周期如何調(diào)整,自適應測量模型流程如下頁圖2所示。
圖2 自適應測量模型
OpenFlow網(wǎng)絡(luò)中的流量的突發(fā)和波動通常伴隨著時延、丟包率和網(wǎng)絡(luò)實際傳輸速率的變化。由于OpenFlow網(wǎng)絡(luò)特性使得控制器可對同一條流進行分配不同的路徑,選擇時延來判定網(wǎng)絡(luò)突發(fā)性需要對多條路徑上交換機進行輪詢,并且多條路徑鏈路時延可能不一致,會使系統(tǒng)很難判定網(wǎng)絡(luò)是否處于突發(fā)和波動狀態(tài);使用丟包率來判定網(wǎng)絡(luò)突發(fā)也是不合適的,因為依據(jù)Benson等人的調(diào)查研究,大型網(wǎng)絡(luò)中的流量呈現(xiàn)明顯的不均勻分布[13],丟包率在核心層和邊緣層會呈現(xiàn)不一致性,這顯然會增加判定的復雜性,且高速網(wǎng)絡(luò)中丟包概率非常小。
由于核心交換機通常帶寬利用率都在80%以上,即使網(wǎng)絡(luò)出現(xiàn)突發(fā)和波動也很難通過吞吐量變化來判斷。因此,本文選擇測量路徑上最后一個邊緣交換機的吞吐量變化來確定網(wǎng)絡(luò)突發(fā)和網(wǎng)絡(luò)波動。因為邊緣交換機處理的流量要比核心交換機少,在邊緣交換機上進行頻繁的測量對網(wǎng)絡(luò)影響較小,而且邊緣交換機上的利用率通常不穩(wěn)定,網(wǎng)絡(luò)的突發(fā)和波動通過查詢端口計數(shù)器很容易計算,因此,選擇吞吐量變化更有利于對后續(xù)自適應測量的條件進行判定。
這里吞吐量用Tp表示,吞吐量的計算公式如式(1)所示:
其中,Δbyte是時間間隔內(nèi)測得字節(jié)數(shù)的變化值,Δt表示兩次測量時間間隔。
假設(shè)進行了N次測量,測量結(jié)果為隊列為{Tp1,Tp2,…,Tpn},對于第 n 次探測到的結(jié)果為 Tpn,則預測下次吞吐量的變化的絕對值為 Tpn+1-Tpn。由于Tpn+1是一個未知的值,但由于網(wǎng)絡(luò)流量突發(fā)時,測量周期會顯著降低,可以 Tpn-Tpn-1來近似,后續(xù)的實驗也表明該近似值能夠很好地追蹤吞吐量變化。吞吐量變化的絕對值用ΔTp來表示。
給定參數(shù)α,當ΔTp滿足ΔTp<α時,表示網(wǎng)絡(luò)較為平穩(wěn),當ΔTp滿足公式ΔTp≥α時,網(wǎng)絡(luò)存在流量突發(fā)。其中,α表示給定的可變化參數(shù),這里可以事先規(guī)定一個精度來確定α的取值,但由于網(wǎng)絡(luò)中可能存在多種突發(fā)流量,給定一個確定的精度不能夠準確地反映網(wǎng)絡(luò)的狀態(tài)。本文利用吞吐量變化量其數(shù)量級相同的均值分散程度來表示該變化參數(shù),如式(2)所示。
其中,Tpi為第i次測得的吞吐量,Tp為前面n次測得的吞吐量平均值。由于α的可變性,可以更好地跟蹤和判斷突發(fā)流量。這里注意到隨著n值增大時,計算α的復雜度也逐漸增加。為解決這個問題,通過隊列對n進行了限定,當n=128時,將最新的樣本直接覆蓋舊的樣本,舊的樣本將被移出隊列,以保證在一定時間段內(nèi)取值的穩(wěn)定;同時,為了更為簡便地計算,當n=128時,不需要每次計算樣本偏差的總和,只需要計算出的上次樣本總和加上此次測量樣本減去隊列中最舊的樣本即可完成工作。
對吞吐量變化進行判斷后需要對測量周期進行調(diào)整。整體策略是當網(wǎng)絡(luò)流量存在突發(fā)和波動時縮短測量周期,網(wǎng)絡(luò)較平穩(wěn)時延長測量周期。
測量周期實時性的調(diào)整將會對網(wǎng)絡(luò)保持較小的測量誤差和網(wǎng)絡(luò)負載均衡有著關(guān)鍵性作用,自適應測量可以快速適應網(wǎng)絡(luò)的變化。假設(shè)當前的測量周期為 TC,引入?yún)?shù) γ,(γ1、γ2∈γ)。當網(wǎng)絡(luò)流量突發(fā)波動較大時,測量周期調(diào)整為TC+1=TC/γ1,以提高測量精度;當網(wǎng)絡(luò)較平穩(wěn)時,測量周期調(diào)整為TC+1=TC* γ2,降低測量負載。
值得注意的是,γ1、γ2的取值可對采樣策略進行較大的影響,當一定時間間隔內(nèi)ΔTp的值一直保持一個較大值時,測量周期可能趨于0。相反當周期內(nèi)ΔTp的值一直保持一個平穩(wěn)時,測量周期可能增加到無窮大。這需要給定兩個限定的邊界值TMAX和TMIN。當求得的測量周期大于TMAX時,則認為該取值是不可取的,強制把TMAX作為下次的測量周期,當求得的測量周期小于TMIN時,強制把TMIN作為下次的測量周期。
通過對上兩節(jié)關(guān)鍵問題的整合,自適應測量算法描述如下:1)首先測量周期初始化,確定流為活動流后向指定邊緣交換機發(fā)送FlowStatsRequest請求,并收集端口信息;2)把計算出的吞吐量樣本存入隊列Q,計算α的值;3)通過相鄰兩次測得的吞吐量值計算出吞吐量的變化值,即ΔTp=Tpn-Tpn-1;4)比較ΔTp和α的值,當ΔTp<α時,調(diào)整測量周期 TC+1=min(TC*γ2,TMAX),當 ΔTp≥α 時,調(diào)整測量周期 TC+1=max(TC/γ1,TMIN);5)輸出 TC+1,以TC+1作為下一個測量周期。
在上述算法描述中,γ1、γ2、TMIN和 TMAX都是可變的參數(shù),可自行設(shè)置,在下節(jié)實驗中對參數(shù)取值進行了分析。
實驗所使用網(wǎng)絡(luò)拓撲由4臺交換機、1臺控制器、1臺服務器和1臺客戶機組成。如圖3所示。
圖3 實驗拓撲圖
測量框架部署在由POX控制器和mininet[14]組成的網(wǎng)絡(luò)上。實驗所用的操作系統(tǒng)為Ubuntu 14.04、實驗平臺為 Mininet 2.21、Open vSwitch 1.4.3、POX controller、OpenFlow 1.0。交換機(Open vSwitch)全部連接到支持OpenFlow協(xié)議的POX控制器上,交換機使用OpenFlow 1.0協(xié)議進行配置,帶寬限制在10 Mb/s。查詢s4的交換機計數(shù)器,因為s4是測量路徑上的最后一個交換機。
發(fā)送穩(wěn)定流量使用的工具為iperf,發(fā)送的包為TCP包,TCP協(xié)議是可靠的傳輸層協(xié)議,TCP數(shù)據(jù)包可以提高估計的精度。為了模擬網(wǎng)絡(luò)突發(fā),使用視頻流來模擬網(wǎng)絡(luò)突發(fā),視頻流所需的瞬時寬帶在1 Mb/s到15 Mb/s之間變化。
本文設(shè)置測量周期最大間隔時間為5 s,最小間隔時間為0.1 s,因為實驗設(shè)備有限,實驗中若測量周期特別小,可能導致控制器負載過大。周期性測量的時間間隔為1 s。為了使測量周期有著明顯的變化,使用乘半或倍增的周期調(diào)整策略,參數(shù)和的取值都被設(shè)定為2??刂破鏖_銷的大小可以通過控制器發(fā)送的FlowStatsRequest消息數(shù)量來計算。
圖4顯示了周期性測量和自適應測量測得的吞吐量。吞吐量計算方式為測得的交換機1和交換機4吞吐量之和除以2來估計整個網(wǎng)絡(luò)的吞吐量,周期性測量為固定的時間1 s,自適應測量參數(shù)如前文所述。
圖4 吞吐量變化擬合圖
由圖4可以看出,周期性測量和自適應測量吞吐量隨時間的擬合圖大致相似,自適應測量比周期性測量擁有更高的波峰,尤其在40 s和50 s左右時,測得的吞吐量上升幅度大,這表明在網(wǎng)絡(luò)存在突發(fā)和波動時,自適應測量通常比周期性測量捕獲流量的能力更好。
圖5 49 s~51 s吞吐量細節(jié)圖
圖5顯示了49 s到51 s左右的細節(jié)散點圖,在這2 s內(nèi)周期性測量方案僅測量了3次,而使用自適應測量方案測量次數(shù)在8次。根據(jù)文獻[15]表明,流量突發(fā)通常發(fā)生在1 s內(nèi),周期性測量的吞吐量僅僅在50 s到51 s之間有輕微的上升,并未捕獲到2 s內(nèi)流量突發(fā)狀態(tài)。同時在49.3 s左右,自適應測量測得吞吐量大概為11.3*105B/s,而周期性測量測得的吞吐量只有在49 s的7.6*105B/s,和50 s的9.8*105B/s,在1 s內(nèi)并未準確捕獲到突發(fā)流量。表明自適應測量能夠在流量突發(fā)時,能夠準確捕獲吞吐量的準確值,比周期性測量擁有更高的精度。
圖6 Request請求對比圖
圖6顯示了網(wǎng)絡(luò)平穩(wěn)狀態(tài)下分別通過周期輪詢和使用自適應測量請求個數(shù)??刂破骺梢酝ㄟ^發(fā)送FlowStatsRequest消息定期輪詢交換機,交換機同時發(fā)送FlowStatsReply消息到控制器,通過獲取Request請求消息個數(shù)來評估控制器負載。實驗表明在測量周期的前30 s由于幾乎流量都是未在交換機內(nèi)具有流表項的新流,請求前期急速增長,隨著時間的推移,在90 s時控制器負載達到穩(wěn)定的狀態(tài),這表明大量的時間有助于網(wǎng)絡(luò)負載平穩(wěn),降低波動。在網(wǎng)絡(luò)狀態(tài)平穩(wěn)時控制器使用自適應測量的負載比周期測量方式降低近25%。
周期性測量是目前OpenFlow網(wǎng)絡(luò)常用的測量方式,但周期性測量無法自適應網(wǎng)絡(luò)狀態(tài)變化,在網(wǎng)絡(luò)突發(fā)時無法準確捕獲流量,在網(wǎng)絡(luò)平穩(wěn)時增加控制器負擔。
本文提出基于吞吐量變化的自適應測量算法可以實時調(diào)整測量周期,在網(wǎng)絡(luò)突發(fā)時縮短測量周期來提高精度,在網(wǎng)絡(luò)平穩(wěn)時延長測量周期來降低負載,同時自適應測量還在網(wǎng)絡(luò)狀態(tài)穩(wěn)定時可以降低測量開銷??傮w上講,由于網(wǎng)絡(luò)通常保持在一個平穩(wěn)的狀態(tài),而網(wǎng)絡(luò)突發(fā)持續(xù)時間在1 s內(nèi),通常控制器負載會在瞬間提高,提高精度需要以增大負載為代價,為了局部測量精度產(chǎn)生的代價本文認為是合理的。網(wǎng)絡(luò)測量的目的一是為了獲取準確的網(wǎng)絡(luò)狀態(tài),二是為了流量工程提供支撐。流量工程通常采取“抓大放小”思想,網(wǎng)絡(luò)突發(fā)流量大多是因為出現(xiàn)了大象流,提高測量精度也有助于識別網(wǎng)絡(luò)中的大象流,為后續(xù)的流量工程作出貢獻。