?

基于ARMA模型預測的交換機流表更新算法

2020-04-07 10:48夏鴻斌
計算機工程與應用 2020年7期
關鍵詞:表項流表數據流

劉 釗,夏鴻斌,2

1江南大學 數字媒體學院,江蘇 無錫214122

2江南大學 江蘇省媒體設計與軟件技術重點實驗室,江蘇 無錫214122

1 引言

隨著新型網絡技術的不斷涌現,網絡流量的增長也變得十分迅速,不同的網絡應用對于網絡資源的需求也變得越來越高。傳統網絡體系結構由于自身結構的僵化[1]越來越不能滿足用戶和業務的需求。傳統網絡架構將轉發平面和控制平面[2]緊密耦合在獨立的設備中,很難對網絡進行全局把控,增加了部署新型網絡應用的難度。下一代可編程的網絡架構軟件定義網絡(Software-Defined Networking,SDN)[3]應運而生,它通過將傳統網絡中的數據平面和控制平面解耦,將網絡邏輯與網絡設備分離開來,降低了網絡的復雜性和組網成本。SDN架構以簡單、可編程的方式控制網絡,它使得分布式的數據平面由一個集中控制的平面來管理。圖1 給出了SDN網絡體系結構與傳統網絡體系結構的分層視圖。

圖1 (a) SDN架構網絡體系結構

圖1 (b) 傳統網絡體系架構

在SDN 網絡體系中,控制器通過OpenFlow[4]協議中的控制信道,對其管理域內的所有交換機進行配置。SDN 交換機將信息保存到本地的流表中。在進行數據轉發的過程中,交換機根據其本地流表中的流表項對數據包進行匹配,并根據該流表項中的動作對數據包進行轉發,而未找到對應的流表項的數據包將會被交換機轉發給控制器??刂破鞲鶕D發來的數據包生成新的轉發規則并下發給交換機,同時對交換機中的流表進行更新。在實際的應用部署中,流表一般存儲在交換機的三態內容尋址存儲器(Ternary Content Addressable Memory,TCAM)[5]中。由于TCAM的高成本與高能耗,其所能存儲的流表項數量也是十分有限的。研究表明[6-7],在SDN 數據中心中,90%的數據流為老鼠流,而10%的大象流卻傳輸了超過90%的字節,而處理這些老鼠流的流表項大量的占據了交換機的流表空間。由于對這些使用頻率較低的流表項的更新不及時,導致了交換機中流表的匹配率不能滿足實際的需求[8],流表資源不能被充分利用。與此同時,隨著網絡規模的不斷擴大,控制器也不可避免地暴露出處理能力有限的問題[9]。流表匹配率過低以及控制器端負載過重嚴重降低了SDN系統的整體性能。

2 相關工作

為了解決上述問題,相關學者展開了很多研究。文獻[10]提出在SDN中部署權威交換機,并將一部分流表項存儲在權威交換機中,并使其行使部分控制器的功能。當一條新流到達普通交換機時,由權威交換機直接向普通交換機添加相應的轉發規則。這樣的設計使得原本需要在控制器處理的大部分數據流,在權威交換機處即可得到解決,有效減輕了控制器的負擔。但是這種做法并不符合當前OpenFlow 協議的規范,需要對當前SDN 網絡模型進行大規模修改才能實現。文獻[11]提出將流表的更新方式與排隊系統進行類比,將流表模型轉化為排隊模型,并通過排隊論分析了hard_timeout對阻塞概率與流截斷次數的影響。該方法通過調整timeout 值有效提高了流表的匹配率,但對控制器造成的負擔較重。文獻[12]提出了一種OpenFlow 交換機流表自動控制機制,用于解決在大數據流下交換機流表更新不及時造成的流表資源不足的問題。但是該方案所提出的對流表項停滯時間的優化處理仍然是靜態優化,不能滿足交換機在真實網絡環境下的需求。文獻[13]和[14]提出了基于新增流表項數量預測并動態調整流表中流表項空閑超時時間的方法。在這兩種方法中,控制器通過分析每次的新增流表項數量,預測下一個取樣周期內新增加的流表項數量,并且根據當前流表空間的使用情況動態調整流表項超時時間。其中,文獻[13]使用AR 模型對下一個取樣周期內新增的流表項進行預測,文獻[14]使用的預測算法是基于二次平均移動的。他們的方法很好地克服了靜態優化的缺點,提高了流表資源的使用效率,但在調整流表項停滯超時時間的過程中,未能考慮每一條流表項自身的特點,沒有根據每條流表項的使用頻率做出調整,因此具有進一步的改進空間。文獻[15]提出了一種基于LRU 的改進型流表更新算法。他們將流表中的空閑空間作為一個緩存區,用于存放過期的流表項,并對每一條過期流表項進行計時。當有到達交換機的數據包與緩存區中過期的流表項相匹配時,該流表項被重新激活。在緩存區中存在時間最長的流表項在流表空間不足時將被優先刪除。這種方法的優點在于可以使SDN交換機盡可能多的保存使用頻率高的流表項。但在網絡高峰期時,SDN交換機的流表并沒有太多空閑空間可以被用作緩存區,其所能存儲的流表項太少也就失去了意義。

針對上述問題,本文提出了一種基于ARMA 模型預測的流表更新算法。算法通過收集每個單位時間內新增加的流表項數量,預測下一個時刻的新增流表項數量,并根據預測值提前刪除一定數量的最近一段時間內使用頻率較低的流表項,為即將到來的數據流預留出足夠的流表空間。算法在提高流表匹配率的同時也減少了與控制器的交互次數,有效減輕了控制器的負擔。

算法框架如圖2所示。

圖2 算法框架

3 流表更新的一般方法

OpenFlow 標準協議通常采用基于先進先出(First In First Out,FIFO)的、基于隨機(Random)的、基于最少使用(Least Recently Used,LRU)的、基于最不經常使用(Least Frequently Used,LFU)的更新算法對流表資源進行管理。在交換機流表空間不足時,更新算法通過控制器主動地向下層的交換機發送消息來刪除舊流表項。其中FIFO 置換算法和Random 置換算法的區別很小,在對流表進行更新的過程中二者都有很大的隨機性。所以本文下面將對FIFO、LRU、LFU等流表更新算法進行闡述。

3.1 基于先進先出的置換算法

基于先進先出的(FIFO)的流表更新算法因為實現過程簡單,更新效率相對較高,因此經常將該算法作為流表的更新算法。該算法的核心思想為:當流表空間不足時,總是優先選擇在流表中存在時間最久的流表項進行刪除,即最先在交換機中安裝的流表項將被最先刪除。交換機流表中的Duration_sec字段記錄了每條流表項在交換機中存在的時間,該值越長說明該流表項越早被安裝。實現FIFO算法的偽代碼描述如下。

算法1 基于先進先出的(FIFO)置換算法FIFO_FlowEntryReplacement

輸入:數據流Flows={p0,p1,…,pn}

輸出:流表FlowTable

FIFO_FlowEntryReplacement()

{for ?pi∈Flows do

{//將當前數據流pi的數據包封裝在Packet_in 消息中發送給控制器

Packet_in_message ←sendPacket_in(pi)

//控制器提取流表項信息

FlowEntry ←getFlowEntry(Packet_in_message)

//獲取交換機當前流表

FlowTable ←getFlowTable()

If(FlowTable is not full):

//控制器發送Flow_mod消息給交換機安裝流表項

Flowtable.add(FlowEntry)←sendFlow_mod(FlowEntry)

else:{//尋找交換機中存在時間最長流表項進行刪除

deleteEntry ←findLongestFlow(Flowtable)

//控制器發送Flow_mod消息給交換機刪除流表項

Flowtable.delete ←sendFlow_mod(deleteEntry)

Flowtable.add(FlowEntry)←sendFlow_mod(FlowEntry)

}

//控制器向交換機發送Packet_out 消息處理Packet_in 消息中封裝的數據包

FlowTable.foward ←sendPacket_out(Packet_in_message)

}

}

return FlowTable;

}

在算法1 中,函數findLongestDuration 優先尋找當前流表中Duration_sec 值最大的流表項進行刪除,這可能導致一些使用頻率較高的流表項被頻繁刪除,降低了流表的匹配率。此外FIFO算法在對流表進行更新時的隨機性較大,對于數據傳輸時間不同的數據包,不能滿足其對于流表更新算法的需求。

3.2 基于近期最少使用的置換算法

基于近期最少使用(LRU)的流表更新算法根據近期數據流的匹配情況對當前交換機內的流表項進行更新,更加符合真實的數據流環境。一般的LRU 算法根據每條流表項匹配數據包的時間,找到最長時間沒有數據包與其匹配的流表項作為近期最少使用的流表項,并將其優先刪除。流表中的idle_timeout值可用于記錄每條流表項最后匹配數據包的時間。根據OpenFlow協議規范,每條流表項的idle_timeout值隨時間遞減,當該條流表項有匹配的數據包到達時,其對應的idle_timeout值將被重置。對于LRU 算法而言,idle_timeout 值最小的流表項即為最近最長時間沒有處理數據包的流表項,應優先被刪除。實現LRU算法的偽代碼描述如下。

算法2 基于近期最少使用(LRU)置換算法LRU_FlowEntryReplacement

輸入:數據流Flows={p0,p1,…,pn}

輸出:流表Flowtable

LRU_FlowEntryReplacement()

{for ?pi∈Flows do

{//將當前數據流pi的數據包封裝在Packet_in 消息中發送給控制器

Packet_in_message ←sendPacket_in(pi)

//控制器提取流表項信息

FlowEntry ←getFlowEntry(Packet_in_message)

//獲取當前交換機的流表

FlowTable ←getFlowtable()

If(FlowTable is not full):

//控制器發送Flow_mod 消息給交換機安裝流表項并設置idle_timeout值

Flowtable.add(FlowEntry,idle_timeout)←sendFlow_mod(FlowEntry,idle_timeout)

else:

{//尋找當前交換機中最少流表項進行刪除

deleteEntry ←findleastUsedFlow(Flowtable)

//控制器發送Flow_mod消息給交換機刪除流表項

Flowtable.delete ←sendFlow_mod(deleteEntry)

Flowtable.add(FlowEntry,idle_timeout)←sendFlow_mod

(FlowEntry,idle_timeout)

}

//控制器向交換機發送Packet_out 消息處理Packet_in 消息中封裝的數據包

FlowTable.foward ←sendPacket_out(Packet_in_message)

}

}

return FlowTable;

}

在算法2中,idle_timeout值作為記錄流表項匹配數據包的最后時間,所以將其設置為一個相對長的固定值。當流表空間已滿時,函數findLeastUsedFlow在當前流表中尋找idle_timeout值最小的流表項并將其優先刪除。LRU置換算法能夠避免FIFO算法刪除使用高頻率使用流表項的缺點,但LRU 算法也會導致一些使用頻率較高,數據包時間間隔較長的數據流的流表項被頻繁刪除。

3.3 基于最不經常使用的置換算法

基于最不經常使用(LFU)的流表更新算法在流表空間不足時,根據每條流表項歷史訪問次數,優先刪除匹配數據包數量最少的流表項。流表中的匹配計數器可用于記錄每條流表項所匹配過的數據包數量。根據OpenFlow協議規范,當流表項有匹配的數據包到達時,其對應的匹配計數器就會自動加一。對于LFU 流表更新算法而言,當前流表中匹配過數據包數量最少的流表項即為使用頻率最低的流表項,應優先被刪除。LRU算法的偽代碼描述如下。

算法3 基于最不經常使用的(LFU)置換算法LFU_FlowEntryReplacement

輸入:數據流Flows={p0,p1,…,pn}

輸出:流表Flowtable

LFU_FlowEntryReplacement()

{for ?pi∈Flows do

{if ??entry ∈FlowTable is matched

{//將當前數據流pi的數據包封裝在Packet_in 消息中發送給控制器

Packet_in_message ←sendPacket_in(pi)

//控制器提取流表項信息

FlowEntry ←getFlowEntry(Packet_in_message)

//獲取交換機當前流表

FlowTable ←getFlowTable()

If(FlowTable is not full):

//控制器發送Flow_mod消息給交換機安裝流表項

Flowtable.add(FlowEntry)←sendFlow_mod(FlowEntry)

else:{//尋找當前流表中使用頻率最低的流表項進行刪除

deleteEntry ←findLeastestCountFlow(Flowtable)

//控制器發送Flow_mod消息給交換機刪除流表項

Flowtable.delete ←sendFlow_mod(deleteEntry)

Flowtable.add(FlowEntry)←sendFlow_mod(FlowEntry)

}

//控制器向交換機發送Packet_out 消息處理Packet_in 消息中封裝的數據包

FlowTable.foward ←sendPacket_out(Packet_in_message)

}

}

return FlowTable;

}

在算法3 中,函數findLeastedCountFlow 在流表空間不足時尋找當前流表中匹配計數器最小的流表項進行刪除。LFU 相對于FIFO 與LRU 算法可以清除更多的使用頻率較低的流表項。但與FIFO 和LRU 算法相同,LFU算法只有在當前流表空間不足時才對當前流表資源進行管理,不能提前為交換機留出足夠的流表空間容納新增流表項。

4 基于ARMA模型預測的流表更新算法

在網絡流量的高峰期,現有的一般流表更新算法不能很好的解決流表資源不足以及控制器負擔過重的問題。為了解決上述問題,本文提出了一種新的P-LRU流表更新算法(Promoted Least Recently Used,P-LRU)。該算法收集每個取樣周期內新增的流表項數量作為歷史數據,使用自回歸移動平均模型(ARMA模型)[16]預測下一個取樣周期內新增加的流表項數量。并根據當前流表空間的使用情況動態清除使用頻率低的流表項。本文算法不僅使交換機的流表擁有了足夠的空閑空間容納新增流表項,并且在增加了流表的匹配率的同時,減少了交換機與控制器間交互的次數,有效降低了控制器端的負擔。

4.1 基于ARMA模型的數據分析

自回歸移動平均模型(ARMA 模型)是一種常見的用于短期預測的時間序列模型,由自回歸模型與移動平均模型兩部分組成。文獻[17]使得ARMA 模型擁有一套完整、結構化的建模方法,以及堅實的理論基礎和統計學上的完善性。

4.1.1 ARMA模型表述

基于ARMA模型的新增流表項數量預測的基本思想為:將每個取樣周期內增加的流表項數目隨著時間推移而形成一個隨機時間序列。ARMA 模型認為序列中第t個時刻的數值不僅與前p 個時間序列的數值有關,而且與前q 個進入系統的隨機擾動有關,并由此來預測下一個時刻的數值。其中作為預測對象的Xt受到前P個時間序列數值的影響,其自回歸過程如下式:

式中,φ1,φ2,…,φp為自回歸系數,{Xt}為新增流表項數量所形成的時間序列數值,et為誤差項。

誤差項在不同時期具有依存關系,其移動平均過程如下式表示:

式中,θ1,θ2,…,θq為移動平均系數,{αt}是與{Xt}獨立共同分布的白噪聲。

由此,新增流表項數量預測ARMA 模型可以表述為:

將該模型記作ARMA(p,q)。其中p 為自回歸階數,q 為移動平均階數。

4.1.2 預測步驟

基于ARMA模型的新增流表項預測按照以下步驟進行。

(1)數據預處理和平穩性檢驗

首先獲取新增流表項數目的時間序列,可表示為:{Xt}={X1,X2,…,Xk}然后,將現有的時間序列進行零均值化處理,得到零均值化后的序列,其中為的平均值。接著,計算自相關函數與偏自相關函數:

(2)建立模型,參數估計

接下來,根據的偏相關函數和自相關函數確定ARMA(p,q)模型的階數p,q。由于ARMA 模型在很多領域的廣泛使用,已經出現了很多相關的科學計算包,例如Python 的StatsModels 等。通過調用相關科學計算包中的工具函數,對ARMA(p,q)模型進行擬合,并結合最小信息準則(AIC),計算不同的(p,q)組合下模型的AIC 值,選擇使得AIC 值最小的階數,將其作為ARMA(p,q)模型的最佳階數。

確定最佳階數(p,q)組合的同時,使用最小二乘估計法對模型中剩余未知參數進行計算,得到t+1 時刻的新增流表項數量的預測關系式:

(3)進行預測

最后,運用預測關系式對下一取樣周期的新增流表項數量預測,并輸出預測結果Nnew。

4.2 清除流表項數目分析

在交換機轉發數據包的過程中,流表空間的大小、控制器處理信息的能力的不足是制約交換機轉發能力的瓶頸。因此在流表空間一定的情況下,流表項的處理就成為了關鍵。如圖3所示,流表空間由已在交換機中存在流表項和空閑空間構成。每條流表項包含匹配域、動作、在交換機中的存在時間、超時時間等信息。理論上流表的空閑空間必須保持一定且合適的數量才能使系統發揮最佳的性能。

圖3 流表空間

假設取樣周期T 時流表空間如圖3(a)所示,由此圖可知:

其中,Nmax是流表最多可以容納的流表項數目,Nflow是流表中已經存在的流表項的數目,Nempty是流表的空閑空間。通過對近期歷史數據的分析,預測下一個取樣周期的新增流表項數目,如果預測值較大,表明流表可能需要應對在下一取樣周期中產生大量的流表項的情況,此時流表應該保留較大的空閑空間。如果預測值較小,表明在下一個取樣周期產生的流表項較少,需要的空閑空間較少,此時可以保留更多的使用高頻率的流表項以減少控制器與交換機之間的交互次數。假設N′flow為取樣周期T+1 時在上個周期T 時就已經存在的流表項,Nnew為流表中新增的流表項,T+1 時的流表空間如圖3(b)所示。

由式(7)和式(8)可知,若Nnew>Nempty則需要清除流表中的部分已經存在的流表項,為下一個周期中新增的流表項預留空間。此時需要從當前流表中清除的流表項數目:

4.3 流表優化算法(P-LRU)

本文算法通過調用基于ARMA模型的預測算法對收集的歷史數據進行分析,估計下一個取樣周期內可能新增加的流表項數目,并且根據當前流表空間使用情況計算出需要清除的流表項數目。最后在交換機中提前清除一定數目的使用頻率較低的流表項,使交換機流表有足夠的空間容納在下一個取樣周期內產生的流表項。與一般的LRU算法根據處理數據包的最后時間尋找優先刪除的流表項不同,函數FindLeastPacketCount在當前流表中尋找在上一個取樣周期中處理數據包數量最少的流表項作為優先刪除的流表項。當新增流表項數量遠大于預測結果時,調用一般LRU 算法對部分新增流表項進行置換,防止流表項溢出。P-LRU算法的具體偽代碼描述如下。

輸入:數據流Fl ows={p0,p1,…,pn},交換機收集到的新增流條目歷史數據集dataold

輸出:調整后的流表FlowTable

FlowEntryReplacement_PLRU()

{for ?pi∈dataFlow do

{if(intervalTime ≤T)://每T 秒清除一次使用頻率低的流表項

{//調用預測算法對下一個周期內新增流條目進行預測,得到預測值

Nnew←UseARMA(dataold);

//獲取當前交換機流表

FlowTable ←getFlowtable()

//得到當前交換機空閑流表數目

Nempty←getFreeEntryNum(FlowTable);

//計算出要清除的流表項數目Ndel

Ndel=Nnew-Nempty

//清除Ndel條流表項

While(Ndel>0)

{

deleteEntry ←FindLeastPacketCount(Flowtable);

//控制器發送Flow_mod消息給交換機刪除流表項

Flowtable.delete ←sendFlow_mod(deleteEntry);

Ndel--;

}

//更新歷史數據集

dataold ←update(dataold)

}

}

//若流表溢出則調用一般LRU算法更新流表

FlowTable ←LRU_FlowEntryReplacement(pi)

}

Return FlowTable;

}

5 模擬實驗

為了驗證算法的性能,本文使用真實的數據中心流量作為測試數據,該數據來源于文獻[7]的校園數據中心所獲得的數據集。該數據中心擁有500 臺服務器以及22 臺交換機,其數據集包含了E-mail、Web 服務和音頻視頻等數據流。該數據集原本用于分析數據包和數據流的傳輸特性對于丟包率、鏈路利用率以及鏈路阻塞等方面的影響。因此使用從數據集中所選取的數據進行實驗,能夠有效地比較本文描述的3種流表更新算法對真實SDN數據中心網絡的影響。

本文使用RYU 控制器和mininet 仿真平臺搭建SDN 網絡環境。在實驗過程中從數據集中選取3 組數據作為實驗測試數據,每組數據數據流類別在10~40k之間,數據包個數為400 萬到800 萬之間。每個數據包都包含時間戳、源地址、目的地址、數據包長度等信息,并且按照各個數據包上的時間戳模擬數據包的到達,SDN 交換機流表空間被設置為500 條。并且為了分析不同取樣周期可能對流表更新效果產生的影響,P-LRU算法在三組實驗中分別將5 s、10 s、20 s 作為取樣周期對流表進行更新。

5.1 性能指標

本文使用3個指標即新增流表項預測精度、數據包匹配率、控制器與交換機間平均每秒交換的信息數量,將本文所提P-LRU 算法與上文描述的FIFO 和LRU 算法進行了比較。

新增流表項預測精度的計算公式如式(10)所示:

其中是Paop為預測精度,Prec為平均相對誤差。新增流表項的預測精度反映了預測算法對于下一取樣周期內新增加的流表項數量的預測是否準確,預測精度越高說明預測結果與實際值之間的誤差越小。

流表匹配率的公式如式(11)所示:

流表匹配率是指到達交換機的數據包,在流表中能夠直接找到與之匹配的流表項的數量占到達交換機的總數據包數量的比率。假設Nmatch表示到達交換機的數據包能夠直接在交換機中找到匹配的流表項的數量,Nall表示到達交換機總的數據包數量。流表的匹配率越高說明流表中使用頻率高的流表項越多,流表資源的使用效率也就越高。

消息交換數量是指在交換機在處理數據包的過程中,交換機與控制器之間平均每秒交換的消息數量。當數據包在流表中找不到對應的流表項時,交換機與控制器之間會交換PacketIn、FlowModify、PacketOut 這3 種消息。當交換機與控制器之間交換的消息越少時,算法對控制器端所造成的負擔越小,算法效率也就越高。

5.2 實驗結果

5.2.1 新增流表項預測精度

在3組實驗中,每一個取樣周期記錄一次本周期內新增的流表項數量,收集前50 個數據作為初始歷史數據,使用預測模型對下一個周期內產生的流表項數量進行預測。為了驗證ARMA模型對于新增流表項數量的預測效果,本文采用文獻[13]所使用的AR 模型作為對比,實驗結果如表1~3所示。

表1 實驗組1預測精度 %

表2 實驗組2預測精度 %

表3 實驗組3預測精度%

分析3 組實驗結果可知:ARMA 模型總體上比AR模型的平均誤差更小,預測精度更高。這是因為AR模型通過時間序列歷史數據的線性組合加上白噪聲建立自回歸方程對當前數據進行預測,并且在預測的過程中認為歷史數據中各個時期數值的隨機波動可以相互抵消。但是在實際過程中,交換機在每個取樣周期中新增加的流表項數量具有較大的隨機性,各個時期所產生的隨機干擾或誤差并不能相互抵消,而這些隨機波動的累積又會對預測結果產生較大影響。ARMA 模型由自回歸和移動平均兩部分組成,綜合了AR 模型與MA 模型的優勢。自回歸過程負責量化當前數據與歷史數據之間的關系,移動平均過程負責解決隨機變動項的求解問題。其中,移動平均部分對原序列有修勻和平滑的作用,可以有效的削弱原序列的隨機波動。因此,ARMA模型對于交換機新增流表項數量的預測結果比AR模型具有更小的誤差方差。與此同時,隨著取樣周期的縮短,新增流表項歷史數據之間的變化趨勢變得更加明顯,ARMA 模型的預測結果與實際結果之間的誤差變小,預測精度也就更高。

5.2.2 流表匹配率

如圖4 為3 組實驗中流表的匹配率,其中FIFO、LRU、LFU 和P-LRU 為本文所提到的4 種流表更新算法。由圖可知,P-LRU 算法的流表匹配率明顯高于FIFO、LRU 以及LFU 算法。FIFO 算法在4 種算法中的流表匹配率最低,原因在于FIFO 算法并未對每一條流表項根據使用頻率進行區分,導致一些使用頻率較高的流表項被頻繁刪除。LRU 算法則會導致一些數據包時間間隔較長但數據包數量較多的數據流的流表項被優先刪除。LFU 算法的缺點在于會將一些新到達交換機的流表項當作使用頻率較低的表項優先刪除。P-LRU 算法可以很好的避免這些問題,算法優先清除在上一個取樣周期內匹配數據包數量最少的流表項,可以使交換機保存更多的在近期使用頻率較高的流表項,有效提高了流表的匹配率。同時,P-LRU 算法的取樣周期越短,對流表的更新速度也就越快,流表匹配率也就越高。

圖4 流表匹配率

5.2.3 信息交換數量

如圖5 為交換機與控制器之間平均每秒交換的信息數量。在3組實驗中,FIFO算法因為在對流表進行更新的過程中缺乏靈活性,所以在交換機與控制器之間產生的消息數量最多,對控制器端造成的負擔最重。而P-LRU算法平均每秒在交換機與控制器之間產生的消息數量最少。原因在于FIFO、LRU、LFU算法只有在流表空間不足的情況下才開始對流表資源進行管理,具有一定的滯后性。而P-LRU 算法周期性地清除流表中使用頻率較低的流表項,可以使交換機保持更多的空閑空間以容納新增流表項,有效減少了交換機與控制器之間的交互次數。同時,P-LRU 算法的取樣周期越短,控制器所需要獲取的當前交換機的流表信息也就越多,交換機與控制器之間所交換的信息數量也相應增多,控制器端的負載也就變得更重。

圖5 信息交換數量

6 結束語

在SDN 網絡中,因為流表的資源有限以及控制器處理能力的不足,在網絡高峰期,交換機的性能受到嚴重影響。針對該問題,文中提出了一種新的流表更新算法。在本文所提流表更新算法中,通過周期性的清除交換機中使用頻率較低的流表項,使交換機在盡可能多的保存使用頻率較高的流表項的同時,也留出足夠的流表空間以容納新增的流表項。通過模擬實驗表明,本文所提算法相對于流表更新的一般方法可以有效提高流表的匹配率,降低控制器的負擔,并且取樣周期會對流表的更新效果產生一定的影響。盡管如此,本文還是存在一些不足,比如在清除流表項的過程中只考慮到了每條流表項在過去一段時間內的使用情況,而沒有考慮到該流表項在未來一段時間內可能再次被使用到的可能性,因此對于流表項本身的特點還需要進行深入研究。

猜你喜歡
表項流表數據流
一種改進的TCAM路由表項管理算法及實現
汽車維修數據流基礎(上)
基于Holt 雙參數指數平滑法的SDN 交換機流表超時優化策略*
基于時序與集合的SDN流表更新策略
汽車維修數據流基礎(下)
軟件定義網絡中一種兩步式多級流表構建算法
一種高效的OpenFlow流表拆分壓縮算法
SDN數據中心網絡基于流表項轉換的流表調度優化
基于數據流聚類的多目標跟蹤算法
北醫三院 數據流疏通就診量
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合