计算机网络之RDMA技术(十)内存机制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络之RDMA技术(十)内存机制相关的知识,希望对你有一定的参考价值。
参考技术A 姓名:周肇星;学号:22011110028;学院:通信工程学院【嵌牛导读】RDMA技术全称远程直接数据存取,就是为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能。它消除了外部存储器复制和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用系统性能。本专题将针对RDMA技术进行介绍!
【嵌牛鼻子】计算机网络,高性能网络,RDMA
【嵌牛提问】读完本文,对RDMA技术的SRQ有所认识了吗?
【嵌牛正文】
InfiniBand specification R1.3, Chapter3, 3.4.2, Page 104【通道适配器提供MTP机制及其功能】
InfiniBand specification R1.3, Chapter3, 3.5.3, Page 112【概述L_Key & R_Key】
InfiniBand specification R1.3, Chapter3, 3.5.4, Page 113【概述虚拟内存地址 & L_Key & R_Key】
InfiniBand specification R1.3, Chapter3, 3.6.1, Page 127【实现远程访问内存的两种机制】
用户可使用两种机制来实现远程访问内存(RDMA):
任何一种方法均会产生R_Key,用户可将R_Key和数据缓冲区的虚拟地址提供给远程节点,只有远端节点发来的RDMA请求中具有正确的R_Key才能访问特定的内存区域
注:QP、内存区域、内存窗口必须位于相同的保护域中
MR全称为Memory Region,可译为内存区域,指的是由RDMA软件层在内存中规划出的一片区域,用于存放收发的数据。IB协议中,用户在申请完用于存放数据的内存区域之后,都需要通过调用IB框架提供的API注册MR,才能让RDMA网卡访问这片内存区域
Memory Region,它是一片由用户注册的特殊的内存区域:一方面其中的内容不会被换页到硬盘中,另一方面RDMA网卡中记录了它的地址转换关系,使得硬件拿到用户指定在WR中的虚拟地址之后找到对应的物理地址
通道适配器提供了一种内存转换和保护(Memory Translation & Protection,MTP)机制,它将虚拟地址转换为物理地址,并验证访问权限。因此IBA应用程序无需对任何操作使用物理寻址
注册MR的过程中,硬件会在内存中创建并填写一个VA to PA的映射表,这样需要的时候就能通过查表把VA转换成PA了
现在假设左边的节点向右边的节点发起了RDMA WRITE操作,即直接向右节点的内存区域中写入数据。假设图中两端都已经完成了注册MR的动作,MR即对应图中的“数据Buffer”,同时也创建好了VA->PA的映射表。
对于右侧节点来说,无论是地址转换还是写入内存,完全不用其CPU的参与
因为HCA访问的内存地址来自于用户,如果用户传入了一个非法的地址(比如系统内存或者其他进程使用的内存),HCA对其进行读写可能造成信息泄露或者内存覆盖。所以我们需要一种机制来确保HCA只能访问已被授权的、安全的内存地址。IB协议中,APP在为数据交互做准备的阶段,需要执行注册MR的动作
而用户注册MR的动作会产生两把钥匙:L_KEY(Local Key)和R_KEY(Remote Key),钥匙的实体其实就是一串序列而已。它们将分别用于保障对于本端和远端内存区域的访问权限
因为物理内存是有限的,所以操作系统通过换页机制来暂时把某个进程不用的内存内容保存到硬盘中。当该进程需要使用时,再通过缺页中断把硬盘中的内容搬移回内存,这一过程几乎必然导致VA-PA的映射关系发生改变
由于HCA经常会绕过CPU对用户提供的VA所指向的物理内存区域进行读写,如果前后的VA-PA映射关系发生改变,那么我们在前文提到的VA->PA映射表将失去意义,HCA将无法找到正确的物理地址
为了防止换页所导致的VA-PA映射关系发生改变,注册MR时会"Pin"住这块内存(亦称“锁页”),即锁定VA-PA的映射关系。也就是说,MR这块内存区域会长期存在于物理内存中不被换页,直到完成通信之后,用户主动注销这片MR
Memory Window简称MW,中文为内存窗口。是一种由用户申请的,用于让远端节点访问本端内存区域的RDMA资源。每个MW都会绑定(称为bind)在一个已经注册的MR上,但是它相比于MR可以提供更灵活的权限控制。MW可以粗略理解为是MR的子集,一个MR上可以划分出很多MW,每个MW都可以设置自己的权限
用户注册MR的过程,需要从用户态陷入内核态,调用内核提供的函数pin住内存(防止换页),然后制作虚拟-物理地址映射表并下发给硬件
因为MR是由内核管理的,如果用户想修改一个已经存在的MR的信息,比如我想收回某个MR的远端写权限,只保留远端读权限;或者想要使一个之前已经授权给远端节点的R_Key失效,那么用户需要通过重注册MR(Reregister MR)接口来进行修改,该接口等价于先取消注册MR(Deregister MR),然后注册MR(Register MR)。上述流程需要陷入内核态来完成,而这个过程是耗时较长的
不同于需要通过控制路径修改权限的MR,MW在创建好之后,可以通过数据路径(即通过用户态直接下发WR到硬件的方式)动态的绑定到一个已经注册的MR上,并同时设置或者更改其访问权限,这个过程的速度远远超过重新注册MR的过程
IB规范通过下述两种机制,来确保MR可以按照用户的期望被正确且安全的访问
A给自己的房间(MR)配了两把钥匙(Memory Key),一把留作自用(L_Key),另一把钥匙(R_Key)邮寄(可以是任何通信方式)给了B。B可以在A不在家的时候(本端CPU不感知远端节点对本地内存的RDMA操作),通过钥匙(R_Key)打开门。打开门之后,可能B只能隔着玻璃查看房间的摆设(A只给了这个MR远程读权限),或者进入房间内发现漆黑一片什么也看不到,但是可以向房间里放物品(A只给了这个MR远程写权限),当然也有可能没有玻璃也开了灯(同时给了远程读写权限)
这里的权限,指的是本端/对端节点,对于本端内存的读/写权限,它们两两组合形成了四种权限(除了这四种权限之外,还有Atomic权限等)
上表中这四种权限中最低的是本地读(Local Read),是用户必须赋予MR/MW的权限,因为如果一块内存本地的用户都无法访问的话,那就失去意义了;另外还有个限制,如果某个MR需要配置远端写(Remote Write)或者远端原子操作权限(Remote Atomic),那么也一定要配置本地写(Local Write)权限。在此约束之下,每个MR或者MW都可以按需配置权限,比如注册的一个MR需要允许远端节点写入数据,而不允许读,那么我们就打开Remote Write权限,关闭Remote Read权限。这样HCA(网卡)收到对端发起的对这个MR范围内的某个地址的WRITE请求之后,就可以予以放行;而HCA收到对端对这个MR的READ操作时,就会拒绝这个请求,并返回错误信息给对端
Key是一串数字,由两部分组成:24bit的Index以及8bit的Key
其中,Index用于HCA快速索引到本地的虚拟-物理地址转换表等MR相关的信息,而Key用于校验整个字段的合法性,以防止未授权的用户任意传递Index
即Local Key,关联到一个MR上,用于HCA访问本端内存。当本端的某个进程试图使用一个已经注册的MR的内存时,HCA会校验其传递的L_Key。并且利用L_Key中的索引查找地址转换表,把虚拟地址翻译成物理地址然后访问内存
sge由起始地址、长度和秘钥组成。用户在填写WR时,如果需要HCA访问本端内存,那么就需要通过一个sge的链表(sgl)来描述内存块,这里sge的秘钥填的就是L_Key,也就是下图中的key1和key3,他们分别是MR1的L_Key和MR2的L_Key
即Remote Key,关联到一个MR或者MW上,用于远端节点访问本端内存。当远端节点试图访问本端的内存时,一方面本端的HCA会校验R_Key是否合法,另一方面会利用R_Key中的索引查地址转换表,把虚拟地址翻译成物理地址然后访问内存
凡是RDMA操作(即Write/Read/Atomic),用户都要在WR中携带远端内存区域的R_Key
指的是将一个MW“关联”到一个已经注册的MR的指定范围上,并配置一定的读写权限。绑定的结果会产生一个R_key,用户可以把这个R_Key传递给远端节点用于远程访问。注意一个MW可以被多次绑定,一个MR上也可以绑定多个MW。如果一个MR还有被绑定的MW,那么这个MR是不能被取消注册的
Bind有两种方式,一种是调用Post Send接口下发Bind MW WR,一种是调用Bind MW接口:
指的是用户通过下发一个带有Invalidate操作码的WR到硬件而使一个R_Key无效的操作
Invalidate操作的对象是R_Key而不是MW本身,即Invalidate之后的效果是:远端用户无法再使用这个R_Key访问对应的MW,而MW资源仍然存在,以后仍然可以生成新的R_Key给远端使用
按照Invalidate操作的发起方不同,又可以进一步分成两种:
以上是关于计算机网络之RDMA技术(十)内存机制的主要内容,如果未能解决你的问题,请参考以下文章