原文:https://zhuanlan.zhihu.com/p/156975042
我们假设一种场景,同时也顺便温习一下RDMA WRITE操作的流程:
如下图所示,A节点想要通过IB协议向B节点的内存中写入一段数据,上层应用给本节点的RDMA网卡下发了一个WQE,WQE中包含了源内存地址、目的内存地址、数据长度和秘钥等信息,然后硬件会从内存中取出数据,组包发送到对端网卡。B节点的网卡收到数据后,解析到其中的目的内存地址,把数据写入到本节点的内存中。
![](https://i-blog.csdnimg.cn/blog_migrate/b6221c763dccc49708eb594dbc33d643.png)
那么问题来了,APP提供的地址都是虚拟地址(Virtual Address,下文称VA),经过MMU的转换才能得到真实的物理地址(Physical Address,下文称PA),我们的RDMA网卡是如何得到PA从而去内存中拿到数据的呢?就算网卡知道上哪去取数据,如果用户恶意指定了一个非法的VA,那网卡岂不是有可能被“指使”去读写关键内存?
为了解决上面的问题,IB协议提出了MR的概念。