五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【轉(zhuǎn)】RDMA 基礎(chǔ)

2023-09-11 04:54 作者:ACFUN-AK  | 我要投稿


RDMA 基礎(chǔ)


fxp2001640


關(guān)注

14 人贊同了該文章

目錄

收起

1,為什么需要RDMA

2,RDMA example

3,RDMA組件架構(gòu)

4,OFED Stack

5,隊(duì)列模型

6,RDMA服務(wù)類型

7,RDMA語(yǔ)義

8,RDMA核心概念

9,RDMA數(shù)據(jù)面流程

1,為什么需要RDMA

以TCP/IP為代表的傳統(tǒng)報(bào)文收發(fā)IO架構(gòu)有幾個(gè)痛點(diǎn):

  • ?數(shù)據(jù)多次拷貝(用戶態(tài)到內(nèi)核態(tài)再到硬件),

  • ?頻繁的中斷以及由此導(dǎo)致的多次上下文切換,

  • ?復(fù)雜冗長(zhǎng)的內(nèi)核協(xié)議棧,

  • ?需要消耗CPU來軟件處理解析報(bào)文頭。

這些問題導(dǎo)致傳統(tǒng)的TCP/IP形式的IO時(shí)延在30us-50us左右。這種時(shí)延已無法滿足越來越多的微秒級(jí)應(yīng)用(如NVMe存儲(chǔ)訪問)。

RDMA是一種遠(yuǎn)程直接內(nèi)存訪問技術(shù),它允許從用戶態(tài)向硬件提交對(duì)對(duì)端內(nèi)存的訪問,這個(gè)訪問也不被對(duì)端CPU感知而是直接在網(wǎng)卡里完成。相比于TCP/IP網(wǎng)絡(luò)RDMA有以下幾項(xiàng)性能優(yōu)勢(shì):

  • ?零拷貝,數(shù)據(jù)直接從用戶態(tài)到硬件不再經(jīng)過內(nèi)核態(tài)的拷貝;

  • ?Kernel bypass,數(shù)據(jù)路徑在用戶態(tài)和硬件之間完成,不再經(jīng)歷到內(nèi)核態(tài)的上下文切換;

  • ?CPU免打擾,read/write對(duì)端內(nèi)存不需要對(duì)端CPU參與,所有報(bào)文封裝解析,內(nèi)存搬運(yùn)都是由硬件完成。

這些特性使得RDMA的端到端時(shí)延可以降低至微秒級(jí),同時(shí)也使CPU的負(fù)載大大降低。RDMA本身可以over在4種傳輸層之上:infiniband,ethernet(RoCE V1),UDP/IP(RoCE V2),TCP/IP(iWARP),其中infiniband傳輸層需要專有硬件,而其他的都可以復(fù)用以太網(wǎng)。

2,RDMA example

dev_list = ibv_get_device_list(NULL); if (!strcmp(ibv_get_device_name(dev_list[i]), ib_devname)) ?ib_dev = dev_list[i]; ctx = ibv_open_device(ib_dev); pd = ibv_alloc_pd(ctx); mr = ibv_reg_mr(pd, buf, size, access_flags); cq = ibv_create_cq(ctx, rx_depth, NULL, NULL, 0); init_attr = { .send_cq = cq, .recv_cq = cq, .cap = { .max_recv_wr = rx_depth }, .qp_type = IBV_QPT_RC }; qp = ibv_create_qp(pd, &init_attr); attr = { .qp_state = IBV_QPS_INIT, .pkey_index = 0, .port_num = port, .qp_access_flags = 0 }; ibv_modify_qp(ctx->qp, &attr); ibv_post_recv(ctx->qp, &wr, &bad_wr); exchange (gid, lid, qpn, rkey, psn) with TCP socket attr = { .qp_state = IBV_QPS_RTR, .path_mtu = mtu, .dest_qp_num = dest->qpn, .rq_psn = dest->psn, }; ibv_modify_qp(ctx->qp, &attr); attr = { .qp_state = IBV_QPS_RTS, .sq_psn = my_psn }; ibv_modify_qp(ctx->qp, &attr); sge_list = { .addr = buf, .length = size, .lkey = lkey }; wr = { .wr_id = xxx, .sg_list = &list, .num_sge = 1, .opcode = IBV_WR_SEND, .send_flags = ctx->send_flags }; ibv_post_send(ctx->qp, &wr, &bad_wr); ibv_poll_cq(ctx, 1, &wc); process wc;

3,RDMA組件架構(gòu)

4,OFED Stack

Open Fabrics Enterprise Distribution(OFED)是一個(gè)開源軟件包集合,其中包含內(nèi)核框架和驅(qū)動(dòng)、用戶框架和驅(qū)動(dòng)、以及各種中間件、測(cè)試工具和API文檔。開源OFED由OFA組織負(fù)責(zé)開發(fā)、發(fā)布和維護(hù),它會(huì)定期從rdma-core和內(nèi)核的RDMA子系統(tǒng)取軟件版本,并對(duì)各商用OS發(fā)行版進(jìn)行適配。除了協(xié)議棧和驅(qū)動(dòng)外,還包含了perftest等測(cè)試工具。

5,隊(duì)列模型



6,RDMA服務(wù)類型

6.1 可靠(Reliable)

可靠服務(wù)在發(fā)送和接受者之間保證了信息最多只會(huì)傳遞一次,并且能夠保證其按照發(fā)送順序完整的被接收。IB通過以下三個(gè)機(jī)制來保證可靠性:

  • 應(yīng)答機(jī)制:可靠服務(wù)類型使用應(yīng)答機(jī)制ACK來保證數(shù)據(jù)包被對(duì)方收到。接收方可以累積方式ACK。

  • 數(shù)據(jù)校驗(yàn)機(jī)制:發(fā)端對(duì)Header和Payload計(jì)算CRC校驗(yàn)和放到數(shù)據(jù)包末尾。對(duì)端收到數(shù)據(jù)包后以相同算法計(jì)算出CRC,然后與數(shù)據(jù)包中CRC比對(duì),若不同則丟棄這個(gè)包。

  • 保序機(jī)制:保序是指先被發(fā)送到物理鏈路上的數(shù)據(jù)包一定要先于后發(fā)送的數(shù)據(jù)包被接收方收到。每個(gè)包都有一個(gè)PSN序號(hào),如收端收到了1和3,卻沒收到2,那么其就會(huì)認(rèn)為傳輸過程中發(fā)生了錯(cuò)誤,之后會(huì)回復(fù)一個(gè)NAK給發(fā)端,讓其重發(fā)丟失的包。

6.2 連接(connection)

連接是一條通信的“管道”,一旦管道建立好了,管道這端發(fā)出的數(shù)據(jù)一定會(huì)沿著這條管道到達(dá)另一端。對(duì)于基于連接的服務(wù)來說,每個(gè)QP都和另一個(gè)遠(yuǎn)端節(jié)點(diǎn)相關(guān)聯(lián)。在這種情況下,QP Context中包含有遠(yuǎn)端節(jié)點(diǎn)的QP信息。在建立通信的過程中,兩個(gè)節(jié)點(diǎn)會(huì)交換包括稍后用于通信的QP在內(nèi)的對(duì)端信息。

6.3 數(shù)據(jù)報(bào)(datagram):

對(duì)于數(shù)據(jù)報(bào)服務(wù)來說,QP不會(huì)跟一個(gè)唯一的遠(yuǎn)端節(jié)點(diǎn)綁定,而是通過WQE來指定目的節(jié)點(diǎn)。和連接類型的服務(wù)一樣,建立通信的過程也需要兩端交換對(duì)端信息,但是數(shù)據(jù)報(bào)服務(wù)對(duì)于每個(gè)目的節(jié)點(diǎn)都需要執(zhí)行一次這個(gè)交換過程。

6.4 Reliable Connection (RC):

QP只關(guān)聯(lián)至一個(gè)對(duì)端QP,消息被確??煽康貍鬏斨翆?duì)端,且消息是保序的,這非常類似于TCP連接。RC用于對(duì)數(shù)據(jù)完整性和可靠性要求較高的場(chǎng)景,跟TCP一樣,因?yàn)樾枰鞣N機(jī)制來保證可靠,所以開銷自然會(huì)大一些。另外由于RC服務(wù)類型和每個(gè)節(jié)點(diǎn)間需要各自維護(hù)一個(gè)QP,假設(shè)有N個(gè)幾點(diǎn)需要相互通信,那么需要N * (N - 1)個(gè)QP,而QP和QPC本身是需要占用網(wǎng)卡資源或者內(nèi)存的,當(dāng)節(jié)點(diǎn)數(shù)很多時(shí),存儲(chǔ)資源消耗將會(huì)非常大。

6.5 Unreliable Datagram (UD):

一個(gè)QP可以發(fā)送消息給任意對(duì)端,也可接收任意對(duì)端來的消息。不保證可靠性和傳輸順序,這非常類似UDP。UD硬件開銷小并且節(jié)省存儲(chǔ)資源,比如N個(gè)節(jié)點(diǎn)需要相互通信,只需要?jiǎng)?chuàng)建N個(gè)QP就可以了,但是可靠性跟UDP一樣沒法保證。用戶如果想基于UD服務(wù)類型實(shí)現(xiàn)可靠性,那么需要自己基于IB傳輸層實(shí)現(xiàn)應(yīng)用層的可靠傳輸機(jī)制。

7,RDMA語(yǔ)義

8,RDMA核心概念

9,RDMA數(shù)據(jù)面流程


編輯于 2022-09-24 12:27

RDMA



【轉(zhuǎn)】RDMA 基礎(chǔ)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
盐城市| 石家庄市| 武隆县| 永福县| 远安县| 秦皇岛市| 新昌县| 九龙县| 奉化市| 清远市| 三门县| 宁远县| 大厂| 四会市| 左权县| 五指山市| 玛多县| 晴隆县| 温泉县| 阳谷县| 平安县| 静安区| 锦州市| 塔河县| 德昌县| 鲁山县| 临武县| 眉山市| 桦南县| 丽江市| 保康县| 江陵县| 高陵县| 陕西省| 仙游县| 竹溪县| 郧西县| 天镇县| 崇左市| 黄石市| 盘锦市|