RDMA MPT && MTT简介
RDMA:使能硬件直接访问用户态应用软件分配的内存从而实现零拷贝和绕过内核以达到低延迟和高带宽的技术;
可以类比DMA技术:直接读写本地内存,不需要CPU的参与;RDMA是直接读写远端的内存,不需要两方CPU的参与;
名词解释:
RDMA:Remote Direct Memory Access;
MTT: Memory Translation Table;
MPT: Memory Protection Table;
LKEY: Local Key
RKEY: Remote Key
1 MTT && MPT
RDMA使能硬件直接访问用户态应用软件分配的内存从而实现零拷贝和绕过内核以达到低延迟和高带宽。
工作流程:
通信前:应用软件必须向驱动软件注册内存,提供内存的起始虚拟地址、长度和访问权限(比如读、写)等信息;驱动软件根据虚拟地址和长度,会构建内存翻译表(MTT),每一个MTT表项对应注册内存的一个物理页起始地址,MTT的大小就是注册内存的物理页个数。驱动软件进一步向硬件注册内存。硬件会为注册内存构建内存保护表(MPT),MPT包含内存的起始虚拟地址、长度、访问权限和MTT地址等信息,并返回本端密钥(LKEY)和远端密钥(RKEY)给应用软件。LKEY/RKEY可以被硬件用来索引MPT。
通信时:应用软件如果要发送或者接收数据,可将发送或者接收内存的虚拟地址、长度和LKEY告诉硬件,硬件会根据LKEY找到MPT,权限检查通过后,硬件根据MTT翻译虚拟地址成物理地址,从而读写发送或者接收内存的数据。应用软件如果要读写远端内存,可以将远端内存的虚拟地址、长度和RKEY提供给硬件,硬件会将其嵌入发送报文中,远端的RDMA硬件收到报文后根据RKEY找到MPT,权限检查通过后,根据MTT翻译虚拟地址成物理地址,从而读写目的内存的数据。
MTT和MPT可以理解就是存储某些字段的一个大页面表格;
1.1 MTT
内存翻译表(MTT):用于将虚拟地址转换为物理地址(VA–>PA)。因为在操作系统中,应用程序通常使用虚拟地址来访问内存,而硬件需要实际的物理地址来进行 DMA 操作。
具体MTT表形式:
MTT表以页为单位翻译地址,每个MTT表项(8B)表示一个物理页的起始地址。比如注册2GB内存,页长是4KB,则需要512K个MTT页表,即MTT页表的大小是512K。MTT通常以页表的方式实现,一页4KB最多容纳512个MTT表项,当MTT大小大于512时则是多级页表。
理解MTT表如何计算:
基本上表项是:8B即64bit物理地址–这也即是64位CPU的地址索引;
页表:4KB = 8B * depth;
总页数 = 2GB / 4KB = 512K 个页表;
【总结】
- 2GB 内存 分成 512K 个 4KB 页面。
- 每个 MTT 表项 占用 8 字节,8字节其中一部分用于存储一个物理页的起始地址,用来索引page,另一部分用于作为offset。
- MTT 表项总数 是 512K,即 512K 个表项。
- MTT 表的大小 是 4MB,512K * 8B = 4MB;
1.2 MPT
内存保护表(MPT):用于定义哪些内存区域可以被远程访问以及如何访问(例如,只读、读写)。这提供了必要的安全性和隔离性,防止恶意或意外的访问破坏系统稳定性。
MPT最重要的是它的entry(条目),每个 MPT 条目都包含多个内存段的信息,包括起始地址、长度、访问权限和其他字段等,来告知不一样的信息;
总结
在 InfiniBand 协议中,MTT 和 MPT 的使用非常典型:
MTT:用于记录本地内存的物理地址映射,以便远端节点可以直接访问这些内存区域。
MPT:用于定义哪些本地内存区域可以被远端节点访问,以及它们的访问权限(如读/写)。每当有新的 RDMA 操作请求到来时,IBA(InfiniBand Adapter)会检查 MPT,以确定是否允许此次访问。
MTT 和 MPT 是 RDMA 技术中不可或缺的组成部分,前者负责将虚拟地址转换为物理地址,后者则提供内存访问的安全性和隔离性。两者共同作用,确保了 RDMA 操作既高效又安全。
【ref】
1.https://www.ctyun.cn/developer/article/491807389945925