[RoCE]擁塞控制機制(ECN, DC-QCN)


1.網絡擁塞問題

在網絡交換機中,當入口流量大於出口流量的帶寬時會發生網絡擁塞。典型的例子是多個發送方同時向同一個目的地發送網絡數據。交換機的緩存可以處理暫時的擁塞,但是當擁塞太久時,交換機的緩存就會過載。當交換機緩存過載時,下一個收到的新的數據包就會被丟棄。丟包會降低應用性能,因為重傳和傳輸協議的復雜性會帶來延遲。無損網絡實現了流控制機制,它可以在緩存溢出前暫停入口流量,阻止了丟包現象。然而,流控制本身會造成擁塞傳播的問題。

為了理解擁塞傳播問題,考慮下面的圖示。假設交換機1上的端口A到E都在向端口G發送網絡數據包,以至於端口G以100%的能力來接收數據並且轉發。假設,毗鄰的交換機2端口F也在向交換機1的端口G發送數據,速率是整個鏈路帶寬的20%。因為端口G的出口已經滿載了,端口F將會重傳數據包直到被流控制機制暫停。此時,端口G將會出現擁塞,然而此時沒有負效應,因為所有的端口都會被端口G盡快的服務。

現在考慮交換機2上的一個端口X,以鏈路帶寬的20%速度向交換機1上的端口Y發送數據。端口G這個擁塞源並不處於端口X到端口Y的路徑上。這種情況下,你也許會認為端口F只使用了交換機間鏈路的20%帶寬,剩余的80%帶寬對於端口X是可用的。然而並非如此,因為來自端口F的流量最終觸發流控制機制使得交換機間的鏈路處於暫停發送,並且將來自端口X的流量降為20%而不是潛在可用的80%帶寬。

2.擁塞控制

擁塞控制用來減少有損網絡中的丟包現象或者無損網絡中的擁塞傳播現象。它也減少交換機緩存的占用,進而減少了延遲和改善突發流量的容忍度。使用的方法是限制導致擁塞根本原因的端口(A-F)的網絡流注入速率,因此其他端口(X)發來的網絡流就不會被影響。通過限制端口A-F的注入速率為端口G可以處理的速率,端口A-F不應該觀察到明顯的性能下降(畢竟,它們的數據包無論如何也要等待),然而從端口X到端口Y發送的數據包應該能夠正常的轉發,因為流控制機制不會發送暫停幀(擁塞控制目的是保持交換機的緩存占用率低,因此流控制機制就不會被觸發)。當前的RoCE擁塞控制依賴顯式擁塞通知(Explicit Congestion Notification, ECN)來運行。

3.Explicit Congestion Notification(ECN)

ECN最初在RFC 3168文檔為TCP/IP協議所定義,它通過在IP頭部嵌入一個擁塞指示器和在TCP頭部嵌入一個擁塞確認實現。兼容ECN的交換機和路由器會在檢測到擁塞時對網絡數據包打標記。IP頭部的擁塞指示也可以用於RoCEv2的擁塞控制。下面是IP頭部的前四個幀的格式:

下面是整個IP頭部的幀格式:

4.RoCEv2 的擁塞管理

RoCEv2標准定義了RoCEv2擁塞管理(RCM)。RCM提供了避免擁塞熱點和優化鏈路吞吐量的能力。啟用了RCM后,鏈路上早期的擁塞會被匯報給網絡流的源,然后網絡流的源會降低它們的注入速率,因此防止了鏈路上的緩存飽和與增加排隊延遲帶來的負面效果。擁塞管理與共存的TCP/UDP/IP流量也是相關的。然而,假設對RoCEv2和其他流量使用了不同優先級,每個優先級都有一個帶寬分配,擁塞和擁塞反映(指網絡源針對擁塞采取的動作)效果不應該互相影響。

為了發出擁塞信號,RCM依賴於RFC 3168中定義的ECN機制。一旦RoCEv2流量出現了擁塞,網絡設備在數據包的IP頭部對ECN域進行標記。這個擁塞指示器被目的終端節點按照BTH(Base Transport Header,存在於IB數據段中)中的FECN擁塞指示標識來解釋意義。換句話說,當被ECN標記過的數據包到達它們原本要到達的目的地時,擁塞通知就會被反饋給源節點,源節點再通過對有問題的QP進行網絡數據包的速率限制來回應擁塞通知。

RCM是一個可選的規范行為。實現了RCM的RoCEv2主機通道適配器應該按照下面的規則來運行:

  • 當收到一個有效的RoCEv2數據包時,它的IP.ECN域的值如果是'11'(二進制),那么這個主機通道適配器應該產生一個RoCEv2的CNP,送回給所收到的包的源節點(格式規定如下)。這個主機通道適配器應該對多個被ECN標記為同一個QP的的數據包發送一個單個CNP即可。
  • 當收到一個RoCEv2的CNP時,主機通道適配器應該對RoCEv2 CNP中標記的QP實施減緩注入速率。這個速率變化總量由一個可配置的速率減緩參數來決定。
  • 當被ECN標記的QP自從最近收到的RoCEv2 CNP包開始經過了一個可配置的暫停時長或者超過一個已經發送的可配置的字節數之后,主機通道支配器應該增加該QP的網絡注入速率。

RoCEv2的CNP包格式如下:

5.擁塞控制環路

RoCEv2的擁塞控制環路如下:

1.注入端必須在IP頭部設置ECN值,可選的值如下(ECT是ECN-Capable Transport):定義在RFC 3168

注入端網卡設置IP頭部的ECN值為ECT(0)(‘10’),注意,ECT(1)和ECT(0)不可交換。

2.RoCEv2數據包注入到網絡中。

3.路由器在發生擁塞的隊列上接收到數據包時,不是馬上丟棄,也許會先檢查ECN域確定是否開啟了ECN功能,如果是,就在IP頭部打開CE位。

4.在發生擁塞的情況下,正常轉發的數據包從網絡中到達接收方。

5.接收方會對開啟CE位且類型為RoCE的數據包進行過濾,觸發事件,然后再將數據包釋放到正常處理流程中。

6-7.為了避免由於產生流量的負載,接收方應該將針對每個QP產生的擁塞通知聚集起來。 在若干微秒內將一個CN數據包發送回注入方QP上。數據包中的ECN位設置為'01'來驗證該數據包沒有被IP路由器丟掉。IBA的BTH頭部將會按照上述的格式來定義。

8.CNP包從接收方回注到網絡中。

9.IP路由器將IB的CNP包視為一個普通的IP數據包。

10.CNP包到達源注入方節點。注入方節點對ECN位為'01'且類型為RoCE的數據包進行過濾,然后對指示的網絡流應用速率限制算法。

6.量化擁塞通知(Quantized Congestion Notification,QCN)

量化擁塞通知IEEE標准(802.Qau)以有限帶寬時延的以太網網絡為長期保活的網絡流提供了擁塞控制。這是IEEE數據中心橋接(DCB)協議套件中的一部分,還包括ETS,PFC,和DCBX。QCN在二層以太網絡上制定,並且是針對硬件實現的。QCN適用所有的以太網幀和所有的傳輸,並且主機端和交換機端的行為也在標准中詳細規定。QCN的配置和信息提取可以適用mlnx_qcn命令。

7.DC-QCN算法

DC-QCN算法是基於數據中心TCP(DCTCP)和量化通知算法的結合,並且和微軟研究院協同開發的。最初的算法在SIGCOMM'15論文"Congestion control for large scale RDMA deployments"中提出。DC-QCN算法依賴於交換機端的ECN標記。ECN是商用數據中心交換機的普遍特點。在數據包IP頭部中的查分服務域中的兩個比特位用來提示擁塞。一旦交換機端出現了擁塞,這兩個比特位就被置為"11"(CE)。

標記擁塞是隊列長度的概率函數,如下圖所示。隊列長度的兩個門限值定義了標記概率。當隊列長度低於門限值下限時,ECN位不會被標記。當隊列長度超過門限值上限時,所有從該隊列傳輸的網絡包都會被進行ECN標記。當隊列長度處於兩個門限值之間時,數據包會以與隊列長度線性增長的概率被進行ECN標記。

帶有ECN標記的數據包被傳播到接收方的網卡上。接收方網卡創建一個CNP並把它發送給ECN所標記的數據包的發送方。CNP數據包包括被標記的QP的信息。當CNP被發送方網卡收到時,它會基於下面描述的算法來降低指定QP的傳輸速率。DC-QCN降速算法通過下面的圖表來描述。簡而言之,如果QP基於內部定時器和發送字節計數器,算法會持續的增加發送速率,一旦收到CNP包,就會對指定QP進行降速。除此之外,它還維持一個叫做α的參數,它反映了網絡中的擁塞度,用於降速計算。

該算法通過三個並行的流程來定義:

  • α更新(測量擁塞度)
  • 降速
  • 提速

7.1 α更新

時間被切分為可配置的時間間隙。每個時間間隙指示是否有CNP在該時間間隙內到達。α參數是一個不斷變化的平均值,它是CNP到達的時間間隙的比例(如果同一個時間間隙內不止一個CNP到達,與只有一個CNP到達效果一樣)。每個時間間隙結束時,α通過后面的式子更新:new_α = g * old_α + (1 - g) * CNP_arrived, 這里g是一個介於0和1的常量參數,CNP_arrived是一個比特位的域,用來指示在上個時間間隙內是否有CNP到達。

7.2 降速

時間被切分為可配置的時間間隙(不同於α更新的間隙)。如果CNP在上個時間間隙到達(在同一個時間間隙內不止一個CNP到達時,后面的CNP不會產生指示),QP的速率通過后面的式子來減少:new_rate = old_rate * (1 - α / 2),同時將用於提速的幾個參數重置。

7.3 提速

提速邏輯和QCN定義的非常相似。該邏輯划分為三個順序的階段:快速恢復,積極增加(保持探測),超積極增加(保持探測)。

從一個階段移向下一個階段是通過在該階段中統計到的提速事件數量參數定義的。在一個階段中提速事件的數量超過預定義的門限值后,邏輯移向下一個階段。降速事件會重置所有和提速相關的計數器,並且返回到快速恢復階段。除此之外,一旦提速后,在降速之前,當前的速度會被保存在一個叫target_rate的參數中。

自從上次提速后,在經過預定義的時間間隙或者預定義的發送字節數過程后,如果沒有出現降速事件,就會出現提速事件。

處於快速恢復階段時,面對每個提速事件,速度按照到target_rate的距離的一半來增加(也就是對數接近,current_rate = (current_rate + target_rate) / 2)。這允許在快速恢復階段的開始能快速恢復到擁塞出現的速度,然后在速度接近擁塞發生的速度時,更謹慎的增加速度。

在后面兩個階段中,一旦出現提速事件,速度都是按照一個常量值來增加。這可以在帶寬釋放的時候獲得吞吐量。

8.總結

這次記錄了RoCEv2網絡中對於擁塞控制的檢測,預防和應對方法。ECN檢測和標記是現代數據中心商用交換機普遍具有的功能,它保存在IP頭部的查分服務代碼點中的兩個比特位中。啟用ECN功能后,在網絡上出現擁塞后,交換機會對ECN域打上CE值,由接收方產生CNP來通知發送方網絡擁塞事件。發送方收到CNP指示的事件通知后,根據DC-QCN算法中對當前速度處於快速恢復,積極增加和超積極增加三個階段中對應的動作來對注入速率進行控制,從而解決網絡中的擁塞情況。



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM