一、名词解释RDMA(Remote Direct Memory Access):远程直接内存访问 MTT(Memory Translation Table):内存翻译表 MPT(Memory Protection Table):内存保护表 LKEY(Local Key):本端密钥 RKEY(Remote Key…
L_Key的作用 R_Key 即Remote Key,关联到一个MR或者MW上,用于远端节点访问本端内存。当远端节点试图访问本端的内存时,一方面本端的HCA会校验R_Key是否合法,另一方面会利用R_Key中的索引查地址转换表,把虚拟地址翻译成物理地址然后访问内存。 凡是RDMA操作(即Write/Read/Atomic),用户都要在WR中携带远端内存区域的...
2) 如果实现支持 L_Key 和 R_Key 使用单个密钥空间,则 IETH 中包含的 R_Key 不得与保留的 L_Key 相同。3) 对于 HCA,R_Key 不得引用通过注册内存区域或重新注册内存区域创建的内存区域。4) 对于 HCA,R_Key 不得引用共享内存区域。5) 对于 HCA,R_Key 不得引用与接收 IETH 的 QP 不同的保护域关联...
数据被存档在A的buffer地址VA,注意VA应该提前注册到A的RNIC,并拿到返回的local key,相当于RDMA操作这块buffer的权限。 A把数据地址VA,key封装到专用的报文传送到B,这相当于A把数据buffer的操作权交给了B。同时A在它的WQ中注册进一个WR,以用于接收数据传输的B返回的状态。 B在收到A的送过来的数据VA和R_key后,...
L_Key R_Key 这里大家可能会有疑问,本端是如何知道对端节点的可用VA和对应的R_Key的?其实两端的节点在真正的RDMA通信之前,都会通过某些方式先建立一条链路(可能是Socket连接,也可能是CM连接)并通过这条链路交换一些RDMA通信所必须的信息(VA,Key,QPN等),我们称这一过程叫做“建链”和“握手”。我将在后面的文...
为避免内存非法访问,Memory Registration 会为目标内存生成两把内存密钥:Local Key (l_key) 和 Remote Key (r_key)。内存密钥实质是一串序列,本地或远端凭借 l_key 或 r_key 访问 RDMA 内存,确保内存访问合法。SMC-R 中,远程节点访问本地 RMB 所需的 addr 与 r_key 被封装为远程访问令牌 (Remote ...
A给自己的房间(MR)配了两把钥匙(Memory Key),一把留作自用(L_Key),另一把钥匙(R_Key)邮寄(可以是任何通信方式)给了B。B可以在A不在家的时候(本端CPU不感知远端节点对本地内存的RDMA操作),通过钥匙(R_Key)打开门。打开门之后,可能B只能隔着玻璃查看房间的摆设(A只给了这个MR远程读权限),或者进入房间内发...
B把数据地址VB,key封装到专用的报文传送到A,这相当于B把数据buffer的操作权交给了A。同时B在它的WQ中注册进一个WR,以用于接收数据传输的A返回的状态。 A在收到B的送过来的数据VB和R_key后,RNIC会把它们连同自身发送地址VA到封装RDMA WRITE请求,这个过程A、B两端不需要任何软件参与,就可以将A的数据发送到B的...
在注册过程中,用户设置内存权限并接收 lkey 和rkey,稍后将使用这些秘钥来访问此内存缓冲区: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /* 7 注册MR(Memory Region) */ int size = MSG_SIZE; res.buf = (char *)malloc(size); if (!res.buf) { fprintf(stderr, "...
其中lkey的赋值,由RDMA通信双方在建立连接时获得。 struct ib_send_wr { struct ib_sge *sg_list; <- 从这里进入 }; struct ib_sge { u64 addr; <-虚拟地址 u32 length; u32 lkey; }; 问题就在于地址信息都是VA地址并非PA地址,若两个节点要通信,那么就需要确保有双方能够相互理解的VA转换。因此...