RDMA内存保护概念---MR,PD
MR(内存区域)简介
在 RDMA 通信中,MR(Memory Region) 指由 RDMA 软件层在内存中划定的专用数据缓冲区,所有收发数据都必须通过 MR 进行传输。根据 IB 协议规范,用户申请数据内存后,必须调用 IB 框架提供的 API 注册 MR,才能授权 RDMA 网卡访问该内存区域。简而言之,MR 就是专供 RDMA 通信使用的注册内存块,一个系统可同时存在多个 MR。
MR 主要承担以下三大核心功能:
1. 虚拟地址到物理地址转换
RDMA 通信时,应用程序提供的是虚拟地址,而网卡需要通过物理地址直接访问主机内存。虽然 CPU 的 MMU 单元可通过系统页表完成地址转换,但 RDMA 网卡无法直接利用 MMU,原因在于:
架构差异:不同 CPU 体系的页表格式存在兼容性问题
安全限制:页表属于系统核心资源,禁止外部设备直接访问
为解决这一难题,在 MR 注册过程中,RDMA 网卡驱动会创建专用的地址映射表(MTT),将虚拟地址与物理地址的映射关系预置在网卡存储中,实现硬件级的快速地址转换。
2. 访问权限控制
为避免网卡误操作导致数据泄露或内存破坏,必须建立严格的内存访问授权机制。MR 注册时会生成两个安全密钥:
L_Key(本地密钥):验证本地操作权限
R_Key(远程密钥):授权远端节点访问权限
这两个密钥实质是唯一的数字序列,通过密钥验证确保网卡只能访问授权内存区域。在 RDMA 通信建立前,双方会通过预备通道(如 Socket 连接)交换必要的通信参数,包括目标 MR 的虚拟地址、长度和对应的 R_Key。进行远端内存访问时,本地工作队列元素(WQE)中必须填写对端 MR 的 R_Key 以通过安全验证。
3. 内存锁定防换页
操作系统在内存不足时会启动换页机制,将闲置内存暂存至硬盘。虽然换页后虚拟地址保持不变,但物理地址已发生变化,这将导致 RDMA 网卡原有的地址映射失效。
为确保地址映射稳定性,注册 MR 时会调用 pin_user_pages_fast 内核函数实施内存锁定,强制保持虚拟地址与物理地址的映射关系。被锁定的 MR 内存将常驻物理内存,直至通信结束并主动注销 MR 后才解除锁定。
PD(保护域)机制详解
PD(Protection Domain)是 RDMA 架构中的核心安全机制,通过将 QP(队列对)与 MR(内存区域)进行逻辑绑定,确保特定的 QP 只能访问授权的 MR,从而实现精细化的数据安全保护。
一、PD 的产生背景
尽管 MR 通过密钥机制(L_Key/R_Key)提供了基础的安全保护,但仍存在潜在的安全风险。考虑以下典型场景:

服务器 A 创建了两个 QP(QP0 和 QP1)和两个 MR(MR0 和 MR1)。设计目标是:
服务器 C 的 QP6 仅能通过 QP1 访问 MR1
服务器 B 的 QP5 仅能通过 QP0 访问 MR0
然而,如果服务器 C 通过暴力破解获取了 MR0 的 R_Key,理论上就能越权访问 MR0,导致数据泄露或篡改。
这种风险暴露了单纯依赖密钥保护的局限性:单个应用程序可能使用多个 QP 与不同远端通信,但需要对这些 QP 设置差异化的 MR 访问权限。这正是 PD 机制要解决的核心问题。
二、PD 的安全保障机制
PD 通过硬件强制的访问控制策略,实现了真正的安全隔离:
逻辑分区:应用程序可以创建多个 PD(如 PD0、PD1),在初始化阶段将 QP0 和 MR0 划归 PD0,QP1 和 MR1 划归 PD1
硬件强制:RDMA 网卡驱动程序建立并维护这些绑定关系,确保:
QP0 仅能访问 MR0
QP1 仅能访问 MR1
即使 QP1 持有 MR0 的正确密钥,硬件也会拒绝其访问请求
这种设计使得 RDMA 环境能够满足企业级应用对数据隔离和安全性的严格要求,为多租户、多应用场景提供了可靠的基础安全保障。
