RDMA(远程直接内存访问)详解
1. 什么是 RDMA?
RDMA(Remote Direct Memory Access) 是一种高性能网络通信技术,允许计算机直接从一台机器的内存读取或写入数据到另一台机器的内存,无需 CPU 介入。它显著降低了延迟、提高了吞吐量,并减少了 CPU 开销。
2. RDMA 的核心优势
- 零拷贝(Zero-Copy):数据直接从应用缓冲区传输到网卡,绕过操作系统内核。
- 内核旁路(Kernel Bypass):应用程序可以直接与网卡交互,减少上下文切换。
- 低延迟(Low Latency):通常延迟在微秒级(μs),远低于传统 TCP/IP。
- 高带宽(High Bandwidth):支持 100Gbps+ 的网络速率。
3. RDMA 的实现方式
目前主流的 RDMA 实现有三种:
技术 | 协议 | 适用场景 |
---|---|---|
InfiniBand (IB) | Native RDMA | HPC、超算中心 |
RoCE (RDMA over Converged Ethernet) | Ethernet + RDMA | 数据中心、云环境 |
iWARP (Internet Wide Area RDMA Protocol) | TCP/IP + RDMA | WAN/跨数据中心 |
其中:
- RoCEv2 (基于 UDP)是目前企业级应用的主流选择。
- iWARP 由于依赖 TCP/IP,性能稍逊于 InfiniBand 和 RoCE。
4. RDMA vs. TCP/IP
特性 | RDMA | 传统 TCP/IP |
---|---|---|
CPU 使用率 | ≈0% | 高(内核协议栈处理) |
延迟 | μs级 | ms级 |
吞吐量 | ≥100Gbps | 受限于协议栈优化 |
适用场景 | HPC、存储、AI训练 | 通用网络通信 |
5. RDMA 的应用场景
- 高性能计算(HPC)
- MPI(消息传递接口)加速多节点计算。
- 分布式存储
- Ceph、NVMe over Fabrics (NVMe-oF) 。
- AI/ML训练
- GPU/NPU之间高速数据传输(如NVIDIA GPUDirect RDMA)。
- 金融交易系统
- Ultra-Low Latency Trading (纳秒级延迟需求)。
- 云计算 & SDN
- AWS EFA, Azure Accelerated Networking。
6. RDMA编程模型
主要使用以下 API/库:
- Verbs API(底层,直接操作硬件)
- libibverbs (Linux下的标准RDAM库)
- (OFED) OpenFabrics Enterprise Distribution)
示例代码片段:
// ibv_post_send() - RDMA发送请求
struct ibv_sge list = { .addr = buf_addr, .length = len, .lkey = mr->lkey };
struct ibv_send_wr wr = {
.wr_id = id, .sg_list = &list, .num_sge =1,
.opcode= IBV_WR_SEND, .send_flags= IBV_SEND_SIGNALED
};
ibv_post_send(qp, &wr, &bad_wr);
7. Linux下RDAM工具
#查看RDAM设备
ibv_devices
#测试带宽和延迟
ib_send_bw #带宽测试
ib_write_lat #延迟测试
#监控统计信息
perfquery #InfiniBand性能计数
如果需要更深入的内容(如具体代码示例或部署方案),可以进一步探讨!
内容由零声教学AI助手提供,问题来源于学员提问