2023-12-11 09:31:53 66阅读
一、名词解释
RDMA(Remote Direct Memory Access):远程直接内存访问
MTT(Memory Translation Table):内存翻译表
MPT(Memory Protection Table):内存保护表
LKEY(Local Key):本端密钥
RKEY(Remote Key):远端密钥
二、背景技术
RDMA使能硬件直接访问用户态应用软件分配的内存从而实现零拷贝和绕过内核以达到低延迟和高带宽。为了达到此目的,通信前,应用软件必须向驱动软件注册内存,提供内存的起始虚拟地址、长度和访问权限(比如读、写)等信息。驱动软件根据虚拟地址和长度,会构建内存翻译表(MTT),每一个MTT表项对应注册内存的一个物理页起始地址,MTT的大小就是注册内存的物理页个数。驱动软件进一步向硬件注册内存。硬件会为注册内存构建内存保护表(MPT),MPT包含内存的起始虚拟地址、长度、访问权限和MTT地址等信息,并返回本端密钥(LKEY)和远端密钥(RKEY)给应用软件。LKEY/RKEY可以被硬件用来索引MPT。
通信时,应用软件如果要发送或者接收数据,可将发送或者接收内存的虚拟地址、长度和LKEY告诉硬件,硬件会根据LKEY找到MPT,权限检查通过后,硬件根据MTT翻译虚拟地址成物理地址,从而读写发送或者接收内存的数据。应用软件如果要读写远端内存,可以将远端内存的虚拟地址、长度和RKEY提供给硬件,硬件会将其嵌入发送报文中,远端的RDMA硬件收到报文后根据RKEY找到MPT,权限检查通过后,根据MTT翻译虚拟地址成物理地址,从而读写目的内存的数据。
MTT表以页为单位翻译地址,每个MTT表项(8B)表示一个物理页的起始地址。比如注册2GB内存,页长是4KB,则需要512K个MTT表项,即MTT的大小是512K。MTT通常以页表的方式实现,一页4KB最多容纳512个MTT表项,当MTT大小大于512时则是多级页表。
如上图所示MTT的大小是513时MTT为二级页表,一级页表的每一个表项表示的是二级页表的物理地址,而二级页表的表项才是注册内存的物理页起始地址。这个时候我们看到硬件需要多一次查找才能找到目标MTT表项,并且每次找满512个MTT表项后就得重新查找。在内存的使用方面,多了一个中间页表(即一级页表)而最后一个终端页表(即二级页表)也没有用满,造成浪费。MTT大小和页表级数、中间页表个数的关系如下:
MTT大小 |
页表级数 |
中间页表 |
1 |
0 |
0 |
2到512 |
1 |
0 |
513到256K |
2 |
1 |
256K+1到128M |
3 |
2-513 |
自研RDMA建立一个物理连续的MTT内存池的概念,管理MTT的分配和回收,确保MTT的物理地址连续。从而解决上述的查找效率和内存浪费的问题。
三、实现方法
本系统主要包括:
系统分析流程包括:
如下图是包含初始化、分配和回收的一个例子:
2023-12-11 09:31:53 66阅读
一、名词解释
RDMA(Remote Direct Memory Access):远程直接内存访问
MTT(Memory Translation Table):内存翻译表
MPT(Memory Protection Table):内存保护表
LKEY(Local Key):本端密钥
RKEY(Remote Key):远端密钥
二、背景技术
RDMA使能硬件直接访问用户态应用软件分配的内存从而实现零拷贝和绕过内核以达到低延迟和高带宽。为了达到此目的,通信前,应用软件必须向驱动软件注册内存,提供内存的起始虚拟地址、长度和访问权限(比如读、写)等信息。驱动软件根据虚拟地址和长度,会构建内存翻译表(MTT),每一个MTT表项对应注册内存的一个物理页起始地址,MTT的大小就是注册内存的物理页个数。驱动软件进一步向硬件注册内存。硬件会为注册内存构建内存保护表(MPT),MPT包含内存的起始虚拟地址、长度、访问权限和MTT地址等信息,并返回本端密钥(LKEY)和远端密钥(RKEY)给应用软件。LKEY/RKEY可以被硬件用来索引MPT。
通信时,应用软件如果要发送或者接收数据,可将发送或者接收内存的虚拟地址、长度和LKEY告诉硬件,硬件会根据LKEY找到MPT,权限检查通过后,硬件根据MTT翻译虚拟地址成物理地址,从而读写发送或者接收内存的数据。应用软件如果要读写远端内存,可以将远端内存的虚拟地址、长度和RKEY提供给硬件,硬件会将其嵌入发送报文中,远端的RDMA硬件收到报文后根据RKEY找到MPT,权限检查通过后,根据MTT翻译虚拟地址成物理地址,从而读写目的内存的数据。
MTT表以页为单位翻译地址,每个MTT表项(8B)表示一个物理页的起始地址。比如注册2GB内存,页长是4KB,则需要512K个MTT表项,即MTT的大小是512K。MTT通常以页表的方式实现,一页4KB最多容纳512个MTT表项,当MTT大小大于512时则是多级页表。
如上图所示MTT的大小是513时MTT为二级页表,一级页表的每一个表项表示的是二级页表的物理地址,而二级页表的表项才是注册内存的物理页起始地址。这个时候我们看到硬件需要多一次查找才能找到目标MTT表项,并且每次找满512个MTT表项后就得重新查找。在内存的使用方面,多了一个中间页表(即一级页表)而最后一个终端页表(即二级页表)也没有用满,造成浪费。MTT大小和页表级数、中间页表个数的关系如下:
MTT大小 |
页表级数 |
中间页表 |
1 |
0 |
0 |
2到512 |
1 |
0 |
513到256K |
2 |
1 |
256K+1到128M |
3 |
2-513 |
自研RDMA建立一个物理连续的MTT内存池的概念,管理MTT的分配和回收,确保MTT的物理地址连续。从而解决上述的查找效率和内存浪费的问题。
三、实现方法
本系统主要包括:
系统分析流程包括:
如下图是包含初始化、分配和回收的一个例子: