在一个VM中运行dpdk pktgen和数据包捕获

时间:2019-06-04 18:31:08

标签: dpdk

我想设置一个dpdk env,然后我可以在一台VM中进行数据包生成和数据包捕获。这有可能吗?如果是这样,请问(端口布局等)设置的详细信息如何?

我尝试在一个VM中创建2个dpdk兼容端口,并在一个端口上执行了pktgen,而在另一个端口上进行了数据包捕获。但这是行不通的。请注意,在执行pktgen时,我已经指定dst mac地址为数据包捕获应用正在监听的其他端口的mac addr。

似乎我要么将这两个端口物理地连接在一起,要么为这两个端口创建了一个我不知道的环回。

谢谢!

1 个答案:

答案 0 :(得分:1)

应该有可能。请注意,“行不通”并不能完全描述您的问题,因此在这里我不得不偏离我的假设。

两个DPDK实例(例如pktgen和l3fwd)应该能够在一个VM上共存而不会出现任何问题,只要您使用两个不同的前缀运行它们,并使用PCI白名单/黑名单确保没有端口在多个DPDK实例中使用。

因此,假设您的端口位于08:00.0和09:00.0,则以下可能是命令行:

    ./dpdk_app1 -w 08:00.0 --file-prefix=app1  # use only 08:00.0, use prefix app1
    ./dpdk_app2 -w 09:00.0 --file-prefix=app2  # use only 09:00.0, use prefix app2

如果您使用的不是DPDK的最新版本(18.05+),则还必须限制每个应用程序将使用的内存量,因为默认情况下,较早版本的DPDK会占用您的整个大页内存。对于DPDK 18.05+版本而言,这不是问题,因此,如果您使用它,则可以忽略此段。

现在,关于如何运行两个港口的物流问题-由您自己决定。如果使用物理NIC(使用PCI直通或使用虚拟功能),则可以背对背连接两个端口。这是(IMO)最简单的方法,但是请记住,虚拟功能的端口MAC地址必须与主机定义的端口MAC地址匹配-否则,流量将不会传入/传出您的虚拟功能。

我从没有尝试过,但是可以合理地假设,只要您正确设置了MAC地址,就可以直接将流量VF发送到VF。 DTS test [1]确实做到了这一点(仅使用两个VM而不是一个VM,我认为这不会有任何不同),因此应该可行。

您还可以使用完全虚拟的端口,并使用我们的软件驱动程序之一(例如tun [2]或pcap驱动程序[3])-它虽然性能不高,但可以完成工作。

[1] https://doc.dpdk.org/dts/test_plans/vf_to_vf_nic_bridge_test_plan.html

[2] https://doc.dpdk.org/guides/nics/tap.html

[3] https://doc.dpdk.org/guides/nics/pcap_ring.html