【RDMA MPT && MTT简介】

RDMA MPT && MTT简介


RDMA:使能硬件直接访问用户态应用软件分配的内存从而实现零拷贝和绕过内核以达到低延迟和高带宽的技术;
可以类比DMA技术:直接读写本地内存,不需要CPU的参与;RDMA是直接读写远端的内存,不需要两方CPU的参与;

名词解释:
RDMA:Remote Direct Memory Access;
MTT: Memory Translation Table;
MPT: Memory Protection Table;
LKEY: Local Key
RKEY: Remote Key

1 MTT && MPT

RDMA使能硬件直接访问用户态应用软件分配的内存从而实现零拷贝和绕过内核以达到低延迟和高带宽。
工作流程:
通信前:应用软件必须向驱动软件注册内存,提供内存的起始虚拟地址、长度和访问权限(比如读、写)等信息;驱动软件根据虚拟地址和长度,会构建内存翻译表(MTT),每一个MTT表项对应注册内存的一个物理页起始地址,MTT的大小就是注册内存的物理页个数。驱动软件进一步向硬件注册内存。硬件会为注册内存构建内存保护表(MPT),MPT包含内存的起始虚拟地址、长度、访问权限和MTT地址等信息,并返回本端密钥(LKEY)和远端密钥(RKEY)给应用软件。LKEY/RKEY可以被硬件用来索引MPT。


通信时:应用软件如果要发送或者接收数据,可将发送或者接收内存的虚拟地址、长度和LKEY告诉硬件,硬件会根据LKEY找到MPT,权限检查通过后,硬件根据MTT翻译虚拟地址成物理地址,从而读写发送或者接收内存的数据。应用软件如果要读写远端内存,可以将远端内存的虚拟地址、长度和RKEY提供给硬件,硬件会将其嵌入发送报文中,远端的RDMA硬件收到报文后根据RKEY找到MPT,权限检查通过后,根据MTT翻译虚拟地址成物理地址,从而读写目的内存的数据。


MTT和MPT可以理解就是存储某些字段的一个大页面表格;

1.1 MTT

内存翻译表(MTT):用于将虚拟地址转换为物理地址(VA–>PA)。因为在操作系统中,应用程序通常使用虚拟地址来访问内存,而硬件需要实际的物理地址来进行 DMA 操作。
具体MTT表形式:
MTT表以页为单位翻译地址,每个MTT表项(8B)表示一个物理页的起始地址。比如注册2GB内存,页长是4KB,则需要512K个MTT页表,即MTT页表的大小是512K。MTT通常以页表的方式实现,一页4KB最多容纳512个MTT表项,当MTT大小大于512时则是多级页表。
理解MTT表如何计算:
基本上表项是:8B即64bit物理地址–这也即是64位CPU的地址索引;
页表:4KB = 8B * depth;
总页数 = 2GB / 4KB = 512K 个页表;
【总结】

  • 2GB 内存 分成 512K 个 4KB 页面。
  • 每个 MTT 表项 占用 8 字节,8字节其中一部分用于存储一个物理页的起始地址,用来索引page,另一部分用于作为offset。
  • MTT 表项总数 是 512K,即 512K 个表项。
  • MTT 表的大小 是 4MB,512K * 8B = 4MB;

1.2 MPT

内存保护表(MPT):用于定义哪些内存区域可以被远程访问以及如何访问(例如,只读、读写)。这提供了必要的安全性和隔离性,防止恶意或意外的访问破坏系统稳定性。
MPT最重要的是它的entry(条目),每个 MPT 条目都包含多个内存段的信息,包括起始地址、长度、访问权限和其他字段等,来告知不一样的信息;

总结

在 InfiniBand 协议中,MTT 和 MPT 的使用非常典型:
MTT:用于记录本地内存的物理地址映射,以便远端节点可以直接访问这些内存区域。
MPT:用于定义哪些本地内存区域可以被远端节点访问,以及它们的访问权限(如读/写)。每当有新的 RDMA 操作请求到来时,IBA(InfiniBand Adapter)会检查 MPT,以确定是否允许此次访问。
MTT 和 MPT 是 RDMA 技术中不可或缺的组成部分,前者负责将虚拟地址转换为物理地址,后者则提供内存访问的安全性和隔离性。两者共同作用,确保了 RDMA 操作既高效又安全。

【ref】
1.https://www.ctyun.cn/developer/article/491807389945925

### RDMA网络遥测实现与应用 #### 配置方面 对于RDMA(远程直接内存访问)网络而言,其配置涉及硬件和软件两部分。在硬件层面上,支持RDMA功能的网卡(如InfiniBand或RoCE网卡)是必不可少的基础组件。这些设备不仅提供高速的数据传输能力,还内置了用于管理和维护连接状态的信息结构体,例如Memory Protection Tables (MPT) 和 Memory Translation Tables (MTT)[^3]。 为了使应用程序能够利用RDMA特性,在操作系统级别需安装特定驱动程序以及库文件,比如librdmacm和libibverbs等。前者负责创建并管理通信端点之间的会话;后者则提供了低级别的API接口供开发者编写高效的应用逻辑[^1]。 #### 实现方式 RDMA操作被设计成类似于单个数据包的形式来进行原子读取消息传递。这意味着每次执行RDMA指令时都像发送了一个独立的消息给目标机器上的指定位置。这种机制极大地简化了编程模型的同时也提高了效率,因为减少了传统TCP/IP栈所带来的额外开销。 在网络层面,现代数据中心采用诸如DCQCN(Data Center Quantized Congestion Notification)这样的拥塞控制协议来优化流量调度策略,确保即使在网络负载较高的情况下也能维持良好的吞吐量和服务质量。值得注意的是,仅依赖于单一参数调整难以达到最佳效果,而是应该综合考虑多种因素并通过实验找到最合适的组合方案,例如可以运用模拟退火算法寻找全局最优解[^4]。 #### 性能监控 有效的性能监测工具对于识别潜在瓶颈至关重要。当遇到由于缓存不足造成的丢包现象或者其他异常情况时,应当具备实时跟踪的能力以迅速锁定问题根源所在的位置——具体来说就是某台交换机及其关联端口的状态变化记录。此外,针对那些对延迟敏感型的服务,则需要更加细致地分析整个路径上各个节点间的转发耗时差异,以此评估整体服务质量是否满足预期标准[^5]。 ```python import pymlxd as mlx from datetime import datetime def monitor_rdma_performance(): device = mlx.Device() while True: timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 获取当前队列深度 queue_depth = device.get_queue_depth() # 记录每秒处理的数据量 throughput = device.measure_throughput() print(f"{timestamp} Queue Depth: {queue_depth}, Throughput: {throughput}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值