Notes about RDMA MPT and MTT
本文将mark RDMA的MPT(Memory Protection Table) and MTT(Memory Translation Table)相关notes。
流程


每一次内存访问都会指定一个mkey和一个VA地址,mkey来自WQE或报文里的LKEY/RKEY,它是一个32bits的地址空间标识,包含index和key两部分。MTT地址翻译过程如下:
- 使用mkey.index索引mkey context table(MPT)得到mkey context。
- Key检查:对比mkey.key和mkey context里的key是否一致。
- PD检查:对比发起内存访问的QP里的PD和mkey context里的PD是否一致。
- 地址范围检查:mkey context对应了一个MR,里面包含address和length两个字段用于指明MR的范围,这里需要检查当前正在进行的内存访问是否在这个MR范围内。
- 访问权限检查:根据mkey context内的local/remote read/write/atomic权限检查当前操作是否合法。
- 当上面的检查通过时,就可以使用mtt pointer了,它是MTT表的基地址。
- 访问MTT表需要一个索引MTT index=当前访问地址accessing VA - mkey_context.va得到,其中mkey_context.va是MR的起始地址。另外需要考虑PA所指向的page大小,当page为4K时,上面的MTT index还要右移12位。
- 用上面的index索引MTT表就能得到一个MTT entry,它里面包含一个PA地址,即page number页号。如果page为4KB则最终的PA = (page number << 12) + (accessing VA & 0xfff)。
上述步骤均由RDMA硬件完成。
MTT entry
MTT entry的细节可以Mellanox Adapters Programmer’s Reference Manual (PRM):

总结
- MTT:用于记录本地内存的物理地址映射,以便远端节点可以直接访问这些内存区域。
- MPT:用于定义哪些本地内存区域可以被远端节点访问,以及它们的访问权限(如读/写)。每当有新的 RDMA 操作请求到来时,RDMA硬件会检查 MPT,以确定是否允许此次访问。
- MTT 和 MPT 是 RDMA 技术中不可或缺的组成部分,前者负责将虚拟地址转换为物理地址,后者则提供内存访问的安全性和隔离性。两者共同作用,确保了 RDMA 操作既高效又安全。
参考资料: