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

流程

每一次内存访问都会指定一个mkey和一个VA地址,mkey来自WQE或报文里的LKEY/RKEY,它是一个32bits的地址空间标识,包含index和key两部分。MTT地址翻译过程如下:

  1. 使用mkey.index索引mkey context table(MPT)得到mkey context。
  2. Key检查:对比mkey.key和mkey context里的key是否一致。
  3. PD检查:对比发起内存访问的QP里的PD和mkey context里的PD是否一致。
  4. 地址范围检查:mkey context对应了一个MR,里面包含address和length两个字段用于指明MR的范围,这里需要检查当前正在进行的内存访问是否在这个MR范围内。
  5. 访问权限检查:根据mkey context内的local/remote read/write/atomic权限检查当前操作是否合法。
  6. 当上面的检查通过时,就可以使用mtt pointer了,它是MTT表的基地址。
  7. 访问MTT表需要一个索引MTT index=当前访问地址accessing VA - mkey_context.va得到,其中mkey_context.va是MR的起始地址。另外需要考虑PA所指向的page大小,当page为4K时,上面的MTT index还要右移12位。
  8. 用上面的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 操作既高效又安全。

参考资料:

  1. RDMA 高级
  2. Mellanox Adapters Programmer’s Reference Manual (PRM)
  3. 从阿里云eRDMA看如何解决RDMA在数据中心大规模使用问题
  4. 【RDMA MPT && MTT简介】
  5. 自研RDMA的地址翻译表的实现技术