以太网测试洞察

如何模拟 RoCEv2 数据流?

如何模拟 RoCEv2-cover

什么是RoCEv2?

RoCEv2(融合以太网上的远程直接内存访问第2版)是一种网络协议,它利用UDP封装技术,支持在可路由的IP网络上实现远程直接内存访问(RDMA)。

RDMA 是一种高性能协议,它允许服务器在不使用 CPU、操作系统或中间数据复制的情况下,直接从另一台服务器的内存中读取或向其写入数据。该协议常用于高速数据中心网络,以减少延迟和 CPU 开销。

什么是 RoCEv2 报头格式?

RoCEv2 帧本质上是将 InfiniBand(IB)封装在 UDP、IP 和以太网中,如下所示。

UDP 目标端口 4791 表明该数据负载为 RoCEv2。

RoCEv2 帧格式

什么是 RDMA 协议?

RDMA 协议包含以下主要步骤,用于将数据从一台服务器的某个内存位置传输到另一台服务器的内存位置:

1. 连接建立
– 两台设备利用支持 RDMA 的硬件(例如支持 RDMA 的网卡)建立连接。
– 两台设备均创建队列对(发送队列、接收队列和完成队列)。

2. 内存注册
– 发送和接收设备将其内存区域注册到 RDMA 硬件中。
– 已注册的内存区域会被固定,这意味着在 RDMA 操作期间,操作系统无法移动或交换这些内存区域。

3. 内存密钥交换
– 设备之间交换内存密钥(例如远程内存地址和访问权限),以便直接访问已注册的内存区域。

4. 数据传输
– 一个设备直接从远程设备的内存中读取或向其写入数据,绕过了两端的 CPU。
– 由于不涉及中间缓冲区或内核上下文切换,传输延迟极低。

5. 完成通知
– RDMA 硬件会在操作完成时通知应用程序,从而确保可靠性和一致性。

6. 连接断开
– 数据交换完成后,RDMA 连接将被关闭,内存区域也将被注销。

两个设备之间交换的不同类型数据包均编码在基础传输头(BTH)中。鉴于数据交换已在上述第4点中进行描述,因此性能测试在此环节尤为重要。 数据交换可采用 IPv4 或 IPv6 协议,并支持可靠连接(RC)、可靠数据报(RD)、不可靠连接(UC)和不可靠数据报(UD)模式。此外,每次数据交换均由一个“SEND FIRST”帧、若干“SEND MIDDLE”帧以及一个“SEND LAST”帧组成。

下图 2 展示了 RC SEND 操作的情况。该图还说明了 BTH 操作码如何编码这三种类型的 RC SEND 帧。

RC 发送图

如何使用 Z800Freya 生成器模拟 RoCEv2 数据流?

Teledyne LeCroy Z800Freya 生成器可用于生成 RoCEv2 数据流,用于在各种工作负载下对网卡、交换机及整个网络进行性能测试。

需要特别指出的是,虽然 Z800Freya RoCEv2 数据流,但它本身并不参与 RDMA 协议的处理。这种设计通过将流量生成与协议处理分离,有助于精准定位潜在问题,从而更准确地识别性能瓶颈和网络低效环节。

Z800Freya 通过XenaManager软件和我们的配置文件之一进行配置,以模拟 RoCEv2 数据流。对于更高级的脚本编写,我们还提供了一段适用于Xena (XOA) 的 Python 代码。

在 XenaManager 中加载配置文件

如何使用 XenaManager 和配置文件配置 RoCEv2?

为了简化 RoCEv2 数据流的配置,我们创建了四个配置文件供您使用:

要在 XenaManager 中加载文件,只需右键单击端口并选择“加载端口配置”,如左侧所示。

如何使用XOA 配置 RoCEv2?

为了帮助您设置更高级的 RoCEv2 流量,并可能与您的测试环境集成,我们编写了一个示例 Python 脚本。该脚本提供了灵活的配置选项,例如调整每个流的帧数、流量速率、突发性、重复次数等。

该示例位于此处:open-automation-script-library/rocev2 at main · xenanetworks/open-automation-script-library · GitHub

文件“headers.py”包含了BTH中各种操作码及其他组件的所有定义。文件“roce2_emulate.py”定义了每流的帧数、帧大小等参数。

如何使用 E100Chimera 模拟 RoCEv2 流的受损情况?

Teledyne LeCroy Xena E100Chimera能够模拟各种网络故障,包括延迟、抖动、数据包和端口故障、灵活的分布以及带宽整形。

对于对延迟、数据包乱序及其他此类干扰较为敏感的 RoCEv2 流量而言,这一点尤为重要。

我们为 E100Chimera 提供了配置文件,上传后,该文件将根据 UDP 目标端口 4791 对 RoCEv2 帧进行过滤。这使得创建仅对 RoCEv2 帧进行干扰的测试场景变得非常简单。