存儲(chǔ)大師班 | 淺談 RDMA 與無(wú)損網(wǎng)絡(luò)

魏國(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)題。

file
file

圖-1

Layer 3 流量分類(lèi)

Layer3 使用 IP 包頭中的 TOS 前 6 位(DSCP)刁绒,支持 64 種不同的流量分類(lèi)方式闷营,TOS 的后兩位用作 Explicit Congestion Notification(ECN)Field, ECN 是一種端到端的流控方式知市,后面會(huì)有介紹傻盟。

file

圖-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ì)列,如下圖矾兜。

file

圖-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ò)程

file
  1. 發(fā)送端發(fā)送的 IP 報(bào)文標(biāo)記支持 ECN(10);
  2. 交換機(jī)在隊(duì)列擁塞情況下收到該報(bào)文未玻,將 ECN 字段修改為 11 并發(fā)出灾而,網(wǎng)絡(luò)中其他交換機(jī)透?jìng)鳎?/li>
  3. 接收端收到 ECN 為 11 的報(bào)文發(fā)現(xiàn)擁塞,正常處理該報(bào)文扳剿;
  4. 接收端產(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 即可;
  5. 交換機(jī)收到 CNP 報(bào)文后正常轉(zhuǎn)發(fā)該報(bào)文瞧掺;
  6. 發(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)的落地酿联。

更多文章

存儲(chǔ)大師班

對(duì)象存儲(chǔ)手把手教五 | 數(shù)據(jù)存取與加密

gg: 像寫(xiě) Golang 一樣生成代碼

QingStor 招聘存儲(chǔ)測(cè)試/運(yùn)維/研發(fā)工程師

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布终息!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贞让,隨后出現(xiàn)的幾起案子周崭,更是在濱河造成了極大的恐慌,老刑警劉巖喳张,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件续镇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡销部,警方通過(guò)查閱死者的電腦和手機(jī)摸航,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舅桩,“玉大人酱虎,你說(shuō)我怎么就攤上這事〗龋” “怎么了逢净?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)歼指。 經(jīng)常有香客問(wèn)我爹土,道長(zhǎng),這世上最難降的妖魔是什么踩身? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任胀茵,我火速辦了婚禮,結(jié)果婚禮上挟阻,老公的妹妹穿的比我還像新娘琼娘。我一直安慰自己,他們只是感情好附鸽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布脱拼。 她就那樣靜靜地躺著,像睡著了一般坷备。 火紅的嫁衣襯著肌膚如雪熄浓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天省撑,我揣著相機(jī)與錄音赌蔑,去河邊找鬼俯在。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娃惯,可吹牛的內(nèi)容都是我干的跷乐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼趾浅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愕提!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起皿哨,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤揪荣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后往史,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佛舱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年椎例,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片请祖。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡订歪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肆捕,到底是詐尸還是另有隱情刷晋,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布慎陵,位于F島的核電站眼虱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏席纽。R本人自食惡果不足惜捏悬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望润梯。 院中可真熱鬧过牙,春花似錦、人聲如沸纺铭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舶赔。三九已至扫倡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顿痪,已是汗流浹背镊辕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工油够, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人征懈。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓石咬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親卖哎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鬼悠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容