如下图所示,A节点想要通过IB协议向B节点的内存中写入一段数据,上层应用给本节点的RDMA网卡下发了一个WQE,WQE中包含了源内存地址、目的内存地址、数据长度和秘钥等信息,然后硬件会从内存中取出数据,组包发送到对端网卡。B节点的网卡收到数据后,解析到其中的目的内存地址,把数据写入到本节点的内存中。

APP提供的地址都是虚拟地址(Virtual Address,下文称VA),经过MMU的转换才能得到真实的物理地址(Physical Address,下文称PA),我们的RDMA网卡是如何得到PA从而去内存中拿到数据的呢?就算网卡知道上哪去取数据,如果用户恶意指定了一个非法的VA,那网卡岂不是有可能被“指使”去读写关键内存?
为了解决上面的问题,IB协议提出了MR的概念。
MR是什么
MR全称为Memory Region,指的是由RDMA软件层在内存中规划出的一片区域,用于存放收发的数据。IB协议中,用户在申请完用于存放数据的内存区域之后,都需要通过调用IB框架提供的API注册MR,才能让RDMA网卡访问这片内存区域。由下图可以看到,MR就是一片特殊的内存而已:
