RDMA(遠程直接數(shù)據(jù)存取),以其對業(yè)務(wù)帶來的高性能、低延時優(yōu)勢,在數(shù)據(jù)中心尤其是AI、HPC、大數(shù)據(jù)等場景得到了廣泛應(yīng)用。為保障RDMA的穩(wěn)定運行,基礎(chǔ)網(wǎng)絡(luò)需要提供端到端無損零丟包及超低延時的能力,這也催生了PFC、ECN等網(wǎng)絡(luò)流控技術(shù)在RDMA網(wǎng)絡(luò)中的部署。在RDMA網(wǎng)絡(luò)中,如何合理設(shè)置MMU(緩存管理單元)水線是保證RDMA網(wǎng)絡(luò)無損和低延時的關(guān)鍵。本文將以RDMA網(wǎng)絡(luò)作為切入點,結(jié)合實際部署經(jīng)驗,分析MMU水線設(shè)置的一些思路。
什么是RDMA?
RDMA(Remote Direct Memory Access),通俗的說就是遠程的DMA技術(shù),是為了解決網(wǎng)絡(luò)傳輸中服務(wù)器端數(shù)據(jù)處理的延遲而產(chǎn)生的。
▲ 傳統(tǒng)模式與RDMA模式工作機制對比
如上圖,在傳統(tǒng)模式下,兩臺服務(wù)器上的應(yīng)用之間傳輸數(shù)據(jù),過程是這樣的:
● 首先要把數(shù)據(jù)從應(yīng)用緩存拷貝到Kernel中的TCP協(xié)議棧緩存;
● 然后再拷貝到驅(qū)動層;
● 最后拷貝到網(wǎng)卡緩存。
多次內(nèi)存拷貝需要CPU多次介入,導(dǎo)致處理延時大,達到數(shù)十微秒。同時整個過程中CPU過多參與,大量消耗CPU性能,影響正常的數(shù)據(jù)計算。
在RDMA 模式下,應(yīng)用數(shù)據(jù)可以繞過Kernel協(xié)議棧直接向網(wǎng)卡寫數(shù)據(jù),帶來的顯著好處有:
● 處理延時由數(shù)十微秒降低到1微秒內(nèi);
● 整個過程幾乎不需要CPU參與,節(jié)省性能;
● 傳輸帶寬更高。
RDMA對于網(wǎng)絡(luò)的訴求
RDMA在高性能計算、大數(shù)據(jù)分析、IO高并發(fā)等場景中應(yīng)用越來越廣泛。諸如iSICI, SAN, Ceph, MPI, Hadoop, Spark, Tensorflow等應(yīng)用軟件都開始部署RDMA技術(shù)。而對于支撐端到端傳輸?shù)幕A(chǔ)網(wǎng)絡(luò)而言,低延時(微秒級)、無損(lossless)則是最重要的指標。
低延時
網(wǎng)絡(luò)轉(zhuǎn)發(fā)延時主要產(chǎn)生在設(shè)備節(jié)點(這里忽略了光電傳輸延時和數(shù)據(jù)串行延時),設(shè)備轉(zhuǎn)發(fā)延時包括以下三部分:
● 存儲轉(zhuǎn)發(fā)延時:芯片轉(zhuǎn)發(fā)流水線處理延遲,每個hop會產(chǎn)生1微秒左右的芯片處理延時(業(yè)界也有嘗試使用cut-through模式,單跳延遲可以降低到0.3微秒左右);
● Buffer緩存延時:當網(wǎng)絡(luò)擁塞時,報文會被緩存起來等待轉(zhuǎn)發(fā)。這時Buffer越大,緩存報文的時間就越長,產(chǎn)生的時延也會更高。對于RDMA網(wǎng)絡(luò),Buffer并不是越大越好,需要合理選擇;
● 重傳延時:在RDMA網(wǎng)絡(luò)里會有其他技術(shù)保證不丟包,這部分不做分析。
無損
RDMA在無損狀態(tài)下可以滿速率傳輸,而一旦發(fā)生丟包重傳,性能會急劇下降。在傳統(tǒng)網(wǎng)絡(luò)模式下,要想實現(xiàn)不丟包最主要的手段就是依賴大緩存,但如前文所說,這又與低延時矛盾了。因此,在RDMA網(wǎng)絡(luò)環(huán)境中,需要實現(xiàn)的是較小Buffer下的不丟包。
在這個限制條件下,RDMA實現(xiàn)無損主要是依賴基于PFC和ECN的網(wǎng)絡(luò)流控技術(shù)。
PFC
PFC(Priority-based Flow Control),基于優(yōu)先級的流量控制。是一種基于隊列的反壓機制,通過發(fā)送Pause幀通知上游設(shè)備暫停發(fā)包來防止緩存溢出丟包。
▲ PFC工作機制示意圖
PFC允許單獨暫停和重啟其中任意一條虛擬通道,同時不影響其它虛擬通道的流量。如上圖所示,當隊列7的Buffer消耗達到設(shè)置的PFC流控水線,會觸發(fā)PFC的反壓:
● 本端交換機觸發(fā)發(fā)出PFC Pause幀,并反向發(fā)送給上游設(shè)備;
● 收到Pause幀的上游設(shè)備會暫停該隊列報文的發(fā)送,同時將報文緩存在Buffer中;
● 如果上游設(shè)備的Buffer也達到閾值,會繼續(xù)觸發(fā)Pause幀向上游反壓;
● 最終通過降低該優(yōu)先級隊列的發(fā)送速率來避免數(shù)據(jù)丟包;
● 當Buffer占用降低到恢復(fù)水線時,會發(fā)送PFC解除報文。
RDMA無損網(wǎng)絡(luò)的關(guān)鍵技術(shù):ECN
ECN(Explicit Congestion Notification):顯示擁塞通知。ECN是一個非常古老的技術(shù),只是之前使用的并不普遍,該協(xié)議機制作用于主機與主機之間。
ECN是報文在網(wǎng)絡(luò)設(shè)備出口(Egress port)發(fā)生擁塞并觸發(fā)ECN水線時,使用IP報文頭的ECN字段標記數(shù)據(jù)包,表明該報文遇到網(wǎng)絡(luò)擁塞。一旦接收服務(wù)器發(fā)現(xiàn)報文的ECN被標記,立刻產(chǎn)生CNP(擁塞通知報文),并將它發(fā)送給源端服務(wù)器,CNP消息里包含了導(dǎo)致?lián)砣腇low信息。源端服務(wù)器收到后,通過降低相應(yīng)流發(fā)送速率,緩解網(wǎng)絡(luò)設(shè)備擁塞,從而避免發(fā)生丟包。
評論