Memory Region (MR):用户通过ibv_reg_mr向对端暴露一块内存(iova+va+len+key),iova是对端来访问所用地址,va是本地访问所用地址,它们都需在硬件里翻译为PA,所以注册MR涉及建立MTT地址翻译表。同时也需为MR指定访问权限如可读可写,这涉及建立MPT表。MR所涵盖的物理内存需要在注册时PIN住以避免DMA访问swapped ou...
使用Large Page可以有效的减少MTT的Size,进而使得RNIC中的MTT Cache命中率更高。 使用Contiguous Memory + PA-MR[4, 5]。新一代的CX网卡支持用户基于物理地址访问,为了避免维护一个繁重的Page Table,我们可以通过Linux的CMA API来申请一大块连续的物理内存。这样我们的MTT就只有一项,可以保证100%的Cache命中率。但...
但是这个本身有一些安全隐患,因为使用PA-MR会绕过访问权限验证,所以使用的时候要注意这点。 当然,其实还有一些别的优化手段,在最近我们的工作中提出一种新的方式来提升地址翻译的性能,具体等工作开源出来之后我再来介绍介绍。 3.2 关注RNIC PU/QP的执行模型 一个QP对应一个PU,这是我们对RNIC执行方式的一个简单建模。
区别于CPU的VA,我们称这些地址为IO虚拟地址,即IOVA(Input/Output Virtual Address)。 IOMMU/SMMU记录着地址的转换关系,外设发出的IOVA,会被它翻译为PA,根据SMMU/IOMMU的位置不同,可能有两种情况:它有可能在设备内,也有可能挂在PCIe总线上,为多个EP提供地址翻译功能,这两种情况分别如下: 外设通过IOVA访问内存(1) 外...
如果我们的CPU想要访问内存,最朴素的想法就是CPU直接指定一个内存的地址就可以了,这个地址就是物理地址,即Physical Address,简称PA。 CPU通过物理地址访问内存 虚拟地址 直接使用物理地址虽然方便,但是在操作系统上直接用物理地址访问内存产生了一些问题,比如: ...
Memory Registration(MR) : 内存注册后, 操作系统不能对数据所在的内存进行页置换(page out)操作 -- 物理地址和虚拟地址的映射必须是固定不变的, 底层调用内核提供的函数pin住内存(防止换页) va -> pa protect pin: lock page(va<=>pa) 服务类型(队列对qp类型):连接(可靠RC/不可靠UC), 数据报(可靠RD/不...
g) 返回新分配的mr 用户申请一块长度为len的虚拟内存,执行RDMA注册函数,将会得到一个映射表,包含两部分, 一个是sg_table记录着物理地址到pci域地址的转换关系, 另一个是VA->PA映射表,记录着VA到PA的转换关系。 调用链:在ib_create_qp()中使用
如果我们的CPU想要访问内存,最朴素的想法就是CPU直接指定一个内存的地址就可以了,这个地址就是物理地址,即Physical Address,简称PA。 CPU通过物理地址访问内存 虚拟地址 直接使用物理地址虽然方便,但是在操作系统上直接用物理地址访问内存产生了一些问题,比如: ...
RDMA 使用者 (如本地/远程 SMC-R 协议栈) 通常使用虚拟地址 (VA) 描述内存,而 RNIC 则通过物理地址 (PA) 寻址。RNIC 从 WQE 或数据包中取得数据 VA 后通过查表得到 PA,进而访问正确内存空间。因此 Memory Registration 首要任务就是形成目标内存的地址翻译表。
经常会说到fabric,比如说MV me over fabric even fabric就指的是RDM的一个局域网。然后。C是通道适配器,然后webs就是RDM的一组标准动作,也就是他的那个编程API。然后zero copy by bypa the k sta内核旁路。还有就是memory register,呃,内存出册后,操作系统不能对数据所的内存进行置换。