第 13 章 配置 InfiniBand 和 RDMA 网络
13.1. 了解 InfiniBand 和 RDMA 技术
Infiniband 指的是两个不同的因素。第一个是 InfiniBand 网络的物理链路层协议。第二个是更高级别的编程 API,称为 InfiniBand Verbs API。InfiniBand Verbs API 是一个远程直接访问(RDMA )技术。
RDMA 提供从一台计算机的内存直接访问另一台计算机的内存,而不涉及计算机的操作系统。这个技术启用了高吞吐量、低延迟的网络,该网络使用率较低,在大规模并行计算机集群中特别有用。
在典型的
IP
数据传输中,计算机 A 上的应用程序 X 会将一些数据发送到计算机 B 上的应用程序 Y。 作为传输的一部分,机器 B 上的内核必须首先接收数据,解码数据包标头,确定数据属于应用程序 Y,唤醒应用程序 Y,等待应用程序 Y 执行读取系统调用到内核中,然后它必须手动将内核本身的内部内存空间中的数据复制到应用程序 Y 提供的缓冲区中。 此过程意味着大多数网络流量必须至少复制到系统的主内存总线上(当主机适配器使用 DMA 将数据放入内核提供的内存缓冲区时,以及内核将数据移动到应用程序内存缓冲时),这意味着计算机必须执行大量上下文切换以在内核上下文和应用程序 Y 上下文之间切换。当网络流量以非常高的速度流动并可能导致其他任务减慢时,这两种情况都会给系统带来非常高的 CPU 负载。
RDMA 通信不同于普通
IP
通信,因为它们绕过内核在通信过程中的干预,并大大降低了处理网络通信通常需要的 CPU 开销。RDMA 协议允许机器中的主机适配器知道数据包何时来自网络,哪个应用程序应接收该数据包,并在应用程序的内存空间中移动。它不将数据包发送到内核,然后将其复制到用户应用的内存中,而是将数据包的内容直接置于应用的缓冲区中,而无需进一步干预。但是,无法使用大多数 IP
网络应用程序所基于的标准 Berkeley Sockets API 来实现,因此它必须提供自己的 API、InfiniBand Verbs API 和应用程序,然后才能直接使用 RDMA 技术。
Red Hat Enterprise Linux 7 支持 InfiniBand 硬件和 InfiniBand Verbs API。另外,还有另外两种支持的技术允许在非 InfiniBand 硬件中使用 InfiniBand Verbs API:
- 互联网广域 RDMA 协议(iWARP)iWARP 是一种计算机网络协议,实施远程直接内存访问(RDMA),以通过 Internet 协议(IP)网络进行高效数据传输。
- RDMA over Converged Ethernet(RoCE)协议,之后通过以太网(IBoE)重命名为 InfiniBand。RoCE 是一种网络协议,允许通过以太网网络进行远程直接内存访问(RDMA)。
先决条件
iWARP 和 RoCE 技术都具有普通的
IP
网络链路层作为其底层技术,因此它们的大部分配置实际上都包含在 第 3 章 配置 IP 网络 中。 在大多数情况下,一旦正确配置了 IP
网络功能,它们的 RDMA 功能都是自动的,只要安装了适用于硬件的正确驱动程序,就会显示。 每个红帽提供的内核都始终包括内核驱动程序,但是,如果在机器安装时未选择 InfiniBand 软件包组,则必须手动安装用户空间驱动程序。
从 Red Hat Enterprise Linux 7.4 开始,所有 RDMA 用户空间驱动程序都合并到 rdma-core 软件包中。要安装所有支持的 iWARP、RoCE 或 InfiniBand 用户空间驱动程序,以
root
用户身份输入:
~]# yum install libibverbs
如果您使用基于 Priority Flow Control(PFC)和 mlx4 的卡,请编辑
/etc/modprobe.d/mlx4.conf
“以指示为以太网上未丢弃服务配置哪些数据包优先级的驱动程序”,这些卡将插入到并重新构建 initramfs
以包含修改的文件。较新的基于 mlx5 的卡会自动与交换机协商 PFC “设置,不需要任何模块选项告知它们未丢弃优先级或优先级”。
要将 Mellanox 卡设置为在以太网模式中使用一个或多个端口,请参阅 第 13.5.4 节 “为以太网操作配置 Mellanox 卡”。
安装了这些驱动程序软件包(除了通常安装任何 InfiniBand 的普通 RDMA 软件包外,用户应该能够利用大多数正常的 RDMA 应用程序来测试和查看其适配器上发生的 RDMA 协议通信。 但是,并非红帽企业 Linux 7 中包含的所有程序都正确支持 iWARP 或 RoCE/IBoE 设备。 这是因为 iWARP 上的连接建立协议与实际 InfiniBand 链路层连接上的不同。 如果相关的程序使用 librdmacm 连接管理库,它会以静默的方式处理 iWARP 和 InfiniBand 之间的差异,并且程序应正常工作。 如果应用尝试执行自己的连接管理,则必须特别支持 iWARP 或其他它不起作用。