彈性RDMA(eRDMA)
相對(duì)于傳統(tǒng)的線下RDMA的應(yīng)用場(chǎng)景,阿里云普惠的彈性RDMA網(wǎng)絡(luò)可以用在更加豐富的場(chǎng)景,例如緩存數(shù)據(jù)庫(kù)(Redis)、大數(shù)據(jù)(Spark)、HPC(WRF)、AI訓(xùn)練等。基于彈性RDMA,您既可以將HPC應(yīng)用軟件部署在云上,以獲取成本更低、彈性更好的高性能應(yīng)用集群;也可以將VPC網(wǎng)絡(luò)替換成彈性RDMA網(wǎng)絡(luò),以加速您其他應(yīng)用的性能。
什么是彈性RDMA
彈性RDMA(Elastic Remote Direct Memory Access,簡(jiǎn)稱(chēng)eRDMA)是阿里云自研的云上彈性RDMA網(wǎng)絡(luò),底層鏈路復(fù)用VPC網(wǎng)絡(luò),采用全棧自研的擁塞控制CC(Congestion Control)算法,享有傳統(tǒng)RDMA網(wǎng)絡(luò)高吞吐、低延遲特性的同時(shí),可支持秒級(jí)的大規(guī)模RDMA組網(wǎng)。可兼容傳統(tǒng)HPC應(yīng)用、AI應(yīng)用以及傳統(tǒng)TCP/IP應(yīng)用。
為什么需要彈性RDMA
傳統(tǒng)的TCP/IP一直是業(yè)界主流的網(wǎng)絡(luò)通信協(xié)議,眾多應(yīng)用都是基于TCP/IP構(gòu)建的,但隨著數(shù)據(jù)中心相關(guān)業(yè)務(wù)的蓬勃發(fā)展,應(yīng)用對(duì)網(wǎng)絡(luò)的性能需求(如延遲、吞吐量)越來(lái)越高,受限于TCP/IP的局限性(如拷貝開(kāi)銷(xiāo)大、協(xié)議棧處理厚、CC算法復(fù)雜、上下文切換頻繁等),TCP/IP的網(wǎng)絡(luò)通信性能已經(jīng)成為應(yīng)用性能提升的瓶頸。
RDMA解決了這些痛點(diǎn)問(wèn)題。相對(duì)于TCP/IP,RDMA實(shí)現(xiàn)了零拷貝、內(nèi)核旁路等特性,避免了拷貝、頻繁的上下文切換等開(kāi)銷(xiāo),相較于TCP/IP的通信,達(dá)到了低延遲、高吞吐量以及低CPU占用。但是昂貴的價(jià)格以及運(yùn)維成本讓很多應(yīng)用望而卻步,RDMA的受眾相對(duì)較少。
阿里云的eRDMA從設(shè)計(jì)之初就是要做云上普惠的能力,既要滿(mǎn)足客戶(hù)對(duì)RDMA低延時(shí)的需求,又要降低大眾化場(chǎng)景的適配門(mén)檻,讓更多的應(yīng)用可以上云體驗(yàn)到更好的性能。
彈性RDMA的功能優(yōu)勢(shì)
高性能
RDMA繞過(guò)內(nèi)核協(xié)議棧,將數(shù)據(jù)直接從用戶(hù)態(tài)程序轉(zhuǎn)移到HCA中進(jìn)行網(wǎng)絡(luò)傳輸,極大地降低了CPU負(fù)載和延遲。eRDMA具有傳統(tǒng)RDMA網(wǎng)卡的優(yōu)點(diǎn),同時(shí)將傳統(tǒng)的RDMA技術(shù)應(yīng)用到VPC網(wǎng)絡(luò)下。超低的延遲讓用戶(hù)在云網(wǎng)絡(luò)中體驗(yàn)到RDMA帶來(lái)的優(yōu)越性能。
說(shuō)明HCA(Host Channel Adapter)是一種通常以網(wǎng)絡(luò)接口卡(NIC)形態(tài)出現(xiàn)的硬件設(shè)備,用于連接服務(wù)器與網(wǎng)絡(luò),并提供對(duì)RDMA技術(shù)的支持。
普惠
無(wú)償啟用eRDMA。您只需在購(gòu)買(mǎi)實(shí)例時(shí),勾選eRDMA選項(xiàng),即可實(shí)現(xiàn)eRDMA網(wǎng)絡(luò)的開(kāi)啟,無(wú)需再額外付費(fèi)。
規(guī)模部署
傳統(tǒng)的RDMA依賴(lài)于網(wǎng)絡(luò)的無(wú)損特性,規(guī)模部署成本高、規(guī)模部署困難。而eRDMA在實(shí)現(xiàn)中采用了自研的擁塞控制CC算法,容忍VPC網(wǎng)絡(luò)中的傳輸質(zhì)量變化(延遲、丟包等),在有損的網(wǎng)絡(luò)環(huán)境中依然擁有良好的性能表現(xiàn)。
彈性擴(kuò)展
不同于傳統(tǒng)的RDMA網(wǎng)卡需要單獨(dú)一個(gè)硬件網(wǎng)卡,eRDMA是基于神龍架構(gòu)的一款原生帶有云屬性的RDMA HCA卡,可以在使用ECS的過(guò)程中動(dòng)態(tài)添加設(shè)備,支持熱遷移,部署十分靈活。
共享VPC網(wǎng)絡(luò)
eRDMA依附于彈性網(wǎng)卡(ENI),網(wǎng)絡(luò)可完全復(fù)用,可以在不改變業(yè)務(wù)組網(wǎng)的情況下,在原來(lái)的網(wǎng)絡(luò)下激活RDMA功能,體驗(yàn)到RDMA的優(yōu)勢(shì)。
如何實(shí)現(xiàn)彈性RDMA通信
ECS實(shí)例使能eRDMA:阿里云提供了靈活方便的配置選項(xiàng),方便您快速為ECS配置eRDMA,實(shí)現(xiàn)VPC網(wǎng)絡(luò)下激活RDMA功能,建立RDMA連接進(jìn)行通信。詳細(xì)信息,請(qǐng)參見(jiàn)eRDMA使用方法。
應(yīng)用快速適配eRDMA:如果您希望在應(yīng)用程序中實(shí)現(xiàn)和配置RDMA相關(guān)的邏輯,以滿(mǎn)足低延遲、高帶寬和低CPU占用等場(chǎng)景,您可以通過(guò)NetACC、SMC等方式對(duì)應(yīng)用進(jìn)行適配。詳細(xì)信息,請(qǐng)參見(jiàn)應(yīng)用適配概述。
彈性RDMA的基礎(chǔ)能力和規(guī)格
在RDMA網(wǎng)絡(luò)通信中,QP(Queue Pair)、CQ(Completion Queue)、MR(Memory Region)和verbs Opcode是幾個(gè)核心的組件,它們?cè)赗DMA通信中扮演著重要的角色,共同確保了RDMA網(wǎng)絡(luò)通信的高效性和低延遲性。
當(dāng)您在應(yīng)用中使用eRDMA時(shí),需要確保應(yīng)用滿(mǎn)足產(chǎn)品的能力規(guī)格約束,否則可能會(huì)導(dǎo)致您的應(yīng)用無(wú)法正常工作。
隊(duì)列對(duì)(QP)
QP(Queue Pair)是RDMA中的基本通信實(shí)體,由一個(gè)發(fā)送隊(duì)列(Send Queue,SQ)和一個(gè)接收隊(duì)列(Receive Queue,RQ)組成。QP負(fù)責(zé)管理發(fā)送和接收的數(shù)據(jù)。
作用:QP允許應(yīng)用程序發(fā)送和接收數(shù)據(jù),它是RDMA通信的核心。QP的狀態(tài)機(jī)管理著連接的狀態(tài),從初始化到終止。
eRDMA QP的基本規(guī)格:
規(guī)格名稱(chēng)
規(guī)格
說(shuō)明
建鏈方式
RDMA_CM
RDMA_CM用于管理RDMA連接的建立、維護(hù)和關(guān)閉,簡(jiǎn)化了RDMA連接的管理過(guò)程,使應(yīng)用程序可以更方便地使用RDMA功能。常用于MPI、SMC-R、PolarDB SCC等場(chǎng)景下。詳細(xì)信息,請(qǐng)參見(jiàn)Linux rdma_cm。
eRDMA提供了兼容模式(compat mode)用于OOB場(chǎng)景下的應(yīng)用,如Tensorflow、NCCL、BRPC等。
重要您可以通過(guò)命令行方式,實(shí)現(xiàn)RDMA_CM和OOB建鏈方式的兼容。詳細(xì)信息,請(qǐng)參見(jiàn)修改eRDMA與bRPC的建鏈模式以實(shí)現(xiàn)兼容。
兼容模式下,會(huì)額外占用30608-30623范圍內(nèi)的16個(gè)TCP端口。
QP類(lèi)型
RC
RC類(lèi)型的QP提供可靠的連接服務(wù)。它支持send操作、RDMA write操作、RDMA read操作和atomic操作。
SRQ(Shared Receive Queue)
不支持
無(wú)。
最大QP數(shù)目max_qp_num
和實(shí)例規(guī)格族有關(guān),最大支持131,071
指的是一個(gè)RDMA設(shè)備或網(wǎng)絡(luò)接口上可以創(chuàng)建的最大隊(duì)列對(duì)(QP)數(shù)量。
它決定了RDMA網(wǎng)絡(luò)可以支持的最大并發(fā)連接數(shù),從而影響網(wǎng)絡(luò)的擴(kuò)展性和并發(fā)處理能力。
最大的發(fā)送WR深度max_send_wr
8,192
表示一個(gè)QP發(fā)送隊(duì)列的最大工作請(qǐng)求(Work Request)數(shù)量。
它決定了QP可以同時(shí)發(fā)起的發(fā)送操作的數(shù)量,影響QP的發(fā)送性能和吞吐量。
最大的接收WR深度max_recv_wr
32,768
表示一個(gè)QP接收隊(duì)列的最大工作請(qǐng)求數(shù)量。
它決定了QP可以同時(shí)處理的接收操作的數(shù)量,影響QP的接收性能和吞吐量。
最大的發(fā)送SGE數(shù)目max_send_sge
說(shuō)明Sge是指散射-聚集元素(Scatter-Gather Element)。
6
單個(gè)send wr支持的離散地址數(shù)目。
它決定了QP在一次發(fā)送操作中可以處理的最大內(nèi)存片段數(shù)量,影響數(shù)據(jù)傳輸?shù)男屎挽`活性。
最大的接收SGE數(shù)目max_recv_sge
1
單個(gè)recv wr支持的離散地址數(shù)目。
它決定了QP在一次接收操作中可以處理的最大內(nèi)存片段數(shù)量,影響數(shù)據(jù)接收的效率和靈活性。
完成隊(duì)列(CQ)
CQ(Completion Queue)用于通知應(yīng)用程序工作請(qǐng)求(Work Request,WR)的完成情況。當(dāng)RDMA操作(如發(fā)送或接收)完成時(shí),相關(guān)的完成信息會(huì)被放入CQ。
作用:CQ是RDMA中異步操作完成通知的關(guān)鍵,它幫助應(yīng)用程序管理異步事件和錯(cuò)誤處理。它提供了一種機(jī)制,讓?xiě)?yīng)用程序能夠知道哪些操作已經(jīng)完成,這對(duì)于異步操作的管理至關(guān)重要。
eRDMA CQ的基本規(guī)格:
規(guī)格名稱(chēng)
規(guī)格
說(shuō)明
CQ(Completion Queue)數(shù)目
依據(jù)實(shí)例規(guī)格,最大CQ數(shù)為QP數(shù)的兩倍
無(wú)
CQ的完成向量數(shù)目vector_num
依據(jù)實(shí)例規(guī)格(CPU和QP數(shù)有關(guān)),最大不超過(guò)31
每個(gè)vector會(huì)對(duì)應(yīng)一個(gè)硬件中斷。實(shí)際使用中,每個(gè)CPU配置至多一個(gè)vector就可以滿(mǎn)足通信需求。
每個(gè)vector會(huì)關(guān)聯(lián)一個(gè)eRDMA內(nèi)部的CEQ(Completion Event Queue)隊(duì)列。
最大CEQ深度
4096
0.2.34版本的CEQ深度為256。
如果使用event模式,建議每個(gè)vector綁定的CQ隊(duì)列數(shù)不超過(guò)4096,否則可能出現(xiàn)CEQ隊(duì)列溢出的風(fēng)險(xiǎn)。
最大CQ隊(duì)列深度
1,048,576
無(wú)。
RDMA內(nèi)存管理
MR(Memory Region)和MW(Memory Window)是RDMA中用于內(nèi)存管理的兩個(gè)重要概念。
MR(Memory Region):代表一塊可以被RDMA訪問(wèn)的內(nèi)存區(qū)域。通過(guò)注冊(cè)MR,應(yīng)用程序可以讓RDMA硬件直接訪問(wèn)這塊內(nèi)存區(qū)域。
作用:MR使得RDMA能夠直接在遠(yuǎn)程主機(jī)的內(nèi)存上執(zhí)行操作,如讀寫(xiě)操作,這是RDMA零拷貝特性的基礎(chǔ)。
eRDMA MR的基本規(guī)格:
規(guī)格名
規(guī)格
MR數(shù)目
依據(jù)實(shí)例規(guī)格,最大MR數(shù)為QP數(shù)的兩倍
Max MR size
依據(jù)底層硬件,最小支持2 GB、最大支持64 GB
MW(Memory Window):阿里云目前不支持MW。
verbs接口
verbs是RDMA編程的基礎(chǔ),它定義了一組接口,用于控制RDMA設(shè)備的行為。Opcode是這些接口中用于指定具體操作類(lèi)型的代碼。
作用:Opcode定義了RDMA操作的類(lèi)型,如發(fā)送(SEND)、接收(RECEIVE)、讀取(READ)、寫(xiě)入(WRITE)等,它們告訴RDMA硬件需要執(zhí)行的具體動(dòng)作,允許應(yīng)用程序直接與RDMA硬件交互,實(shí)現(xiàn)高效的數(shù)據(jù)傳輸。
Opcode支持情況:
Opcode
支持情況
RDMA Write
支持
RDMA Write with Immediate
支持
RDMA Read
支持
Send
支持
Send with Invalidate
支持
Send with Immediate
支持
Send with Solicited Event
支持
Local Invalidate
支持
Atomic Operation
支持