dpdk - 如何在同一主机上运行的 2 个 dpdk-testpmd 实例上运行发送和接收流量?
问题描述
注意:我是网络和 dpdk 的新手,所以在基本概念上可能存在一些误解......
我想dpdk-testpmd
在同一主机上运行 2 个实例以通过单独的 NIC 发送和接收流量。
配置:
网卡:
- PMD:MLX5
- 版本:5.0-1.0.0.0
- 固件版本:16.26.1040 (MT_0000000011)
- NUMA-Socket:相同
- PCIe:0000:3b:00.0、0000:3b:00.1
更新
- DPDK 版本:20.11.1
- 巨页总数:32768
- 巨页免费:32768
测试日志:
Logical Core 12 (socket 0) forwards packets on 6 streams:
RX P=0/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00
问题:
- 如何在实例1中设置实例2的端口MAC地址?
- RX P=0/Q=0是什么意思?
- 网卡是否会从它的 RXQ 0(内存中的环形缓冲区)接收数据包?
- 网卡是否会将数据包(刚刚从 RXQ 获得)放入它的 TXQ 0?
- 接下来会发生什么?
- 数据包的目的地在哪里?
- 如何设置/检查它?
希望得到您的帮助。提前致谢。
解决方案
注意:我强烈建议您阅读 dpdk testpmd,因为它详细涵盖了您的所有问题。根据 StackOverflow 指南,多个子问题使回答变得困难。请使用格式正确且格式正确的问题以获得更好的覆盖范围和答案。
@Alexcured,因为您提到您知道如何运行dpdk-testpmd
. 我只会推荐大量阅读dpdk-testpmd URL,它也可以回答你的大部分问题。
假设,两个 PCIe NIC 都正常工作,并且 2 之间的互连通过 arping 或 ping(内核驱动程序)进行测试。将两个 PCIe 设备绑定到支持 DPDK 的驱动程序后,应使用 DPDK 20.11.1 的选项,例如
- 使用文件前缀选项作为唯一名称
- 设置 socket-memory 以从所需的 NUMA-SOCKET 获取内存
- 设置 socket-limit 以防止大页面 mmap 膨胀
- 使用 w|b 选项将 PCIe 设备列入白名单|黑名单(0000:3b:00.0 和 0000:3b:00.1)
- 由于它是独立的物理设备,因此确保 2 个 PCIe 端口之间存在物理电缆连接。
[Q.1] 如何在实例1中设置实例2的端口MAC地址?
[A.1] in DPDK instance-1 & instance 2, execute `show port 0 mac` to show current port MAC address. Note down the MAC address correctly. To set the MAC address of peer use command `set eth-peer (port_id) (peer_addr)`.
In non interactive mode this can be done from cmdline too.
[Q.2] RX P=0/Q=0是什么意思?
[A.2] P stands for `port`, and Q stands for `queue`. So P=0/Q=0 means `port 0/queue 0`
[Q.3] 网卡是否会从它的 RXQ 0(内存中的环形缓冲区)接收数据包?
[A.3] NIC can receive from port 0 - rxq -0; provided there is no offload|RSS|Rules set (since you have not shared the cmdline I will assume there is none).
NIC HW RQ is mmaped to reflect HEAD-TAIL pointer to allow PMD to trigger DMA copy to mempool (huge page backed area). This is different from DPDK lib_rte_ring buffer area
[Q.4] 网卡是否会将数据包(刚刚从 RXQ 获得)放到它的 TXQ 0 中?
[A.4] if the option `start tx-first` is not used, as per the current understanding there will not be any packets TX from the NIC (for Intel FVL LLDP packets will be send from NIC HW unless disabled).
The default configuration in looped mode, and with 1 DPDK port RX of the Port will be always sent out as TX.
[Q.5] 接下来会发生什么?
[A.5] Packet will be send out with modified eth-peer mac address
[Q.6] 数据包的目的地在哪里?
[A.6] Ethernet Packet has the format of first 6 bytes as destination MAC address. With `set peer-address` done the MAC address as the destination will be set as value set.
[Q.7] 如何设置/查看?
[A.7] use option `set verbose 2`. This will show the RX packet details received from the port
推荐阅读
- java - arrayList 的 Printf 输出到具有适当缩进的表
- python - 将日期作为 URL 参数传递给烧瓶路由
- python - Keras 功能 api 给出错误“预期 ndim=3,发现 ndim=4”
- c++ - 在 QTableView 中为一行着色
- r - 悬停时无法访问 Plotly 中的变量
- c - Linux 上的 HIDAPI 似乎无法识别描述符
- json - 如何在 Swift 4 中使用可编码的方式解码 JSON?
- r - R reshape2 - 将 6 列转换为 2 列
- java - 为什么 Apache Camel 文件到 sftp 路由失败
- amazon-web-services - 将 AWS 策略分配给用户