本章重點介紹不使用TCP 而使用無損以太網網絡的存儲協議,如FCoE、RoCE 和RoCEv2。第8 章"TCP 存儲網絡中的擁塞管理"主要介紹在有損以太網網絡中使用TCP 傳輸的存儲協議,如iSCSI 和NVMe/TCP。
以太網流量控制
以太網流量控制有兩種類型
1. 鏈路級流量控制(LLFC):LLFC 可在直接連接的設備之間對鏈路上的所有流量進行流量控制。LLFC 是一項IEEE 標準(IEEE 802.3x)。
2.基于優先級的流量控制(PFC):PFC 可在直接連接的設備之間對特定流量類別進行流量控制,而其他流量類別則在無流量控制的情況下繼續運行。PFC 也是IEEE 標準(IEEE 802.1Qbb)。
LLFC 類似于光纖通道B2B 流量控制機制,它對鏈路上的所有流量進行流量控制(第2 章"了解光纖通道Fabric 中的擁塞",光纖通道流量控制部分)。相反,當光纖通道鏈路使用多個虛擬鏈路或電路(VL 或VC)運行時,PFC 類似于ER_RDY(或VC_RDY)流量控制機制(第6 章"在光纖通道Fabric 中防止擁塞",了解虛擬鏈路一節)。在光纖通道Fabric 中,所有流量都需要無損行為,因此所有VL 都啟用了流量控制,而在以太網網絡中,只有部分流量類別受流量控制,其他類別的流量則不受流量控制。這有助于在同一以太網鏈路上實現有損和無損行為。
如第1 章"無損網絡"一節所述,以太網流量控制(或一般無損網絡)并不能保證不丟幀。當幀因比特錯誤而損壞時,以及當擁塞嚴重時幀在緩沖區中長時間滯留時,仍然會丟棄幀。這些細節將在后面的"通過丟棄幀恢復擁塞"一節中解釋。
以太網流量控制如何工作?
以太網使用一種稱為暫停幀的特殊幀進行流量控制。暫停幀的內容、發送時間和發送頻率允許直接連接的發送方調整傳輸速率,以避免接收方緩沖區超限。這就避免了因接收方缺乏空閑緩沖區而造成的數據包丟失,從而實現了無損網絡。
暫停時間
暫停幀有一個稱為quanta的字段,用于表示必須停止幀傳輸的持續時間(稱為暫停時間)。quanta值范圍在0 到65535 之間(16 位最大值為0xFFFF)。要計算暫停時間,可將quanta值乘以在鏈路上傳輸512 比特所需的時間。無論鏈路的運行速度如何,這一方案都有助于實現一致的執行。它還能確保最大暫停時間隨著鏈路速度的增加而減少,這是適應高速鏈路上更快傳輸速率的需要。
如下式所示,要將暫停quanta轉換為秒,需要將其乘以512,再除以每秒比特的端口速度。
Pause time in seconds = (Pause quanta x 512) / Port speed in bits per second
例如,在10 GbE 鏈路上,單個暫停幀的最大暫停時間為3.355 ms((65535 x 512)/(10 x 109))。當10 GbE 端口收到quanta值為0xFFFF 的暫停幀時,可停止傳輸3.355 毫秒。同樣,100 GbE 鏈路的最大暫停時間為0.355 ms。
數據流接收器在發送非零quanta的暫停幀后,可通過兩種方式請求數據流發送器重新開始傳輸:
1. 等待最后發送的暫停幀所代表的持續時間。例如,10 GbE 端口只需等待3.355 毫秒。
2. 發送新的零quanta暫停幀,要求數據流發送方立即恢復傳輸。因此,零quanta的暫停幀也被稱為恢復幀或解除暫停幀。
在以下兩個條件下,因收到quanta為非零的暫停幀而處于"暫停"狀態的數據流發送方將立即恢復傳輸:
1. 暫停幀中指定的持續時間結束。例如,10 GbE 端口在接收到quanta為65535 的暫停幀3.355 毫秒后。
2.它接收到quanta設為零的暫停幀。同樣,這也可以稱為"恢復"或"取消暫停"幀。
這意味著暫停幀具有雙重用途。非零quanta的暫停幀會停止或暫停流量,而零quanta的暫停幀則會啟動或恢復流量。
接下來,讓我們了解一下這些暫停幀是何時發送的。
何時發送暫停幀?
圖7-1 顯示了交換機-1 的兩個端口之間的速度不匹配情況,這兩個端口以10 GbE 連接目標-1,以1 GbE 連接主機-1。交換機-1 為無損流量分配緩沖區,并將這些緩沖區組織到入口無丟棄隊列中。為簡單起見,假設只有一種流量類別需要無損行為,則只顯示一個無丟棄隊列。
Figure 7-1Ethernet flow control with Pause Threshold and Resume Threshold
當Target-1 開始以10 Gbps 的速度傳輸無損流量時,Switch-1 只能以1 Gbps 的速度向Host-1 傳輸。流量速率的差異會導致幀過多,從而開始消耗交換機-1 上不丟幀隊列的緩沖區。當交換機-1 的緩沖區填滿超過閾值(稱為暫停閾值)時,它會向目標-1 發送一個非零quanta的暫停幀。目標-1 收到該暫停幀后,會在一個特定的時間間隔內停止傳輸流量,該時間間隔稱為暫停時間(如上一節所述)。因此,Switch-1 的緩沖區利用率不會進一步增加,而是隨著向Host-1 的傳輸繼續進行而開始下降。
最終,當Switch-1 的緩沖區利用率低于恢復閾值時,Switch-1 會發送一個零quanta的暫停幀,這是目標-1 恢復流量傳輸的信號。如果在發送第一個非零quanta的暫停幀后的暫停時間內,Switch-1 的緩沖區利用率沒有降至恢復閾值以下,它將繼續發送更多非零quanta的暫停幀,以停止或暫停來自目標-1 的傳輸,直到Switch-1 的緩沖區利用率降至恢復閾值以下。
目標-1 最終會恢復傳輸,要么是因為最后一個非零quanta的暫停幀中指定的持續時間已過,要么是因為它收到了一個零quanta的暫停幀。但目標-1 較快的傳輸速率再次導致交換機-1 上的不丟棄隊列被填滿,并很快超過了暫停閾值。這時,交換機-1 再次向目標-1 發送非零quanta的暫停幀,同樣的事件重復發生。
最后,交換機-1 的"暫停閾值"和"恢復閾值"之間的緊密配合以及"暫停幀"(非零quanta)和"未暫停幀"(零quanta)的發送實現了以太網流量控制。
請注意以下幾點:
1. 圖7-1 中的以太網流量控制會導致入口端口(連接到Target-1)和出口端口(連接到Host-1)之間的速率均衡。如果在此狀態下對鏈路進行監控,Host-1 鏈路上就不會有暫停幀流過,而許多暫停幀會從Switch-1 流向Target-1。
2. 如果不啟用圖7-1 中的流量控制,交換機-1 將丟棄目標-1 的任何多余幀。這將使其成為一個有損網絡。
3. 雖然quanta值的范圍在0 到65535 之間,但大多數產品(包括Cisco MDS 交換機、Nexus 交換機和UCS)都將其設置為最大可能值65535。將時間quanta設置為較小值將要求接收器預測準備接收更多幀的持續時間。這種預測的實現比較復雜。大多數產品將暫停時間量值設置為最大值65535,然后在準備好接收流量時發送取消暫停幀(時間量值為0),從而使實現簡單易行。由于這些原因,Cisco MDS 交換機、Nexus 交換機和UCS 不允許配置暫停quanta值。
4. 如果認為在發送非零quanta的暫停幀時,流量會在quanta所代表的時間內停止,那是不正確的。通常情況下,非零quanta的暫停幀之后很快就會出現取消暫停或恢復幀。流量暫停的最長時間實際上就是暫停和取消暫停幀之間的時間。在10 GbE 鏈路上,這可能是0.05 微秒(接收64 字節暫停幀的時間),也可能是3.355 毫秒或介于兩者之間的任何時間。如果緩沖區利用率仍高于暫停閾值,則可在根據實施情況確定的時間(小于量子所代表的時間)后發送另一個非零quanta的暫停幀。這個暫停幀會"延長"流量暫停的時間。
5.暫停幀不會搶先傳輸已經開始的幀。
6. 暫停閾值也稱為XOFF 閾值,恢復閾值也稱為XON 閾值。XOFF 和XON 中的X 是傳輸的首字母縮寫。由于暫停幀的流動方向與流量相反,因此XOFF 閾值與停止流量有關,而XON 閾值與重啟/恢復流量有關。一般來說,XOFF 表示"暫停流量",XON 表示"取消暫停流量"。在排除擁塞問題時,請記住這一細節,因為XOFF 和XON 術語也可能被使用。
入口和出口隊列
Cisco Nexus 9000 交換機采用出口緩沖架構。這意味著出口端口上會保留隊列。
只有對于不丟棄類,才會為所有可以接收不丟棄類流量的入口端口預留額外的緩沖區。如圖7-1 所示,除了出口隊列外,不丟棄流量還被排入入口隊列(具有暫停閾值和恢復閾值)。
在擁塞期間,首先出口隊列會開始填滿。對于有損流量,如果這些出口隊列已滿,任何新傳入的幀都會被丟棄。
但是,對于無損流量,在不丟棄出口隊列滿之前,會對入口隊列施加內部反向壓力(具有暫停閾值和恢復閾值)。這樣,任何新進入的流量都會占用入口隊列,而不會被丟棄。如前所述,通過發送暫停幀來控制入口隊列的利用率。
這些入口隊列有暫停閾值和恢復閾值,與出口隊列的主動隊列管理(AQM)機制(如加權隨機早期檢測(WRED))不同。可以使用NX-OS 命令show queuing interface 顯示Cisco Nexus 9000 交換機端口上的入口和出口隊列。
在Cisco Nexus 交換機上,所有流量都要經過出口隊列處理,因此,AQM 與有損和無損流量相關。第8 章"交換機緩沖區管理"一節介紹了出口隊列的處理和AQM 機制。本章主要關注入口隊列(具有暫停閾值和恢復閾值)的處理。了解兩個隊列(出口隊列和入口隊列)的處理至關重要,因為如前所述,只有在出口隊列填滿后才會使用入口隊列。因此,監控出口隊列的使用情況也是顯示擁塞的一個關鍵指標。有關詳細信息,請參閱第8 章隊列深度監控和微爆發檢測一節。
入口無損隊列的位置
無損以太網網絡中的所有端口都有入口無損隊列。為簡單起見,圖7-1 僅顯示了一個位置的入口無損隊列,但實際上所有端口都有入口無損隊列。
1.圖7-1 顯示了交換機-1 上用于接收目標-1 流量的入口無損隊列。利用該無損隊列可控制向目標-1 發送暫停幀。
2. 交換機-1 上也有類似的入口無損隊列,用于接收來自主機-1 的流量。利用該無損隊列可控制向Host-1 發送暫停幀。
3. 目標-1 創建一個或多個入口無損隊列,用于接收來自交換機-1 的流量。利用該無損隊列可控制向Switch-1 發送暫停幀。
4. 主機-1 創建一個或多個入口無損隊列,用于接收來自交換機-1 的流量。利用該無損隊列可控制向Switch-1 發送暫停幀。
每個端口的輸入無損隊列數
通常情況下,一個無損流量類的每個端口需要一個無損隊列。也可根據使用情況創建多個無損隊列,如通過同一鏈路傳輸FCoE 和RoCE 流量。多個無損隊列有各自的"暫停閾值"和"恢復閾值"。設備上無損隊列的最大數量取決于其功能。例如,Cisco Nexus 9000 交換機最多支持三個無損隊列。但根據鏈路的最大幀大小和長度,還需要考慮更多因素。這些限制之所以適用,是因為無損隊列需要預留緩沖區,而每個設備的緩沖區空間都是有限的。請參考您環境中設備的文檔,但總的來說,要了解這些限制并制定相應的計劃。
實施差異和本書的范圍
有些實現(盡管不太常見)會在沒有擁塞的情況下持續發送quanta為零的暫停幀。換句話說,即使緩沖區利用率低于恢復閾值,它們也會發送取消暫停幀。這樣做是不必要的,因為只需一個"取消暫停"幀就足以恢復流量,除非中間發送一個非零quanta的"暫停"幀,否則沒有必要連續發送。雖然這種實現方式并不違反標準,但由于無法分別報告暫停和解除暫停幀,也無法報告流量暫停的持續時間(TxWait/RxWait),因此這種不必要的操作幾乎無法進行擁塞檢測。有關這些指標的更多詳情,請參閱后面的"擁塞檢測指標"部分。此外,大量連續發送的"取消暫停"幀可能會導致明顯的鏈路利用率,因為這些幀實際占用了帶寬。這種類型的實施超出了本書的范圍。本書中講解的大多數擁塞檢測和故障排除技術都不適用于此類實施。
本書主要介紹只發送一個(或幾個)取消暫停幀(零quanta)來恢復流量,并且在緩沖區利用率低于恢復閾值時不連續發送取消暫停幀的實現。這是最常見的實施類型,包括Cisco MDS 交換機、Nexus 交換機和UCS。本書僅介紹這種實施方式。
以下是Cisco MDS、Nexus 和UCS 的實現詳情:
1. 當超過暫停閾值時,發送一個具有最大暫停quanta的暫停幀。
2. 如果緩沖區利用率高于"恢復閾值",則在50%的最大暫停時長到期后,發送下一個具有最大暫停時長的暫停幀。
3. 如果緩沖區利用率低于恢復閾值,則發送一個零quanta的暫停幀(取消暫停)。隨后不再發送零quanta的暫停幀。如果該暫停幀損壞或丟失,流量將在前一個暫停幀所傳達的暫停時間結束后恢復。
很明顯,思科的實現是僅在必要時發送暫停幀。這種發送"暫停幀"的保守方法為通過計算"暫停幀"的數量來檢測擁塞奠定了基礎,如第9 章中詳細介紹的UCS 流量監控(UTM) 應用程序所使用的方法。
暫停閾值和恢復閾值
本節將解釋暫停閾值和恢復閾值對正確的headroom和footroom緩沖區大小的重要意義。如圖7-1 所示。
緩沖區(隊列)大小取決于設備的能力。每個啟用PFC 的端口都必須預留緩沖區。因此,隊列大小是設備總緩沖空間和啟用PFC 端口數量的函數。
暫停閾值
如前所述,當流量接收器的緩沖區(隊列)利用率超過暫停閾值時,它就會發送一個非零quanta的暫停幀。
恢復閾值
如前所述,當流量接收器的緩沖區(隊列)利用率低于恢復閾值時,它就會發送一個零quanta的暫停幀(取消暫停)。
暫停閾值必須大于恢復閾值。整個緩沖區(隊列)的大小必須足夠大,以滿足暫停閾值和恢復閾值之間的足夠差值。
Headroom
緩沖區(隊列)大小與暫停閾值之間的空間稱為headroom。
暫停閾值應足夠小于最大緩沖區大小(或隊列大小),以保持足夠的headroom。headroom不足可能導致數據包丟失。暫停閾值也不能太低。如果出現這種情況,發送方會過早暫停,而headroom仍未使用,這可能會導致鏈路利用率低于預期。
由于流量接收器必須保持足夠的"headroom"來容納,因此它必須在暫停閾值處而不是在其緩沖區完全耗盡時(圖7-1)發送具有非零quanta的暫停幀:
發出的數據幀已經在物理線路上
發送方已計劃發送且不能中斷的數據幀。
暫停幀從流量接收方到流量發送方的序列化和傳播所造成的延遲。
隨著距離的增加,流量接收器必須增加其headroom,因為可能會有更多的幀在傳送中,而且暫停幀到達流量發送器所需的時間也會更長。但緩沖區是有限的資源,因此無損以太網鏈路的最大支持距離取決于其端點的能力。當時可用空間無法容納的輸入數據包會被丟棄。這偏離了無損網絡的行為。充足的headroom應避免出現這種情況。
Footroom
低于恢復閾值的緩沖空間稱為footroom。
恢復閾值應大于零,以保持足夠的空間,從而在"解除暫停"幀到達流量發送方、設備恢復傳輸以及這些幀到達時,無損隊列中有足夠的幀。如果恢復閾值過低,在發送"解除暫停"幀和接收流量之間的一段時間內,無損隊列將是空的。這可能會導致鏈路利用率低于預期。
配置緩沖區大小、暫停閾值和恢復閾值
在大多數實際應用中,數據中心內短距離鏈路不需要更改緩沖區(隊列)大小、暫停閾值和恢復閾值。大多數產品(包括Cisco MDS 交換機、Nexus 交換機和UCS)都會根據鏈路的支持長度(如100 米)默認配置測試值。有關詳細信息,請參閱產品文檔。
Cisco Nexus 9000 交換機的默認緩沖區大小和閾值足以滿足100 米長電纜的需要。如果需要更改這些值,例如用于長度超過100 米的電纜,如例7-1 所示,可使用Cisco Nexus 交換機上的pause buffer-size 命令更改閾值。不同類型的設備可能會根據其緩沖區可用性和架構使用不同的值。因此,例7-1 僅用于一般理解,在未查閱產品文檔的情況下,請勿直接使用這些值。
Example 7-1在Cisco Nexus 9000 交換機上配置緩沖區大小、暫停閾值和恢復閾值。
policy-map type queuing INPUT_Q
class type queuing RDMA
pause buffer-size 120000 pause-threshold 46000 resume-threshold 32000
InExample 7-1:
1. 命令pause buffer-size 中的值以字節為單位。
2. 緩沖區大小(120,000 字節)是隊列大小。暫停閾值為46,000 字節,恢復閾值為32,000 字節。
3. 緩沖區大小和暫停閾值之間的差值就是headroom(120,000 - 46,000 = 74,000 字節)。如前所述,如果headroom不足,當時無法容納的入口數據包就會被丟棄。
4. 恢復閾值是footroom(32,000 字節)。如前文所述,headroom不足可能導致鏈路利用率低于應有水平。
5. 根據最大幀大小,這些閾值的配置應至少容納最低數量的幀。默認的以太網有效載荷為1500 字節,因此在計算報頭后,幀大小為1522 字節。但存儲流量通常需要更大的幀大小。例如,FCoE 幀最多可達約2300 字節。RoCE 幀最大可達約2 KB 或4 KB。以太網巨型幀最大可達9216 字節。在例7-1 中,74,000 字節的凈空可容納約8 個9216 字節的全尺寸巨型幀,盡管并非所有幀的大小都相同。
如例7-2 所示,使用命令show queuing interface 驗證Cisco Nexus 9000 交換機上無損隊列的"暫停閾值"、"恢復閾值"和headroom。
Example 7-2驗證Cisco Nexus 9000 交換機上的緩沖區大小、暫停閾值和恢復閾值。
switch# show queuing interface ethernet 1/1
Ingress Queuing for Ethernet1/1
-----------------------------------------------------
QoS-Group# Pause
Buff Size Pause Th Resume Th
-----------------------------------------------------
7 - - -
6 - - -
5 - - -
4 - - -
3 120000 46000 32000
2 - - -
1 - - -
0 - - -
帶PFC 的長途鏈路
長距離無損以太網鏈路的使用不如短距離鏈路普遍。大多數使用短距離SFP 的數據中心內鏈路都在幾百米以內。支持無損以太網的設備應該有足夠的緩沖區來處理這些數據中心內鏈路。但是,如果遇到啟用了PFC 的長距離以太網鏈路,請驗證端點的支持情況,并按照供應商的指導增加緩沖區大小、暫停閾值和恢復閾值。
如前所述,Cisco Nexus 9000 交換機的默認緩沖區大小、暫停閾值和恢復閾值足以滿足100 米電纜長度的要求。更改配置后,Cisco Nexus 93180YC-FX 通過10 千米鏈路支持FCoE。對于任何其他使用情況和更長的距離,請遵循官方文檔。
一般概念是,所有無損網絡都有距離限制,因為隨著距離的增加,它們需要額外的緩沖區。光纖通道和無損以太網都是如此。對于光纖通道,需要增加B2B 信用點的數量,這與物理緩沖區直接相關。對于以太網上的PFC/LLFC,在暫停閾值(headroom)以上和恢復閾值(footroom)以下必須有足夠的緩沖空間。
緩沖區不足對光纖通道和無損以太網的影響是不同的。在光纖通道中,B2B 緩沖區不足會導致鏈路利用率低于預期,因為流量發送方大部分時間都在等待緩沖區。在使用PFC 的無損以太網中,會產生兩種影響。首先,如果headroom不足,那么數據包可能會在無損流量類中丟棄。其次,如果footroom不足,其結果類似于光纖通道中缺乏B2B 信用額度,從而導致性能不佳,因為在有少量停頓的情況下,鏈路永遠達不到預期的流量速率。
審核編輯:劉清
-
以太網
+關注
關注
40文章
5441瀏覽量
172038 -
接收器
+關注
關注
14文章
2473瀏覽量
72009 -
交換機
+關注
關注
21文章
2646瀏覽量
99805 -
TCP
+關注
關注
8文章
1374瀏覽量
79147 -
存儲網絡
+關注
關注
0文章
31瀏覽量
8125
原文標題:以太網存儲網絡的擁塞管理連載(一)
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論