蔣培成,陳 鳴,李 兵
(中國人民解放軍理工大學(xué)指揮信息系統(tǒng)學(xué)院,江蘇 南京 210007)
OpenFlow概念由美國斯坦福大學(xué)Nick McKeown教授首先提出,是斯坦福大學(xué)Clean Slate計(jì)劃資助的一個(gè)開放式協(xié)議標(biāo)準(zhǔn),后成為 GENI[1]計(jì)劃的子項(xiàng)目。OpenFlow能為校園網(wǎng)絡(luò)研究人員設(shè)計(jì)其創(chuàng)新網(wǎng)絡(luò)提供真實(shí)的試驗(yàn)平臺(tái),目前OpenFlow技術(shù)的研究進(jìn)展已經(jīng)引起學(xué)術(shù)界和產(chǎn)業(yè)界的廣泛關(guān)注,以開放軟件模式的控制平面替代了傳統(tǒng)的基于系統(tǒng)嵌入的控制平面,由軟件驅(qū)動(dòng)的中央控制結(jié)點(diǎn)來自動(dòng)化控制整個(gè)網(wǎng)絡(luò),簡(jiǎn)化了網(wǎng)絡(luò)的配置模式,增加了網(wǎng)絡(luò)控制權(quán)的開放性,在某種程度上符合未來互聯(lián)網(wǎng)的發(fā)展需求[2]。
OpenFlow交換機(jī)的實(shí)現(xiàn)方式主要有2種:一種是基于硬件的 OpenFlow交換機(jī),另一種是基于Linux的PC運(yùn)行OpenFlow軟件的交換機(jī)[3]。由于當(dāng)前OpenFlow標(biāo)準(zhǔn)仍在不斷完善,支持OpenFlow標(biāo)準(zhǔn)的硬件交換機(jī)較少,而且OpenFlow軟件交換機(jī)相對(duì)于硬件交換機(jī)成本更低、配置更為靈活,其性能基本可以滿足試驗(yàn)網(wǎng)絡(luò)以及中小型規(guī)模的Open-Flow網(wǎng)絡(luò)的要求,因此OpenFlow軟件交換機(jī)依然是當(dāng)前進(jìn)行OpenFlow研究以及構(gòu)建試驗(yàn)平臺(tái)與中小型OpenFlow網(wǎng)絡(luò)的首選。各種實(shí)現(xiàn)方式的Open-Flow交換機(jī)及其性能對(duì)比,如表1所示。
表1 各種OpenFlow交換機(jī)參數(shù)對(duì)比Tab.1 Many kind of OpenFlow switches parameters contrast
當(dāng)前,對(duì)于OpenFlow的研究主要集中在2方面:1)研究如何提高控制平面的規(guī)模、可靠性和可擴(kuò)展性,比如 DIFANE[4],Onix[5],DevoFlow[6]和 HyperFlow[7]等;2)研究如何提高數(shù)據(jù)平面的性能,比如文獻(xiàn)[8]設(shè)計(jì)實(shí)現(xiàn)了一種應(yīng)用于校園網(wǎng)高速路由的OpenFlow交換機(jī),文獻(xiàn)[9]提出了一種提高OpenFlow軟交換機(jī)轉(zhuǎn)發(fā)性能的架構(gòu),文獻(xiàn)[10]采用基于網(wǎng)絡(luò)處理器的硬件加速卡來實(shí)現(xiàn)OpenFlow交換機(jī),從而提高性能。對(duì)于OpenFlow交換機(jī)的性能測(cè)量分析,同樣是研究OpenFlow數(shù)據(jù)平面性能的一個(gè)重要方面,Bianco等在文獻(xiàn)[11]中對(duì)OpenFlow交換機(jī)的二層轉(zhuǎn)發(fā)和三層路由轉(zhuǎn)發(fā)的性能進(jìn)行了對(duì)比分析,結(jié)果證實(shí)了OpenFlow交換機(jī)高效的性能,但未對(duì)其劣勢(shì)進(jìn)行分析。
OpenFlow交換機(jī)是當(dāng)前研究管控分離架構(gòu)和部署中小型試驗(yàn)網(wǎng)絡(luò)的關(guān)鍵設(shè)備,本文對(duì)管控分離的架構(gòu)和OpenFlow交換機(jī)的工作原理進(jìn)行了分析,并對(duì)OpenFlow軟交換機(jī)的性能進(jìn)行了測(cè)量分析。OpenFlow軟交換機(jī)的軟件為開源軟件,我們開展未來互聯(lián)網(wǎng)研究時(shí),需要OpenFlow交換機(jī)來搭建未來互聯(lián)網(wǎng)試驗(yàn)環(huán)境,OpenFlow軟交換機(jī)因易于部署實(shí)施并能夠自行修改增加所需功能,往往是研究中的首選。盡管此時(shí)對(duì)交換機(jī)的性能要求都不會(huì)很高,然而采用OpenFlow軟交換機(jī)的性能對(duì)于部署試驗(yàn)網(wǎng)絡(luò)規(guī)模和評(píng)價(jià)新型應(yīng)用仍是一個(gè)無法忽略的重要因素。不過,目前相關(guān)研究的文獻(xiàn)很少。本文對(duì)OpenFlow1.0.0版本軟件交換機(jī)進(jìn)行了分析,并用網(wǎng)絡(luò)測(cè)量對(duì)軟交換機(jī)進(jìn)行了研究。本文研究對(duì)理解OpenFlow交換機(jī)的工作原理、性能參數(shù)及其部署OpenFlow網(wǎng)絡(luò)有指導(dǎo)作用。
OpenFlow交換機(jī)擁有一個(gè)或多個(gè)流表,流表中包含多個(gè)流表項(xiàng),每個(gè)流表項(xiàng)都包含匹配規(guī)則、操作和計(jì)數(shù)這3個(gè)部分。其中匹配規(guī)則由包括輸入端口、源介質(zhì)訪問控制(media access control,MAC)地址、目的MAC地址、以太網(wǎng)類型、虛擬局域網(wǎng)(virtual local area network,VLAN)號(hào)、VLAN 優(yōu)先級(jí)、源 IP地址、目的IP地址、協(xié)議類型、IPv4的差分服務(wù)標(biāo)識(shí)(differentiate services code point,DSCP)、源端口和目的端口在內(nèi)的用來匹配分組頭部信息的12元組組成,操作部分記錄著對(duì)分組的一系列處理動(dòng)作,計(jì)數(shù)部分是對(duì)該流表項(xiàng)所匹配過的分組數(shù)量及比特的統(tǒng)計(jì)。
當(dāng)一個(gè)分組到達(dá)OpenFlow交換機(jī)時(shí),該分組的頭部信息被提取出來并被用來與流表項(xiàng)進(jìn)行匹配,如果交換機(jī)的流表中不存在與該分組匹配的流表項(xiàng),則該分組的全部或部分被轉(zhuǎn)發(fā)到控制器,并由控制器來決定如何對(duì)該分組或者此類流進(jìn)行處理;如果該分組與交換機(jī)中的流表項(xiàng)匹配成功,OpenFlow交換機(jī)將會(huì)按照所匹配的流表項(xiàng)的操作字段的內(nèi)容對(duì)分組進(jìn)行轉(zhuǎn)發(fā)處理。OpenFlow交換機(jī)對(duì)于到達(dá)分組的處理流程如圖1所示。
圖1 OpenFlow交換機(jī)對(duì)到達(dá)分組的處理流程Fig.1 Process of OpenFlow switches to reach packet
OpenFlow交換機(jī)中主要存在2種類型的流表:線性表和哈希表。當(dāng)向OpenFlow交換機(jī)中插入一條流表項(xiàng)時(shí),如果流表項(xiàng)中用來匹配分組的12元組信息都含有一個(gè)確定的值,那么這條流表項(xiàng)將先插入到哈希表中,在哈希表滿的情況下才會(huì)向線性表中插入;然而,如果12元組中某些字段是以通配符的方式進(jìn)行提供時(shí),那么這條流表項(xiàng)將只能插入到線性表中。下面,就這2種表的工作原理進(jìn)行分析。
1.2.1 線性表
線性表是以鏈表的形式構(gòu)造的,當(dāng)查找時(shí)需要遍歷整個(gè)表,因此存在于這條鏈表上的流表項(xiàng)可以含有通配符,同時(shí)考慮遍歷所帶來的效率問題,線性表的長度一般不會(huì)太長。對(duì)線性表查找的時(shí)間復(fù)雜度為O(n)。
1.2.2 哈希表
由于在對(duì)哈希表進(jìn)行查找時(shí),需要對(duì)確切的分組的12元組信息進(jìn)行哈希運(yùn)算,因此存儲(chǔ)在哈希表中的流表項(xiàng)也必須含有確切的12元組信息。為了解決哈希表項(xiàng)碰撞問題,一般在流表中會(huì)存在一個(gè)以上的哈希表。對(duì)哈希表查找的時(shí)間復(fù)雜度為O(1)。
當(dāng)一個(gè)分組到達(dá)OpenFlow交換機(jī)時(shí),流表的查詢算法如下。
為了在網(wǎng)絡(luò)測(cè)試中產(chǎn)生逼真的網(wǎng)絡(luò)流量,我們使用思博倫公司的高性能流量發(fā)生器Spirent Test-Center 3.60來產(chǎn)生數(shù)據(jù)流,以滿足高速、逼真的試驗(yàn)數(shù)據(jù)流要求,OpenFlow交換機(jī)處于流量發(fā)生器的閉合環(huán)路中間并與控制器直接相連。進(jìn)行網(wǎng)絡(luò)測(cè)量的試驗(yàn)網(wǎng)絡(luò)的拓?fù)淙鐖D2所示。
圖2 測(cè)量平臺(tái)拓?fù)銯ig.2 Topology of Measurement platform
該測(cè)量環(huán)境中相關(guān)的設(shè)備的參數(shù)如表2所示。
試驗(yàn)采用的是基于Linux平臺(tái)下OpenFlow1.0.0版本的OpenFlow軟件交換機(jī),在該版本的交換機(jī)中存在1個(gè)線性表和2個(gè)哈希表,其中線性表的流表項(xiàng)容量為100,每個(gè)哈希表的流表項(xiàng)容量為64 K(即64 000)。在測(cè)量吞吐量的試驗(yàn)中,為了反映出OpenFlow交換機(jī)在最大壓力下的性能,OpenFlow交換機(jī)最大長度為100的線性流表和128 K(即128 000)的哈希流表在進(jìn)行吞吐量試驗(yàn)之前被全部填滿,從而也保證了分組到達(dá)OpenFlow交換機(jī)后會(huì)直接查詢流表并按照規(guī)則轉(zhuǎn)發(fā),而無需向NOX控制器請(qǐng)求。
表2 測(cè)量環(huán)境中相關(guān)設(shè)備的參數(shù)Tab.2 Related equipment parameters of Measurement environment
利用Spirent流量發(fā)生器自身雙CPU的特點(diǎn),試驗(yàn)中流量發(fā)生器同時(shí)在端口a和d上分別充當(dāng)服務(wù)端和客戶端;OpenFlow交換機(jī)在端口b和c上接收、轉(zhuǎn)發(fā)分組,通過端口e和線路C與控制器進(jìn)行交互;NOX控制器運(yùn)行一種測(cè)量組件Measure,該測(cè)量組件采用Python語言開發(fā),目的是測(cè)量OpenFlow交換機(jī)與控制器的交互情況,控制器在端口f上與OpenFlow交換機(jī)交互。通過對(duì)Spirent流量發(fā)生器進(jìn)行配置,使其產(chǎn)生的分組首部12元組信息能夠映射到OpenFlow交換機(jī)的128 K+100(即128 000+100)的流表項(xiàng)的匹配規(guī)則。同時(shí)Spirent流量發(fā)生器本身具有分組的實(shí)時(shí)發(fā)送速率、吞吐量和丟包率等性能參數(shù)的測(cè)量功能,因此試驗(yàn)中的部分參數(shù)可通過Spirent流量發(fā)生器獲得。
考慮到TCP和UDP的傳輸機(jī)制不同,我們分別對(duì)OpenFlow的TCP吞吐量和UDP吞吐量進(jìn)行了測(cè)量。
2.2.1 TCP 吞吐量
流量發(fā)生器在端口a上通過線路A向Open-Flow交換機(jī)的b端口發(fā)送分組長度為1 480 Byte的TCP報(bào)文,OpenFlow交換機(jī)在端口b上接收到TCP報(bào)文后會(huì)根據(jù)預(yù)先插入的流表項(xiàng)規(guī)則通過端口c和線路B向流量發(fā)生器的端口d轉(zhuǎn)發(fā)TCP報(bào)文段。共進(jìn)行了10次測(cè)量,每次測(cè)量持續(xù)60 s,測(cè)量結(jié)果如圖3所示。
圖3 OpenFlow交換機(jī)的TCP吞吐量Fig.3 TCP throughput of OpenFlow switch
圖3中的縱軸是TCP的吞吐量,橫軸是測(cè)量輪回。從圖3可見,測(cè)量得到OpenFlow交換機(jī)的TCP吞吐量維持在450 Mbit/s左右,最大吞吐量沒有超過500 Mbit/s。同時(shí)由于500 Mbit/s的速率遠(yuǎn)小于測(cè)量環(huán)境中其他設(shè)備的最大負(fù)載,因此可以得知,測(cè)量環(huán)境中的性能瓶頸在于OpenFlow交換機(jī)上,測(cè)量得到的數(shù)據(jù)是真實(shí)的TCP吞吐量。
2.2.2 UDP 吞吐量
測(cè)量UDP吞吐量的步驟同TCP,Spirent流量發(fā)生器向OpenFlow交換機(jī)發(fā)送UDP報(bào)文段,Open-Flow交換機(jī)根據(jù)流表項(xiàng)轉(zhuǎn)發(fā)UDP報(bào)文段。試驗(yàn)中,UDP的發(fā)送速率從100~800 Mbit/s變化,共進(jìn)行了12組試驗(yàn),每組試驗(yàn)持續(xù)60 s,測(cè)量OpenFlow交換機(jī)在每一組負(fù)載流量速率下的吞吐量和丟包率。此次測(cè)量結(jié)果如圖4所示。
圖4 不同負(fù)載流量下的UDP吞吐量和丟包率Fig.4 UDP throughput and packet loss rate under
通過圖4可見,當(dāng)UDP分組負(fù)載流量速率在500 Mbit/s以下時(shí),OpenFlow交換機(jī)的UDP吞吐量與負(fù)載流量速率幾乎相等,丟包率也非常小;當(dāng)UDP負(fù)載流量速率超過500 Mbit/s時(shí),OpenFlow交換機(jī)的UDP吞吐量維持在500 Mbit/s左右,丟包率迅速升高。
這是由于OpenFlow交換機(jī)查找流表并轉(zhuǎn)發(fā)UDP報(bào)文段的最大速率在500 Mbit/s左右,當(dāng)負(fù)載流量速率超過500 Mbit/s時(shí)會(huì)導(dǎo)致大量的UDP報(bào)文段在OpenFlow交換機(jī)的緩沖隊(duì)列中排隊(duì)并最終導(dǎo)致隊(duì)列溢出而被丟棄。
試驗(yàn)中,通過傳輸不同分組長度的UDP報(bào)文段來研究分組長度對(duì)OpenFlow交換機(jī)吞吐量的影響。由Spirent流量發(fā)生器產(chǎn)生速率520 Mbit/s的UDP報(bào)文段,該值為本試驗(yàn)中所采用的極限吞吐量,報(bào)文段長度在100—1 480 Byte變化。共進(jìn)行12組測(cè)量,每組測(cè)量持續(xù)60 s,測(cè)量OpenFlow交換機(jī)在每一組分組大小下的吞吐量和分組轉(zhuǎn)發(fā)率。測(cè)量結(jié)果如圖5所示。
圖5 不同分組長度下的吞吐量和轉(zhuǎn)發(fā)率Fig.5 Throughput and the forward rate of different packet length
通過圖5可以看出,隨著分組長度的增大,OpenFlow交換機(jī)的吞吐量逐漸增大;當(dāng)分組長度在200 Byte以下時(shí),OpenFlow交換機(jī)的吞吐量在50 Mbit/s以下;當(dāng)分組長度超過 1 100 Byte時(shí),OpenFlow交換機(jī)的吞吐量超過450 Mbit/s。在另一方面,OpenFlow交換機(jī)的分組轉(zhuǎn)發(fā)率始終維持在20 000分組/s的速率左右,波動(dòng)幅度不是很大。
出現(xiàn)上述結(jié)果是因?yàn)楫?dāng)負(fù)載流量不變時(shí),分組越小必然導(dǎo)致分組到達(dá)率越高,分組到達(dá)率越高,就會(huì)對(duì)OpenFlow交換機(jī)的CPU產(chǎn)生更大的負(fù)載。由于CPU的處理能力是一定的,從而導(dǎo)致了OpenFlow交換機(jī)的吞吐量下降的趨勢(shì)。然而,交換機(jī)對(duì)分組的轉(zhuǎn)發(fā)率卻能維持在一個(gè)穩(wěn)定值的左右。
OpenFlow交換機(jī)中控制平面與數(shù)據(jù)平面分離的機(jī)制決定了OpenFlow交換機(jī)與控制器之間存在著交換機(jī)狀態(tài)不確定的情況。因?yàn)樵贠penFlow交換機(jī)插入某個(gè)流表項(xiàng)之前,可能會(huì)有類似的分組到達(dá)OpenFlow交換機(jī),此時(shí),這些處于“傳輸中的(on the fly)”分組會(huì)以未知流的身份持續(xù)向控制器進(jìn)行轉(zhuǎn)發(fā)。如果控制器沒有一定的容錯(cuò)能力有可能會(huì)引起網(wǎng)絡(luò)故障,并且這些分組的數(shù)量較大時(shí)就會(huì)對(duì)控制器及網(wǎng)絡(luò)產(chǎn)生較大壓力,影響它們的工作效率。特別是因?yàn)閁DP沒有“3次握手”的建立連接過程,這導(dǎo)致了UDP在OpenFlow網(wǎng)絡(luò)中創(chuàng)建流表的過程的效率比TCP的相應(yīng)過程要低得多。例如,對(duì)于大流量的多媒體數(shù)據(jù)傳輸而言,過多的“傳輸中的”UDP報(bào)文可能會(huì)淹沒控制器。我們將對(duì)這個(gè)問題進(jìn)行研究。
在試驗(yàn)中,OpenFlow交換機(jī)中的流表不預(yù)先置入任何流表項(xiàng),因此當(dāng)某分組到達(dá)交換機(jī)后會(huì)向NOX控制器進(jìn)行轉(zhuǎn)發(fā)。NOX控制器利用Measure測(cè)量組件來處理OpenFlow交換機(jī)轉(zhuǎn)發(fā)來的分組,并按照轉(zhuǎn)發(fā)策略向OpenFlow交換機(jī)中插入流表項(xiàng),使該分組擁有相同12元組首部信息的分組向端口c轉(zhuǎn)發(fā)。
由Spirent流量發(fā)生器產(chǎn)生速率為520 Mbits/s的UDP報(bào)文,所產(chǎn)生的UDP報(bào)文的12元組頭部信息必須保持一致,分組長度在480—1 480 Byte變化,我們進(jìn)行11組測(cè)量,每組測(cè)量持續(xù)60 s,同時(shí)利用NOX控制器端的Measure測(cè)量組件對(duì)重復(fù)到達(dá)的相同的UDP報(bào)文進(jìn)行統(tǒng)計(jì)分析,得到“傳輸中的”UDP報(bào)文的數(shù)量。圖6顯示了試驗(yàn)統(tǒng)計(jì)結(jié)果。
通過圖6可以看出,隨著UDP分組長度的增大,“傳輸中的”UDP報(bào)文的數(shù)量逐漸降低;當(dāng)UDP分組長度小于1 180 Byte時(shí),“傳輸中的”UDP報(bào)文數(shù)量在100以上;當(dāng)UDP分組長度小于580 Byte時(shí),“傳輸中的”UDP報(bào)文數(shù)量在300以上。這些重復(fù)的“傳輸中的”報(bào)文會(huì)導(dǎo)致NOX控制器重復(fù)處理相同的報(bào)文,OpenFlow交換機(jī)中會(huì)重復(fù)插入該處理流表項(xiàng),給控制器和OpenFlow交換機(jī)帶來性能壓力。
圖6 不同分組長度下的中間時(shí)刻分組數(shù)量Fig.6 Packet number of middle time under different packet length
OpenFlow軟交換機(jī)是搭建中小型未來互聯(lián)網(wǎng)技術(shù)研究試驗(yàn)網(wǎng)絡(luò)的關(guān)鍵設(shè)備。本文對(duì)OpenFlow交換機(jī)的工作過程進(jìn)行了分析,并對(duì)OpenFlow軟交換機(jī)的性能進(jìn)行了測(cè)量分析。測(cè)量結(jié)果表明,無論對(duì)TCP流還是UDP流,OpenFlow軟交換機(jī)都具有良好的性能,能夠滿足搭建中小型試驗(yàn)網(wǎng)絡(luò)的要求;如果有大量的短分組,其吞吐量也會(huì)明顯下降;為高速率UDP流建立表項(xiàng)的過程,也會(huì)降低系統(tǒng)效率。本文工作對(duì)深入理解OpenFlow交換機(jī)的工作過程,以及利用OpenFlow軟交換機(jī)構(gòu)建OpenFlow網(wǎng)絡(luò)有指導(dǎo)作用。下一步,將研究1.1.0版本的OpenFlow軟交換機(jī)工作過程并測(cè)量其對(duì)性能的影響。
[1]ELLIOTT C.GENI:Opening up new classes of experiments in global networking[J].IEEE Internet Computing,2010,14(2):39-42.
[2]MCKEOWN N,ANDERSON T,BALAKRISHNAN H,et al.OpenFlow:Enabling Innovation in Campus Networks[C]//ACM.Proceeding of SIGCOMM.New York:ACM Press,2008:69-74.
[3]HELLER Brandon.OpenFlow Switch Specification 1.0.0[EB/OL].(2009-12-13)[2012-11-20].http://www.openflow.org/documents/openflow-spec-v1.0.0.pdf.
[4]YU M,REXFORD J,F(xiàn)REEDMAN MJ,et al.Scalable Flow-Based Networking with DIFANE[C]∥ACM.Proceeding of SIGCOMM.New York:ACM Press,2010:351-362.
[5]KOPONEN T,CASADO M,GUDE N,et al.Onix:A Distributed Control Platform for Large-scale Production Networks[C]//USENIX.Proceeding of Operating Systems Design and Implementation(OSDI).CA USA:USENIX ASSOCIATION BERKELEY,2010:1-14.
[6]MOGUL J,TOURRILHES J,YALAGANDULA P,et al.DevoFlow:Scaling Flow Management for High-Performance Networks[C]//ACM.Proceeding of SIGCOMM.New York:ACM Press,2011:254-265.
[7]TOOTOONCHIAN A,GANJALI Y.HyperFlow:A Distributed Control Plane for OpenFlow[C]//USENIX.Proceeding of INM/WREN,CA USA:USENIX ASSOCIATION BERKELEY,2010:21-34.
[8]ROSTAMI A,JUNGEL T,KOEPSER A,et al.ORAN:OpenFlow Routers for Academic Networks[C]//IEEE.Proceeding of HPSR.Belgrade:IEEE Press,2012:216-222.
[9]TANYINGYONG V,HIDELL M,SJODIN P.Improving PC-based OpenFlow Switching Performance[C]//ACM.Proceeding of ANCS.New York:ACM Press,2010:113-118.
[10]LUO Y,CASCON P,MURRAY E,et al.Accelerating OpenFlow Switching with Network Processors[C]//ACM.Proceeding of ANCS.New York:ACM Press,2009:70-71.
[11]BIANCO A,BIRKE R,GIRAUDO L,et al.OpenFlow Switching:Data Plane Performance[C]//IEEE.Proceeding of ICC.New York:IEEE Press,2010:1-5.