魏國(guó)武 QingStor 資深研發(fā)工程師
近 10 年企業(yè)級(jí)軟件開(kāi)發(fā)經(jīng)驗(yàn)酱虎,專(zhuān)注于大規(guī)模分布式存儲(chǔ)研發(fā)仅乓,擅長(zhǎng)集群性能調(diào)優(yōu)鉴嗤、高可用研究及容災(zāi)。
為什么需要 RDMA
當(dāng)今是云計(jì)算艳悔、大數(shù)據(jù)的時(shí)代涩盾,企業(yè)業(yè)務(wù)持續(xù)增長(zhǎng)需要存儲(chǔ)系統(tǒng)的 IO 性能也持續(xù)增長(zhǎng)虑绵。傳統(tǒng)的 TCP/IP 技術(shù)在數(shù)據(jù)包處理過(guò)程中冶共,要經(jīng)過(guò)操作系統(tǒng)及其他軟件層,數(shù)據(jù)在系統(tǒng)內(nèi)存邑滨、處理器緩存和網(wǎng)絡(luò)控制器緩存之間來(lái)回進(jìn)行復(fù)制日缨,給服務(wù)器的 CPU 和內(nèi)存造成了沉重負(fù)擔(dān)。尤其是網(wǎng)絡(luò)帶寬掖看、處理器速度與內(nèi)存帶寬三者的嚴(yán)重"不匹配性"匣距,更加劇了網(wǎng)絡(luò)延遲效應(yīng)。為了降低數(shù)據(jù)中心內(nèi)部網(wǎng)絡(luò)延遲哎壳,提高帶寬毅待,RDMA 技術(shù)應(yīng)運(yùn)而生。RDMA 允許用戶(hù)態(tài)的應(yīng)用程序直接讀取和寫(xiě)入遠(yuǎn)程內(nèi)存归榕,避免了數(shù)據(jù)拷貝和上下文切換尸红;并將網(wǎng)絡(luò)協(xié)議棧從軟件實(shí)現(xiàn) offload 到網(wǎng)卡硬件,實(shí)現(xiàn)了高吞吐量刹泄、超低時(shí)延和低 CPU 開(kāi)銷(xiāo)的效果外里。
當(dāng)前 RDMA 在以太網(wǎng)上的傳輸協(xié)議是 RoCEv2,RoCEv2 是基于無(wú)連接協(xié)議的 UDP 協(xié)議特石,相比面向連接的 TCP 協(xié)議级乐,UDP 協(xié)議更加快速、占用 CPU 資源更少县匠,但其傳輸是不可靠的,一旦出現(xiàn)丟包會(huì)導(dǎo)致 RDMA 的傳輸效率降低,這是由 RDMA 的 Go-back-N 重傳機(jī)制決定的乞旦。RDMA 接收方網(wǎng)卡發(fā)現(xiàn)丟包時(shí)贼穆,會(huì)丟棄后續(xù)接收到的數(shù)據(jù)包,發(fā)送方需要重發(fā)之后的所有數(shù)據(jù)包兰粉,這導(dǎo)致性能大幅下降故痊。所以要想 RDMA 發(fā)揮出其性能,需要為其搭建一套不丟包的無(wú)損網(wǎng)絡(luò)環(huán)境玖姑。
差異化流量分類(lèi)
構(gòu)建無(wú)損網(wǎng)絡(luò)愕秫,首先需要對(duì)網(wǎng)絡(luò)流量進(jìn)行分類(lèi),然后針對(duì)不同類(lèi)別流量采用具體流控策略焰络,實(shí)現(xiàn)精確控制戴甩,避免相互影響。流量分類(lèi)有兩種不同的分類(lèi)方法:傳輸層(Layer 2)和網(wǎng)絡(luò)層(Layer 3)闪彼。Layer2 通過(guò) vlan header(802.1q)里的 PCP(802.1p)位進(jìn)行分類(lèi)甜孤,對(duì)應(yīng) CoS(Class of Service);Layer3 通過(guò) IP header 里的 DSCP 進(jìn)行分類(lèi)畏腕,對(duì)應(yīng) DSCP缴川。
Layer 2 流量分類(lèi)
Layer2 層流量分類(lèi)依據(jù)的是 vlan tag 中的 3 位 PCP bit,總共有 8 個(gè)類(lèi)別描馅。3 個(gè) bit 是 Header 中第 3 個(gè) byte 的前三位把夸,如下圖。在使用 Layer 2 流量分類(lèi)時(shí)铭污,主機(jī)端發(fā)出的包需要帶有 vlan tag恋日。因此要對(duì)網(wǎng)卡配置 vlan,并且設(shè)置優(yōu)先級(jí)况凉。因?yàn)?L2 層 PFC 需要依靠 vlan谚鄙,因此包經(jīng)過(guò)三層交換機(jī)時(shí)可能存在 tag 失效等問(wèn)題。
圖-1
Layer 3 流量分類(lèi)
Layer3 使用 IP 包頭中的 TOS 前 6 位(DSCP)刁绒,支持 64 種不同的流量分類(lèi)方式闷营,TOS 的后兩位用作 Explicit Congestion Notification(ECN)Field, ECN 是一種端到端的流控方式知市,后面會(huì)有介紹傻盟。
圖-2
選擇 Layer2 還是 Layer3 層流控
在交換機(jī)支持 DSCP 的條件下,建議使用 L3 層的流控方式嫂丙。從前面的介紹可以看到娘赴,L3 層的控制方式可跨多層交換機(jī),DSCP 值在端到端的傳輸過(guò)程中不會(huì)發(fā)生變化跟啤。RoCE 使用 UDP 報(bào)文進(jìn)行數(shù)據(jù)傳輸诽表,建議 RoCE 的流控使用基于 DSCP 的方式唉锌。
構(gòu)建無(wú)損網(wǎng)絡(luò)
基于 DSCP 或 PCP 的 PFC 流控機(jī)制
IEEE 802.1Qbb(Priority-based Flow Control,基于優(yōu)先級(jí)的流量控制)簡(jiǎn)稱(chēng) PFC竿奏,是 IEEE 數(shù)據(jù)中心橋接(Data Center Bridge)協(xié)議族中的一個(gè)技術(shù)袄简,是流量控制的增強(qiáng)版。
我們先看一下 IEEE 802.3X(Flow Control)流控的機(jī)制:當(dāng)接收者沒(méi)有能力處理接收到的報(bào)文時(shí)泛啸,為了防止報(bào)文被丟棄绿语,接收者需要通知報(bào)文的發(fā)送者暫時(shí)停止發(fā)送。IEEE 802.3X 協(xié)議存在一個(gè)缺點(diǎn):一旦鏈路被暫停候址,發(fā)送方就不能再發(fā)送任何數(shù)據(jù)包吕粹,如果是因?yàn)槟承﹥?yōu)先級(jí)較低的數(shù)據(jù)流引發(fā)的暫停,結(jié)果卻讓該鏈路上其他更高優(yōu)先級(jí)的數(shù)據(jù)流也一起被暫停了岗仑,這是得不償失的匹耕。
PFC 在基礎(chǔ)流控 IEEE 802.3X 基礎(chǔ)上進(jìn)行擴(kuò)展,允許在一條以太網(wǎng)鏈路上創(chuàng)建 8 個(gè)虛擬通道赔蒲,并為每條虛擬通道指定相應(yīng)優(yōu)先級(jí)泌神,允許單獨(dú)暫停和重啟其中任意一條虛擬通道,同時(shí)允許其它虛擬通道的流量無(wú)中斷通過(guò)舞虱。PFC 將流控的粒度從物理端口細(xì)化到8個(gè)虛擬通道欢际,分別對(duì)應(yīng) Smart NIC 硬件上的 8 個(gè)硬件發(fā)送隊(duì)列,如下圖矾兜。
圖-3
在二層網(wǎng)絡(luò)中损趋,PFC 使用 vlan 中的 PCP 位來(lái)對(duì)數(shù)據(jù)流進(jìn)行區(qū)分;在三層網(wǎng)絡(luò)中椅寺,PFC 既可以使用 PCP浑槽,也可以使用 DSCP,使得不同數(shù)據(jù)流可以享受到獨(dú)立的流控制返帕。當(dāng)下數(shù)據(jù)中心因多采用三層網(wǎng)絡(luò)桐玻,且 DSCP 值在端到端的傳輸過(guò)程中不會(huì)發(fā)生變化,故推薦使用 DSCP荆萤。
RDMA 無(wú)損網(wǎng)絡(luò)中利用 PFC 流控機(jī)制镊靴,實(shí)現(xiàn)了交換機(jī)端口緩存溢出前暫停對(duì)端流量,阻止了丟包現(xiàn)象發(fā)生链韭,但因?yàn)樾枰患?jí)一級(jí)反壓偏竟,效率較低,而且存在不公平問(wèn)題和 Head-of-Line 堵塞問(wèn)題敞峭。此外踊谋,PFC 是通過(guò)下游網(wǎng)絡(luò)設(shè)備對(duì)上游設(shè)備的控制方式達(dá)到不丟包的目的,但最有效的流控應(yīng)該是控制產(chǎn)生數(shù)據(jù)的源端主機(jī)的發(fā)送速度旋讹,使得主機(jī)往網(wǎng)絡(luò)中注入數(shù)據(jù)速度放緩殖蚕,這是解決問(wèn)題的根本方法轿衔。
基于三層網(wǎng)絡(luò)的擁塞管理(ECN與DCQCN)
DCQCN 是基于交換機(jī)和網(wǎng)卡上的 ECN 技術(shù)來(lái)實(shí)現(xiàn) Rocev2 的一種綜合流控技術(shù)。使能ECN(Explicit Congestion Notification 顯式擁塞通知)睦疫,交換機(jī)會(huì)在檢測(cè)到擁塞時(shí)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包打標(biāo)記呀枢,在 IP 數(shù)據(jù)包頭部嵌入一個(gè)擁塞指示器,可以通知客戶(hù)端降低數(shù)據(jù)包發(fā)送頻率笼痛,是一種端到端的擁塞管理方案。該功能可以用于 RoCEv2 的擁塞控制琅拌。
ECN 使用 IP 頭部的兩個(gè) bit 來(lái)表示缨伊,這兩個(gè) bit 分別叫做 ECT(ECN-capable Transport)位和CE(Congestion Experienced)位。這兩個(gè) bit 是 IP 頭部的 DSCP 域中的第 6/7 位进宝,見(jiàn)圖 2刻坊。ECN 值為 01 或 10 表示數(shù)據(jù)發(fā)送端使能 ECN;00 表示未使用ECN党晋;11 表示發(fā)生擁塞谭胚。
ECN 值 | 含義 |
---|---|
0 | 未使用或不支持 ECN |
1 | 發(fā)送端使能 ECN |
10 | 發(fā)送端使能 ECN |
11 | 發(fā)生擁塞 |
ECN 的交互過(guò)程
- 發(fā)送端發(fā)送的 IP 報(bào)文標(biāo)記支持 ECN(10);
- 交換機(jī)在隊(duì)列擁塞情況下收到該報(bào)文未玻,將 ECN 字段修改為 11 并發(fā)出灾而,網(wǎng)絡(luò)中其他交換機(jī)透?jìng)鳎?/li>
- 接收端收到 ECN 為 11 的報(bào)文發(fā)現(xiàn)擁塞,正常處理該報(bào)文扳剿;
- 接收端產(chǎn)生擁塞通告旁趟,每 ms 級(jí)發(fā)送一個(gè) CNP(Congestion Notification Packets)報(bào)文,ECN 字段為 01庇绽,要求報(bào)文不能被網(wǎng)絡(luò)丟棄锡搜。接收端對(duì)多個(gè)被 ECN 標(biāo)記為同一個(gè) QP 的數(shù)據(jù)包發(fā)送一個(gè)單個(gè) CNP 即可;
- 交換機(jī)收到 CNP 報(bào)文后正常轉(zhuǎn)發(fā)該報(bào)文瞧掺;
- 發(fā)送端收到 ECN 標(biāo)記為 01 的 CNP 報(bào)文解析后對(duì)相應(yīng)的流(對(duì)應(yīng)啟用 ECN 的 QP)應(yīng)用速率限制算法耕餐。
需要注意的是,CNP 作為擁塞控制報(bào)文辟狈,從發(fā)送端到接收端經(jīng)過(guò)的每一臺(tái)設(shè)備肠缔、每一條鏈路都會(huì)有一定的延遲,會(huì)最終加大發(fā)送端接收到 CNP 的時(shí)間上陕,若發(fā)送端不能及時(shí)降速桩砰,仍然可能造成丟包。建議同時(shí)配置 ECN 和 PFC释簿,通過(guò)調(diào)整兩者的 buffer 水線(xiàn)亚隅,讓 ECN 快于 PFC 觸發(fā),使發(fā)送端降低發(fā)送速率庶溶。若 ECN 未及時(shí)觸發(fā)煮纵,需要觸發(fā) PFC 使上游交換機(jī)暫停發(fā)包懂鸵,以避免 buffer 溢出導(dǎo)致丟包。
總結(jié)
我們?cè)谌龑泳W(wǎng)絡(luò)以 DSCP 方式對(duì)網(wǎng)絡(luò)流量分類(lèi)實(shí)現(xiàn)了對(duì) RDMA 流量的精確控制行疏,通過(guò)配置 PFC 和 ECN 構(gòu)建無(wú)損網(wǎng)絡(luò)解決了丟包問(wèn)題匆光,從而保證了 RDMA 網(wǎng)絡(luò)高吞吐量、超低時(shí)延和低 CPU 開(kāi)銷(xiāo)的落地酿联。
更多文章
對(duì)象存儲(chǔ)手把手教五 | 數(shù)據(jù)存取與加密
QingStor 招聘存儲(chǔ)測(cè)試/運(yùn)維/研發(fā)工程師
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布终息!