曹絢麗,陳 曉,宋 磊
(1.中國科學院聲學研究所國家網絡新媒體工程技術研究中心,北京 100190;2.中國科學院大學,北京 100049)
隨著網絡規模的不斷擴大和流量類型的逐漸豐富,網絡管理人員需要在網絡中引入更加智能、統籌的管理機制。目前,常見的流量控制方法是通過隊列調度技術實現對數據流的帶寬、時延等方面的保障。
文獻[1]結合了快速重傳快速恢復機制、早期隨機檢測機制和加權差額循環調度(DWRR)[2]機制,在萬兆網絡下實現了擁塞控制并提供了抑制廣播風暴、端口流鏡像等QoS 功能。文獻[3]證明了最大化的請求數據安排兩個問題的NP 完備性并使用啟發式算法優化了調度的整體性能。文獻[4]在單個網絡節點上提高了CBS 合格區間相較于忙區間的帶寬利用率。文獻[5]提出一種限制流量突發的整形器,提高了rate-contrained 流量的延遲邊界和Safety-Critical流量的調度性。
該文提出一種狀態可編程交換機[6]的數據面流量控制機制,通過控制面配置交換機的網絡接口,為不同數據流實現帶寬分配,并通過監控隊列長度來檢測擁塞,以降低高優先級業務流的丟包率。
作為SDN 架構的主流模型之一,POF[7]的數據平面編程采用匹配動作表模型(MAT)[8],實現了對數據包更細粒度的修改。該文在POF 交換機的輸出端加入流量控制模塊,提出一種新的隊列調度算法,實現帶寬資源的預分配的同時保障了高優先級業務的丟包率。該文所提的處理機制使數據面的網絡設備不再局限于特定的網絡功能,控制器通過開放的編程接口靈活地配置數據面的功能模塊,根據網絡節點的負載狀況和業務需求分配網絡設備內的帶寬資源。所提方案中,數據面處理流程細化為流量分類模塊、Match-Action 模塊以及流量控制模塊,POF 交換機架構圖如圖1 所示。

圖1 POF交換機架構
要實現狀態可編程的流量控制,要補充MAT 模型的動作集,擴展原有的OUTPUT 指令,其指令參數指定對應數據包的輸出處理參數(帶寬比例、優先級)。首先控制器通過南向接口下發flow_mod 消息,消息中包含表項對應的指令、數據輸出的端口和輸出處理的參數(帶寬權重、優先級),交換機將其解析為對應的entry 規則,并安裝在對應的流表中。數據包在交換機內部的處理流程如下:
DPDK[9-10]接口將網卡收到的數據包pkt 發送到流量分類模塊,流量分類模塊可以解析網絡中RSS無法解釋的新型數據包,利用軟件實現數據分流,使相同的數據流進入同一個CPU 核心匹配流表。隨后數據包進入Match-Action 模塊的對應CPU 核心,查表后匹配到圖1 中entry 2,根據entry2 對應指令塊3將輸出處理參數(帶寬比例50%,優先級等級為2)寫入數據包的狀態域pkt_metadata 的對應字段。在狀態域修改前后,數據包的格式變化如圖2 所示。

圖2 狀態可編程過程對數據包的格式修改
在輸出處理模塊中,調度器根據pkt_metadata 字段的對應參數確定數據包的入隊隊列。由調度器統一調度所有輸出隊列[11],對當前處于active 狀態且允許發送數據包的隊列進行調度,按照預先設置的帶寬比例發送各個隊列的數據包。該模塊的運行指標要求各個數據流的輸出速率等于控制器配置的帶寬,且能夠保障高優先級數據流的丟包率。
在SDN 網絡中,數據面的流量類型種類繁多,包括但不限于IPv6、IPv4、NDN(Named Data Networking,命名數據網絡)、SEANet[12]等。當網絡中出現數據遷移、鏈路帶寬保證等特殊業務需求時,SDN 控制器通過北向接口接收應用層下發的QoS 要求,SDN 交換機按照控制面配置的帶寬比例執行數據轉發。
SDN 交換機除了要處理來自其他網絡設備的數據流量,還要與控制面進行交互。一般來說,在SDN網絡中,南北向流量比例遠小于東西向的流量。但一旦南北向流量發生阻塞或丟包,會直接影響交換機對后續數據包的處理流程,從而導致網絡中發生不可控的重傳或錯誤。因此,控制流的優先級遠高于東西向數據流,在對交換機實現帶寬分配的同時,要保證控制流的優先級高于數據流,減少其在隊列調度中出現丟包的情況。
為實現SDN 軟件交換機輸出端的流量控制,提出一種兼顧優先級隊列的權重分配隊列調度策略——PDWRR(Priority Deficit Weighted Round Robin)。此算法的基礎是差分加權輪詢(Deficit Weighted Round Robin,DWRR)算法。對于DWRR,每個隊列唯一對應一個計數器Deficit,隊列Deficit 的初始值為該隊列帶寬權重Weight 和MTU 的乘積,MTU 為最大傳輸單元1 500 Bytes;每調度到一個隊列,輸出隊列頭部的報文同時計數器減去已發送的報文長度,直到計數器減為0 時停止對該隊列的調度;所有隊列的計數器都小于0 時,該輪調度結束,重新初始化每個隊列計數器,開始下一輪調度。長期來看,各個隊列的輸出帶寬比例等于各隊列的Weight 值之比,從而實現各隊列帶寬的按比例分配。
為降低算法的復雜度,減少調度過程中可能產生的性能損耗[13-15],PDWRR 算法的基本思想如下:
調度算法的流程與DWRR 相似,每發送一個報文,該報文所在隊列的計數器減去對應的報文長度直至其計數器小于0,隊列調度流程圖如圖3 所示。在更新隊列權重時進行擁塞檢測,根據隊列的剩余空間動態調整其帶寬權重比例,流程圖如圖4 所示。為每個隊列維護一個對應的閾值Threshold,隊列的閾值Threshold 由控制器根據網絡情況配置,優先級越高的隊列閾值越小。在更新隊列權重時,檢測隊列i 的剩余空間的比例Free[i],若Free[i]小于設置的閾值Threshold,則判斷該隊列即將發生擁塞,對應調整該隊列的帶寬權重比例。此時按照式(1)更新隊列i的帶寬權重比例,否則按照式(2)更新。對于不需要區分優先級隊列的網絡環境,將閾值Threshold 設置為最大值1,以保證帶寬資源按比例分配的公平性。

圖3 隊列調度流程圖

圖4 更新隊列流程圖
此方法在DWRR 的基礎上增加了擁塞檢測[16],根據交換機的擁塞情況動態調整業務流的帶寬占比,在預測到高優先級業務即將出現擁塞時提前搶占帶寬資源,以降低高優先級隊列的丟包率。由交換機程序主動進行帶寬調整,相比于通過控制器配置來調節,該方法無需控制器根據鏈路負載情況重新計算帶寬比例,由交換機主動快速響應網絡負載變化,減少了控制器的計算開銷。
為了對該文所提方案進行實驗和分析,驗證方案的有效性和可靠性,實驗平臺選用基于x86 平臺開發的POF 交換機,用于下發流表實現數據流分類和帶寬比例配置的ONOS 控制器,以及思博倫數據包發生器SpirentSPT-C50。測試平臺的CPU 類型為Intel(R) Xeon(R) Silver 4216 CPU@2.10 GHz;服務器物理內存為192 GB;CentOS 7.9 操作系統;網卡類型選用Intel X710 網卡。測試環境拓撲如圖5 所示。

圖5 測試環境拓撲圖
該文的實驗環境包括兩種測試場景:第一種情景中交換機接收相同優先級、不同占比的數據流:且混合流不區分優先級,當每種流量的占比不同時,為各類流量預留所需的帶寬資源;第二種測試情景中交換機接收到的混合流量包含高優先級的控制流和其他優先級的數據流,在每種流量的帶寬占用比例不同時,優先保障高優先級流量的丟包率。
1)相同優先級、不同占比的數據流
思博倫數據包發生器向待測交換機發送不同類型的數據包,分別是IPv4 報文、IPv6 報文和NDN報文,三種數據流的數據包長均為256 Bytes。待測交換機的內置流表模擬上層業務需求配置三種報文優先級相同,帶寬比例不同。為了驗證算法的正確性,將輸出的IPv4、IPv6 以及NDN 數據流分別發往不同的端口并回送至思博倫,根據思博倫測試儀的顯示結果可以確認待測交換機三種數據流的實時帶寬。
為了測試相同優先級情況下,不同類型流量的帶寬分配結果。修改三種數據流的帶寬權重,測試結果如圖6 所示,得到各個時刻三種數據的流量速率。在第4 s、第10 s、第15 s 修改帶寬比例的權重,結果顯示交換機可以在一定時間內完成各個數據流的帶寬的修改并重新達到穩定狀態。

圖6 權重比例和實際吞吐的關系
為了測試不同流量的變化對指定流量的影響,指定流量為IPv6 數據流,將IPv4、IPv6、NDN 流量帶寬分別配置為1 Gbps、1 Gbps、8 Gbps,改變IPv4 的輸入速率,記錄IPv6 的流量吞吐隨IPv4 流量速率的變化關系如表1 所示。實驗結果顯示,多種類型流量共存運行的情況下,其他類型的流量狀態發生變化時,指定流量的帶寬波動不超過2%。

表1 IPv4流量變化時的IPv6帶寬波動
2)不同優先級、不同權重的數據流
思博倫數據包發生器向待測交換機發送三種類型的數據包,分別是IPv4 報文、IPv6 報文和SEANet,三種數據流的數據包均為小包,長度為78 Bytes。SEANet 報文模擬SDN 網絡中控制面發往交換機的南北向控制流,優先級最高;IPv4 報文和IPv6 報文模擬網絡節點之間的轉發流量。在以下測試中,配置SEANet數據流的預置帶寬占比為1%,測試SEANet流量速率在100~150 Mbps內,SEANet流量的丟包率隨流量速率的變化關系。圖7中比較了DWRR 和PDWRR調度方法的丟包率。

圖7 丟包率和實際速率的關系
實驗結果顯示,相比于DWRR 算法,使用改進后的算法實現交換機的輸出側流量控制,可以將SDN網絡中高優先級的流量的控制在1%以內,算法也能在一定程度上解決突發的惡意流量占用網絡帶寬導致網絡崩潰的現象。
為實現對網絡中帶寬資源的配置和管理,在狀態可編程交換機平臺上加入了針對不同類型流量的帶寬控制模塊,提出一種新的隊列調度策略實現了帶寬資源的預分配,并在POF交換機上完成了方案的驗證和測試。實驗結果表明,各類流量可以按照指定的速率進行轉發;其他流量發生變化時,指定流量的帶寬波動可以穩定在2%范圍內,且網絡中多路流共存運行時高優先級的SDN 控制流的丟包率低于1%。未來的研究工作將在該文所提方案的基礎上結合資源分配策略對調度方案進行進一步優化和研究。