深入理解 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_Key 或 R_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_mpts、num_qps 等)。

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

相关推荐
天空属于哈夫克35 天前
企业微信二次开发:精准实现关键词自动回复
架构·企业微信
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
晨米酱5 天前
AGENTS.md:Agent 的上下文策略层
面试·架构·agent
这个DBA有点耶5 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
wuyk5555 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
码流子5 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
moMo5 天前
从固定流程到问题路由:让 LangGraph RAG 按需检索
架构
-梅5 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog5 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
琥珀色糖5 天前
SimlpeHttp
linux·服务器