首页 > 解决方案 > 如何在同一主机上运行的 2 个 dpdk-testpmd 实例上运行发送和接收流量?

问题描述

注意:我是网络和 dpdk 的新手,所以在基本概念上可能存在一些误解......

我想dpdk-testpmd在同一主机上运行 2 个实例以通过单独的 NIC 发送和接收流量。

配置:

网卡:

更新

测试日志:

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. 如何在实例1中设置实例2的端口MAC地址?
  2. RX P=0/Q=0是什么意思?
  3. 网卡是否会从它的 RXQ 0(内存中的环形缓冲区)接收数据包?
  4. 网卡是否会将数据包(刚刚从 RXQ 获得)放入它的 TXQ 0?
  5. 接下来会发生什么?
  6. 数据包的目的地在哪里?
  7. 如何设置/检查它?

希望得到您的帮助。提前致谢。

标签: dpdk

解决方案


注意:我强烈建议您阅读 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

推荐阅读