DOCA Eth L2 转发应用程序指南
本文档介绍了基于 NVIDIA® BlueField® DPU 的以太网 L2 转发实现。
以太网 L2 转发应用程序是一个基于 DOCA 以太网 的应用程序,它将流量从单个 RX 端口转发到单个 TX 端口,反之亦然,利用 DOCA 的任务/事件批处理功能来增强性能。
该应用程序可以在主机和 BlueField 上运行,并且有两种主要模式
双向转发 – 设备 1 → 设备 2 和 设备 2 → 设备 1
单向转发 – 设备 1 → 设备 2 或 设备 2 → 设备 1
单向模式提供更好的性能,提高了数据包转发速率。
下图显示了在主机上运行的应用程序
以太网 L2 转发应用程序在主机或 BlueField 上运行。

下图显示了在 BlueField 上运行的应用程序

以太网 L2 转发应用程序在 DOCA 以太网 API 之上运行,以形成两个端口之间的(双向/单向)L2 转发。

打开了两个 DOCA 设备。
创建了两个 DOCA mmap。
配置并启动了两个 DOCA 流端口,每个端口都使用不同的已打开 DOCA 设备。
初始化了两个 DOCA 以太网 TXQ 和 RXQ 上下文,每个 TXQ-RXQ 对都使用不同的已打开 DOCA 设备,以便将流量从设备引导至相应的 RXQ,并从相应的 TXQ 引导至设备。
转发 - 设备 x 接收的数据包被引导至 RXQ x,然后分配给 TXQ y 并由设备 y 发送(反之亦然)。
安装
有关如何安装 BlueField 相关软件的详细信息,请参阅 DOCA Linux 安装指南。
概述
DOCA 参考应用程序的安装包含应用程序的源代码以及匹配的编译说明。这允许“按原样”编译应用程序,并提供修改源代码然后编译应用程序新版本的能力。有关应用程序的更多信息,以及开发和编译技巧,请参阅 DOCA 参考应用程序 主要指南。
应用程序的源代码可以在应用程序的目录下找到:/opt/mellanox/doca/applications/eth_l2_fwd/
。
编译所有应用程序
应用程序都在单个 meson 项目下定义,这意味着默认编译将编译所有 DOCA 应用程序。
要一起构建所有应用程序,请运行
cd /opt/mellanox/doca/applications/
meson /tmp/build
ninja -C /tmp/build
doca_eth_l2_fwd
将在 /tmp/build/eth_l2_fwd/
下创建。
仅编译当前应用程序
要直接仅构建以太网 L2 转发应用程序
cd /opt/mellanox/doca/applications/ meson /tmp/build -Denable_all_applications=
false
-Denable_eth_l2_fwd=true
ninja -C /tmp/build注意doca_eth_l2_fwd
将在/tmp/build/eth_l2_fwd/
下创建。或者,可以在
meson_options.txt
文件中设置所需的标志,而不是在编译命令行中提供它们编辑
/opt/mellanox/doca/applications/meson_options.txt
中的以下标志将
enable_all_applications
设置为false
将
enable_eth_l2_fwd
设置为true
应使用与上一节中所示相同的编译命令
cd /opt/mellanox/doca/applications/ meson /tmp/build ninja -C /tmp/build
注意doca_eth_l2_fwd
将在/tmp/build/eth_l2_fwd/
下创建。
故障排除
有关编译 DOCA 应用程序时可能遇到的任何问题,请参阅 DOCA 故障排除。
应用程序执行
以太网 L2 转发应用程序以源代码形式提供,因此在执行应用程序之前需要进行编译。
应用程序使用说明
Usage: doca_eth_l2_fwd [DOCA Flags] [Program Flags] DOCA Flags: -h, --help Print a help synopsis -v, --version Print program version information -l, --log-level Set the (numeric) log level
for
the program <10
=DISABLE,20
=CRITICAL,30
=ERROR,40
=WARNING,50
=INFO,60
=DEBUG,70
=TRACE> --sdk-log-level Set the SDK (numeric) log levelfor
the program <10
=DISABLE,20
=CRITICAL,30
=ERROR,40
=WARNING,50
=INFO,60
=DEBUG,70
=TRACE> -j, --json <path> Parse all command flags from an input json file Program Flags: -d, --devs-names <name1,name2> Set two IB devices names separated by a comma, without spaces. -r, --rate <rate> Set packets receive rate (in [MB/s]),default
is12500
. -ps, --pkt-size <size> Set max packet size (in [B]),default
is1600
. -t, --time <time> Set packet max process time (in [μs]),default
is1
. -nt, --num-tasks <num> Set number of tasks per batch,default
is128
. -nb, --num-batches <num> Set number of task batches,default
is32
. -o, --one-sided-forwarding <num> Set one-sided forwarding:0
- two-sided forwarding,1
- device1
-> device2
,2
- device2
-> device1
.default
is0
. -f, --max-forwardings <num> Set max forwardings after which the application run will end,default
is0
, meaning no limit.有关更多信息,请参阅下面的 命令行标志 部分。
注意可以使用
-h
(或--help
) 选项将上述用法打印到命令行./doca_eth_l2_fwd -h
在 BlueField 或 主机 上运行应用程序的 CLI 示例
./doca_eth_l2_fwd -d mlx5_0,mlx5_1
注意两个 IB 设备标识符 (
mlx5_0, mlx5_1
) 应与所需 IB 设备的标识符匹配。该应用程序还支持基于 JSON 的部署模式,其中所有命令行参数都通过 JSON 文件提供
./doca_eth_l2_fwd --json [json_file]
例如
./doca_eth_l2_fwd --json ./eth_l2_fwd_params.json
注意在执行之前,请确保使用的 JSON 文件包含正确的配置参数,尤其是部署所需的所需 IB 设备名称。
命令行标志
标志类型 | 短标志 | 长标志/JSON 键 | 描述 | JSON 内容 |
通用标志 |
|
| 打印帮助概要 | 不适用 |
|
| 打印程序版本信息 | 不适用 | |
|
| 设置应用程序的日志级别
|
| |
不适用 |
| 设置程序的日志级别
| 不适用 | |
|
| 从输入 json 文件解析所有命令标志 | 不适用 | |
程序标志 |
|
| 两个 IB 设备名称,用逗号分隔,没有空格。 注意
这是一个强制标志。 |
|
|
| RX 端口预计接收流量的速率(单位:[MB/s])。 |
| |
|
| 接收数据包的最大大小(单位:[B])。 |
| |
|
| 处理单个数据包的最长时间。 |
| |
|
| 每个任务批次要设置的任务数。 |
| |
|
| 为 TX 端设置的任务批次数。 |
| |
|
| 设置 3 个选项之一的标志 0 - 双向转发。 1 - 从设备 1 到设备 2 的单向转发。 2 - 从设备 2 到设备 1 的单向转发。 |
| |
|
| 最大转发次数 |
|
有关支持的标志和执行模式的更多信息,请参阅 DOCA Arg Parser。
故障排除
有关安装或执行 DOCA 应用程序时可能遇到的任何问题,请参阅 DOCA 故障排除。
解析应用程序参数。
初始化 Arg parser 资源并注册 DOCA 通用参数。
doca_argp_init();
注册以太网 L2 转发应用程序参数。
register_eth_l2_forwarding_params();
解析参数。
doca_argp_start();
解析 DOCA 标志。
解析应用程序参数。
执行以太网 L2 转发应用程序主逻辑。
eth_l2_fwd_execute();
打开两个选定的 DOCA 设备。
初始化必要的 DOCA Core 对象。
初始化设备的 ETH RXQ/TXQ 上下文。
转发数据包。
清理应用程序资源。
eth_l2_fwd_cleanup();
停止所有上下文并耗尽任务。
释放所有应用程序资源。
Arg parser 销毁。
doca_argp_destroy()
/opt/mellanox/doca/applications/eth_l2_fwd/
/opt/mellanox/doca/applications/eth_l2_fwd/eth_l2_fwd_params.json