深入理解 RDMA 内存管理:海思 HNS RoCE 架构中的 HEM 表与 MTR 表有什么区别?

深入理解 RDMA 内存管理:海思 HNS RoCE 架构中的 HEM 表与 MTR 表有什么区别?

在研究 RDMA(远程直接内存访问)技术或阅读华为海思 HNS RoCE 驱动源码时,我们经常会遇到两个核心的多级索引表结构:HEM 表MTR 表

很多初学者容易把它们搞混,认为它们都是用来做地址翻译的。本文将从管理对象层级关系数据流向三个维度,带你彻底搞懂它们的根本区别。


一、 快速对比:HEM 与 MTR 核心差异

如果用一句话总结:HEM 表决定了网卡能不能找到这个 MR 的配置,而 MTR 表决定了网卡最终把数据读写到哪片物理内存。

维度 HEM 表 (Hardware Entry Memory) MTR 表 (Memory Translate Region)
核心功能 元数据检索:通过硬件 ID 索引到具体的 Context 实体。 地址翻译:实现虚拟地址(VA)到物理地址(PA)的映射。
管理内容 存放硬件上下文(如 MR Context / MPT、QPC、CQC 等)。 存放 MR 注册的数据缓存区(Data Buffer)的物理页地址
行业对应 类似于常规 RDMA 中的 Context 控制块索引。 对应传统 RDMA 架构中的 MTT(Memory Translation Table)
生命周期 通常在驱动初始化时创建,全局管理。 在用户每次调用 ibv_reg_mr 注册内存时动态创建。
层级关系 处于第一层寻址。 处于第二层寻址(由 HEM 引导而来)。

二、 详解 HEM 表:资源的"全局索引目录"

1. 为什么需要 HEM 表?

RDMA 网卡(HCA)需要管理海量的硬件对象,比如:

  • 队列对上下文(QPC)
  • 完成队列上下文(CQC)
  • 内存保护表上下文(MPT / MR Context)

这些 Context 结构体数量庞大,直接全量缓存在网卡片上(On-chip)是不现实的,它们通常以 Entry 的形式存放在主机内存(Host Memory)中。

2. HEM 的工作机制

HEM(Hardware Entry Memory)表 就像是一个全局指针数组 。它支持 0/1/2/3 级寻址(根据资源量动态配置)。

当网卡拿到一个资源的硬件 ID(例如从 L_KeyR_Key 中提取出的 MR Index)时,网卡通过硬件逻辑去查 MR HEM 表 ,就能在 Host 内存中精准定位到该 MR 对应的 MR Context(在 HNS 驱动中表现为 hns_roce_v2_mpt_entry 结构体)。


三、 详解 MTR 表:真正的"地址翻译页表"

1. 为什么需要 MTR 表?

当用户层调用 ibv_reg_mr 注册一段内存(Memory Region)时,内核驱动会锁住(Pin)这部分虚拟内存,防止其被置换到磁盘。因为应用层的虚拟地址(VA)在物理上通常是离散的,网卡硬件执行 DMA 必须知道连续或离散的物理页地址(PA)。

2. MTR 的工作机制

MTR(Memory Translate Region)表 是 HNS 驱动中对地址翻译区域的特称,它本质上就是传统 RDMA 里的 MTT(Memory Translation Table)PBL(Page Big List)

MTR 表的每一项(Entry)直接记录了用户数据缓冲区的真实物理内存页地址 。当 MTR 表创建完成后,它的基地址、页大小、寻址层级(Hop Num)等关键信息,会被填入到上层的 MR Context 中。


四、 深度串联:一次 RDMA 网络读写的"两级查表"全过程

为了让大家更直观地理解,我们来看一下当远端网卡发来一个 RDMA Write 请求时,网卡硬件内部是如何连续使用这两张表的:

text 复制代码
 远端请求 (带着 R_Key 和 VA)
       │
       ▼
 1. 提取 R_Key 中的 MR Index
       │
       ▼
 2. 查找 [MR HEM 表] ────────► 寻址定位到 ──► [MR Context (MPT)]
                                                  │
                                             (校验权限与密钥)
                                                  │
                                                  ▼
 3. 读取 MTR 基地址 ──────────► 结合 VA 检索 ──► [MTR 表 (页表)]
                                                  │
                                             (解析出物理地址 PA)
                                                  │
                                                  ▼
 4. 执行 DMA ───────────────────────────────► 最终物理内存 (Host RAM)
  1. 解析 Key :网卡收到数据包,提取出 R_Key,获得 MR Index
  2. 第一级(查 HEM) :网卡以 MR Index 检索 MR HEM 表 ,找到对应的 MR Context,并在其中校验密钥和读写权限。
  3. 第二级(查 MTR) :权限校验通过后,网卡从该 MR Context 中提取出 MTR 表的配置 ,结合数据包里的虚拟地址(VA)偏移量去查 MTR 表 ,最终拿到具体的物理地址(PA)
  4. 落盘/落内存:网卡通过 PCIe 总线向该物理地址发起 DMA,完成零拷贝数据传输。

五、 总结与排查建议

在实际的 RDMA 性能调优或 Bug 排查中,分清这两个表能帮你快速定位问题:

  • 如果是 MTR 相关报错 :通常与内存注册(MR Register)有关,需要关注 Hop Num(寻址层级是否过多导致查表延迟高)或内存对齐、物理页连续性问题。
  • 如果是 HEM 相关报错 :通常发生在初始化或大规模创建 QP/MR 时,提示硬件条目内存不足,需要调整驱动的底层资源分配参数(如 num_mptsnum_qps 等)。

希望这篇技术分享能帮你梳理清楚 HNS RoCE 驱动中的内存管理逻辑。

相关推荐
木心术143 分钟前
卫星通信技术全景:从低轨星座组网、相控阵 EIRP 工程计算到 NTN 标准演进(2026 深度梳理)
网络
weixin_4407305044 分钟前
socket简单介绍-三次握手四次断开+一个例子
运维·服务器
你怎么知道我是队长1 小时前
计算机网络中的 DNS 与 DHCP 详解
网络·计算机网络
做运维的阿瑞1 小时前
Linux ELF 文件
linux·运维·服务器
智者知已应修善业1 小时前
C#用一个循环[等效]取出字符串中的数字
网络·c#·web·string·语言
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】Gemini模型接入知识体系
java·开发语言·网络·人工智能·网络协议·学习·http
鲸能云1 小时前
【智慧能源】源储调售一体化架构与 EMS 滚动调度算法实践 —— 工商业光储收益提升 22% 的技术拆解
算法·架构·能源
Jay Kay1 小时前
RDMA中CQ为什么用轮询?——从CQ、Doorbell到GID的深度解析
运维·服务器·网络
SendTomo1 小时前
SendTomo 与 send.wang 全景对比评测与实战指南
网络·网络协议·tcp/ip·webrtc·p2p