一文讀懂無損網(wǎng)絡(luò)
根據(jù)OpenAI的數(shù)據(jù)分析,自2012年起,最新的AI模型訓練所需要的計算量每3-4個月就要翻一倍。在過去5年,GPU算力增長了近90倍,而網(wǎng)絡(luò)帶寬僅增長了10倍。隨著AI訓練集群規(guī)模的增大,以及單節(jié)點算力的增長,AI訓練逐漸從計算約束轉(zhuǎn)換為網(wǎng)絡(luò)通信約束。
另一方面,存儲介質(zhì)SSD(固態(tài)硬盤)的訪問性能相比于分布式存儲HDD(機械硬盤)已經(jīng)提升了100倍,采用NVMe接口協(xié)議的SSD,訪問性能可以提升10000倍。網(wǎng)絡(luò)時延占比已經(jīng)從原來小于5%提升到65%。網(wǎng)絡(luò)時延也已經(jīng)成為影響存儲效率的重要因素。
傳統(tǒng)TCP/IP協(xié)議在接收/發(fā)送報文時,內(nèi)核需要做多次上下文切換,每次切換需要耗費5us-10us左右,需要至少三次的數(shù)據(jù)拷貝,需要耗費算力進行協(xié)議封裝。RDMA網(wǎng)絡(luò)相比TCP提供更高的單流通信帶寬。RDMA網(wǎng)絡(luò)的內(nèi)核旁路和內(nèi)存零拷貝特性,大大縮短了協(xié)議棧的通信處理時延以及數(shù)據(jù)搬移時延。RDMA允許用戶態(tài)的應(yīng)用程序直接讀取和寫入遠程內(nèi)存,無需CPU接入多次拷貝內(nèi)存,并可繞過內(nèi)核直接向網(wǎng)卡寫數(shù)據(jù),實現(xiàn)了高吞吐量、超低時延和低CPU開銷。
最新版的RDMA協(xié)議RoCEv2 運行在UDP上,沒有滑動窗口、確認應(yīng)答等機制,一旦丟包,需要依靠上層應(yīng)用檢查并重傳,這大大降低了RDMA傳輸效率。當網(wǎng)絡(luò)的丟包率>10-3時,將導致RDMA有效吞吐急劇下降;2%的丟包將使RDMA吞吐率下降為0。要使得RDMA吞吐不受影響,丟包率必須保證在十萬分之一以下,最好為無丟包。總而言之,RDMA的高效率依賴于無損網(wǎng)絡(luò)。
網(wǎng)絡(luò)擁塞原因
要實現(xiàn)無損網(wǎng)絡(luò),實際上就是要解決網(wǎng)絡(luò)上的擁塞問題。
造成網(wǎng)絡(luò)擁塞主要有如下原因:
1)上下行非對稱設(shè)計。網(wǎng)絡(luò)設(shè)計通常采用非對稱的方式,上下行鏈路帶寬不一致(收斂比)。以交換機為例,當下聯(lián)的服務(wù)器上行發(fā)包總速率超過上行鏈路總帶寬時,上行口就會出現(xiàn)擁塞。
2)ECMP。數(shù)據(jù)中心多采用Fabric架構(gòu),并采用ECMP來構(gòu)建多條等價負載均衡的鏈路,通過設(shè)置HASH因子并HASH選擇一條鏈路來轉(zhuǎn)發(fā),該過程沒有考慮所選鏈路本身是否有擁塞,所選擇的鏈路流量飽和時,就會發(fā)生網(wǎng)絡(luò)擁塞。
3)TCP Incast。當服務(wù)器向一組節(jié)點發(fā)起請求時,集群中的節(jié)點會同時收到該請求,并且?guī)缀跬瑫r做出響應(yīng),從而產(chǎn)生了“微突發(fā)流”,如果交換機上連接服務(wù)器的出端口緩存不足就會造成擁塞。
無損網(wǎng)絡(luò)的特征
“0丟包”、“低時延”、“高吞吐”是無損網(wǎng)絡(luò)三大核心特征。
這三個指標相互影響:
- 0丟包:會抑制鏈路帶寬,導致低吞吐,同時會增加大流的傳輸時延;
- 低時延:降低交換機隊列排隊,導致低吞吐;
- 高吞吐:保持鏈路高利用率,導致交換機的擁塞排隊,導致小流的“高時延”。
構(gòu)建無損網(wǎng)絡(luò)可以從兩個方面入手,一個是網(wǎng)絡(luò)自身的優(yōu)化,另一個是網(wǎng)絡(luò)與應(yīng)用系統(tǒng)的融合優(yōu)化。后者包括網(wǎng)算一體、網(wǎng)絡(luò)與存儲相融合等等,不在此文范圍內(nèi)。本文側(cè)重前一個方面。
網(wǎng)絡(luò)自身的優(yōu)化目標是使整網(wǎng)吞吐最高、時延最低,包括三個層次:
1)流的控制(Flow control):用于解決發(fā)送端與接收端速率匹配,做到無丟包;
2)擁塞控制(Congestion control):用于解決網(wǎng)絡(luò)擁塞時對流量的速率控制問題,做到滿吞吐與低時延;
3)流量調(diào)度(Traffic scheduling):用于解決業(yè)務(wù)流量與網(wǎng)絡(luò)鏈路的負載均衡問題,做到不同業(yè)務(wù)流量的服務(wù)質(zhì)量保障。
無損網(wǎng)絡(luò)的流控技術(shù)
流控技術(shù)是保障網(wǎng)絡(luò)零丟包的基礎(chǔ)技術(shù)。由流量接收方控制數(shù)據(jù)傳輸?shù)乃俾省?/p>
IEEE802.3 Annex 318 約定的PAUSE幀是以太網(wǎng)中實現(xiàn)流控的基本協(xié)議。當接收設(shè)備接收能力小于上游設(shè)備時,會主動發(fā)PAUSE幀給上游設(shè)備,要求上游設(shè)備在一段時間內(nèi)暫停流量的發(fā)送。PAUSE幀只能阻止上游設(shè)備發(fā)送普通的數(shù)據(jù)幀,不能阻止發(fā)送MAC控制幀。
PAUSE幀的目的MAC地址是保留的MAC地址0180-C200-0001,源MAC是發(fā)送PAUSE幀的設(shè)備MAC地址。MAC Control Opcode域的值為0x0001。PAUSE幀是MAC控制幀的一種。接收端設(shè)備出現(xiàn)擁塞的情況下,本段源端口通常會連續(xù)收到多個PAUSE幀。只要接收端設(shè)備的擁塞狀態(tài)沒有解除,相關(guān)的端口就會一直發(fā)送PAUSE。基于以太PAUSE機制的流控雖然可以預(yù)防丟包,但是會導致一條鏈路上的所有報文停止發(fā)送。為了解決這個問題,IEEE在802.1qbb中引入了優(yōu)先級流控功能PFC(基于優(yōu)先級的流量控制)也稱Per Priority Pause或CBFC(Class Based Flow Control)
PFC允許在一條以太鏈路上創(chuàng)建8個虛擬通道,并為每一個虛擬通道指定優(yōu)先級,允許單獨暫停和重啟其中任意一條虛擬通道,同時允許其他虛擬通道的流量無中斷通過。當隊列已使用的緩存降低到PFC門限值以下時,則向上游發(fā)送PFC反壓停止報文,通知上游重新發(fā)包,從而最終實現(xiàn)報文的零丟包傳輸。
無損網(wǎng)絡(luò)的擁塞控制
擁塞控制是對進入網(wǎng)絡(luò)的數(shù)據(jù)總量進行控制,使網(wǎng)絡(luò)流量保持在可接受水平的一種控制方法。
ECN(Explicit Congestion Notification)技術(shù):當流量接收端感知到網(wǎng)絡(luò)上的擁塞后,通過協(xié)議報文通知發(fā)送端,使流量發(fā)送端降低報文發(fā)送速率,從而從早期避免擁塞而導致的丟包,從而最大限度利用網(wǎng)絡(luò)性能。
DCQCN(Data Center Quantized Congestion Notification):目前在RoCEv2網(wǎng)絡(luò)種使用最廣泛的擁塞控制算法。融合了QCN算法和DCTCP算法,需要數(shù)據(jù)中心交換機支持WRED和ECN。DCQCN可以提供較好的公平性,實現(xiàn)高帶寬利用率,保證低的隊列緩存占用率和較少的隊列緩存抖動情況。
DCQCN算法由三個部分組成:交換機(CP,Congestion Point)、接收端提示點NP(Notification Point)、發(fā)送端反饋點RP(Reaction Point)。交換機發(fā)現(xiàn)出端口隊列超出閾值,在轉(zhuǎn)發(fā)報文時會按照一定概率給報文攜帶ECN擁塞標記(ECN字段設(shè)置為11),以標示網(wǎng)絡(luò)中存在的擁塞。標記過程由WRED(Weighted Random Early Detection)功能完成。RP根據(jù)收到的ECN擁塞標記向RP發(fā)送反壓信息。
圖1:DCQCN算法示意圖
ECN overlay:ECN Overlay將ECN(Explicit Congestion Notification)功能應(yīng)用到VXLAN中,Overlay網(wǎng)絡(luò)擁塞可以被及時感知,讓流量接收端通知發(fā)送端進行降速,緩解網(wǎng)絡(luò)擁塞。
iQCN(intelligent Quantized Congestion Notification):通過讓轉(zhuǎn)發(fā)設(shè)備智能補償發(fā)送CNP通知報文,解決流量發(fā)送端網(wǎng)絡(luò)未及時收到CNP報文而迅速升速帶來的網(wǎng)絡(luò)擁塞加劇的問題。具備iQCN功能的CP(Congestion Point)對收到的CNP報文進行記錄,維護包含CNP報文信息和時間戳的流表。CP會對本設(shè)備的端口擁塞程度進行持續(xù)監(jiān)測,端口擁塞較為嚴重時,比較CNP報文的時間間隔與網(wǎng)卡升速時間:若發(fā)現(xiàn)從NP收到的CNP報文的時間間隔小于RP的網(wǎng)卡升速時間,判斷網(wǎng)卡可以正常降速,CP正常轉(zhuǎn)發(fā)CNP報文;若發(fā)現(xiàn)從NP收到CNP報文的時間間隔大于RP的網(wǎng)卡升速時間,判斷網(wǎng)卡不能及時降速且存在升速風險,CP將會主動補償發(fā)送CNP報文。
無損網(wǎng)絡(luò)的流量調(diào)度技術(shù)
流量調(diào)度技術(shù)指的是網(wǎng)絡(luò)節(jié)點在轉(zhuǎn)發(fā)流量時,將負載(流量)分攤到多條鏈路上進行轉(zhuǎn)發(fā)。網(wǎng)絡(luò)中常用的負載分擔機制包括等價多路徑路由ECMP和鏈路聚合LAG。
ECMP(Equal-Cost Multi-Path routing)負載分擔:實現(xiàn)了等價多路徑負載均衡和鏈路備份的目的。ECMP應(yīng)用于多條鏈路到達同一目的地址的網(wǎng)絡(luò)環(huán)境中,當多條路由優(yōu)先級和度量都相同時,可以實現(xiàn)負載分擔;當多條路由優(yōu)先級和度量不相同時,可以實現(xiàn)路由備份。后者,發(fā)往目的地址的數(shù)據(jù)包只能利用其中的一條鏈路,其他鏈路處于備份狀態(tài)或無效狀態(tài),并且在動態(tài)路由環(huán)境下切換需要一定時間。ECMP負載分擔時,路由器將數(shù)據(jù)包的五元組(源地址、目的地址、源端口、目的端口、協(xié)議)作為哈希因子,通過HASH算法生成HASH-KEY,在負載分擔鏈路中選取一條成員鏈路對數(shù)據(jù)包進行轉(zhuǎn)發(fā)。正常情況下,路由器采用主路由轉(zhuǎn)發(fā)數(shù)據(jù)。當主鏈路出現(xiàn)故障時,主路由變?yōu)榉羌せ顮顟B(tài),路由器選擇備份路由中優(yōu)先級最高的路由轉(zhuǎn)發(fā)數(shù)據(jù)。當主鏈路恢復正常時,由于主路由的優(yōu)先級最高,路由器重新選擇主路由來發(fā)送數(shù)據(jù)。
LAG(Link Aggregation Group)負載分擔:將多個物理接口捆綁為一個邏輯接口,達到增加鏈路帶寬的目的。這個邏輯接口稱為聚合接口或Eth-Trunk接口。在使用Eth-Trunk轉(zhuǎn)發(fā)數(shù)據(jù)時,由于聚合組兩端設(shè)備之間有多條物理鏈路,有可能產(chǎn)生同一數(shù)據(jù)流的第一個數(shù)據(jù)幀在一條物理鏈路上傳輸,第二個數(shù)據(jù)幀在另外一條物理鏈路上傳輸,有可能產(chǎn)生數(shù)據(jù)包亂序的情況。通過采用逐流負載分擔的機制,將數(shù)據(jù)幀中的地址通過HASH算法生成HASH-KEY值,關(guān)聯(lián)Eth-Trunk轉(zhuǎn)發(fā)表中對應(yīng)的出接口,不同的MAC或IP地址HASH得出的HASH-KEY不同,出接口也不同,保證了同一數(shù)據(jù)流的幀在同一條陸離鏈路轉(zhuǎn)發(fā),又實現(xiàn)了流量在聚合組內(nèi)各物理鏈路上的負載分擔。
小 結(jié)
RDMA的高效運行依賴于無損網(wǎng)絡(luò)。“0丟包”、“低時延”、“高吞吐”是無損網(wǎng)絡(luò)三大核心特征。流量控制、擁塞控制、流量調(diào)度是無損網(wǎng)絡(luò)的三大核心技術(shù)。通過無損網(wǎng)絡(luò)的建設(shè),算力、網(wǎng)絡(luò)、存儲才能相互匹配,協(xié)同發(fā)揮更大的作用。