高性能网络(RDMA,InfiniBand)

发布: (2025年11月30日 GMT+8 15:10)
8 min read
原文: Dev.to

Source: Dev.to

引言

现代计算环境,尤其是高性能计算(HPC)、人工智能(AI)和大数据分析等领域,要求极低的延迟和高带宽的数据传输能力。传统的网络协议虽然适用于通用通信,但在处理海量数据集和计算密集型任务时往往力不从心。高性能网络技术如远程直接内存访问(RDMA)和 InfiniBand 在数据传输过程中绕过操作系统内核,从而显著降低延迟并提升 CPU 利用率。本文将深入探讨 RDMA 与 InfiniBand 的概念,分析它们的前置条件、优势、劣势、特性以及实际意义。

什么是 RDMA?

远程直接内存访问(RDMA)是一种网络技术,能够在不涉及操作系统 CPU 或内核的情况下,实现一台计算机直接访问另一台计算机的内存。这种“零拷贝”方式显著降低了延迟和 CPU 开销,因为数据传输直接在不同机器的应用内存空间之间进行。本质上,它允许一台机器上的进程直接读写另一台机器的内存,而无需目标机器的 CPU 介入。

什么是 InfiniBand?

InfiniBand 是一种高带宽、低延迟的互连技术,常用于 HPC 环境。它是一套针对基于交换机的网络拓扑的硬件和软件规范,利用 RDMA 实现卓越性能。InfiniBand 提供了面向并行处理和分布式计算的高速通信结构。RDMA 是一种数据传输机制,而 InfiniBand 则是基于 RDMA 构建的完整网络架构——可以把 InfiniBand 看作是专为 RDMA 数据设计的高速公路,优化了速度和效率。

RDMA 与 InfiniBand 的前置条件

实现 RDMA 与 InfiniBand 解决方案需要精心规划以及特定的硬件和软件配置。关键前置条件包括:

  • 支持 RDMA 的网络接口卡 (RNIC) – 专用网卡(例如 Mellanox ConnectX 系列),负责直接内存访问并实现内核绕过。
  • InfiniBand 主机通道适配器 (HCA) – InfiniBand 版的 RNIC,提供主机系统与 InfiniBand 结构之间的接口。
  • 支持 RDMA 的操作系统 – 现代 Linux 发行版(如 Red Hat、Ubuntu)和 Windows Server 通常内置支持,但可能需要特定驱动和库。
  • InfiniBand 子网管理器 – 软件(如 OpenSM)负责管理拓扑、分配 IP 地址并处理 InfiniBand 结构内的路由。
  • RDMA 库和 API – 应用程序必须使用 RDMA 感知的库,例如 Linux 上的 libibverbs 或 Windows 上的 Winsock Direct。
  • InfiniBand 交换机 – 为 InfiniBand 网络提供高速分组路由的专用交换机。

RDMA 与 InfiniBand 的优势

  • 低延迟 – 绕过 OS 内核降低了延迟,实现更快的节点间通信。
  • 高带宽 – 当前的 InfiniBand 代数已超过 400 Gbps,能够快速移动大规模数据集。
  • CPU 卸载 – 直接内存访问让 CPU 摆脱数据拷贝任务,腾出更多算力用于计算。
  • 可扩展性 – 基于交换机的架构简化了规模扩展,以满足日益增长的计算需求。
  • 提升应用性能 – 低延迟、高带宽和 CPU 卸载共同推动并行与分布式应用的性能提升。
  • 降低内存占用 – 零拷贝传输最小化内存使用,消除用户空间/内核空间拷贝的开销。

RDMA 与 InfiniBand 的劣势

  • 成本更高 – RNIC、HCA 和 InfiniBand 交换机的价格通常高于传统以太网设备。
  • 复杂性 – 部署与管理需要专门的知识和经验。
  • 兼容性问题 – 跨厂商的硬件和软件兼容性保障可能较为困难。
  • 安全考虑 – 内核绕过要求进行严格的安全配置,以防止未授权的内存访问。
  • 生态系统有限(InfiniBand) – 相较于以太网,InfiniBand 的生态较小,可能限制工具和应用的可用性。

RDMA 与 InfiniBand 的关键特性

  • 零拷贝数据传输 – 在不涉及内核的情况下实现内存到内存的直接移动。
  • 内核绕过 – 减少网络通信相关的处理开销。
  • 硬件加速的数据传输 – RNIC 与 HCA 提供加速以实现更高性能。
  • 可靠传输 – InfiniBand 确保数据完整性和交付。
  • 服务质量 (QoS) – 根据应用需求对流量进行优先级划分。
  • 拥塞控制 – 采用复杂机制防止瓶颈并保持性能。

代码示例(概念性 – 在 Linux 上使用 libibverbs)

下面的代码片段演示了 RDMA 工作的基本思路。它高度简化,未适用于生产环境。

#include <infiniband/verbs.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    struct ibv_device **dev_list;
    int num_devices;

    // Get the list of IB devices
    dev_list = ibv_get_device_list(&num_devices);
    if (!dev_list) {
        perror("Failed to get IB device list");
        return 1;
    }

    if (num_devices == 0) {
        printf("No IB devices found\n");
        ibv_free_device_list(dev_list);
        return 0;
    }

    printf("Found %d IB devices\n", num_devices);

    // For simplicity, use the first device
    struct ibv_context *context = ibv_open_device(dev_list[0]);
    if (!context) {
        perror("Failed to open IB device");
        ibv_free_device_list(dev_list);
        return 1;
    }

    // ... (Further setup: protection domains, memory regions,
    // completion queues, queue pairs, etc.)

    // Example of RDMA Write (Highly Simplified)
    // Assume 'remote_addr' and 'remote_rkey' are the address and key
    // for the memory region on the remote machine.
    // ibv_post_send(...); // Send the RDMA write request

    ibv_close_device(context);
    ibv_free_device_list(dev_list);
    return 0;
}

结论

RDMA 与 InfiniBand 是构建高性能网络解决方案的关键技术。它们的低延迟、高带宽以及 CPU 卸载能力,使其在 HPC、AI、大数据等高需求场景中表现出色。虽然成本和复杂性带来一定挑战,但在对延迟和吞吐量要求极高的环境中,性能收益往往能够证明投资的合理性。随着数据规模和计算需求的持续增长,这些技术将在推动前沿研究和创新方面变得愈发重要。需要对应用需求、预算限制和技术能力进行细致评估,以确定其适用性;同时,持续的研发也将不断突破网络性能的边界。

Back to Blog

相关文章

阅读更多 »

第1276天:职业攀升

星期六 在前往车站之前,我在当前的副项目上写了一些代码。取得了相当不错的进展,然后该出发了。Made i...

无状态 AI 应用背后的架构

项目一开始就做了一个看似冒险的决定:不使用后端数据库。当时并不需要持久化用户数据——获取用户的响应就是……

JWT Token 验证器挑战

概述 2019 年,Django 的会话管理框架中包含一个细微但灾难性的漏洞 CVE‑2019‑11358。该框架未能正确 inv...