在一个虚拟机中运行 dpdk pktgen 和数据包捕获



我想设置一个dpdk env,然后我可以在一个虚拟机中进行数据包生成和数据包捕获。这可能吗?如果是,请问(端口布局等)设置的细节是什么样子的?

我尝试在一个 VM 中创建 2 个兼容 dpdk 的端口,并在一个端口上执行 pktgen,在另一个端口上进行数据包捕获。但它不起作用。请注意,在执行 pktgen 时,我已经指定 dst mac 地址是数据包捕获应用程序正在嗅探的其他端口的 mac 地址。

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

谢谢!

应该是可能的。请注意,"它不起作用"并不能完全描述您的问题,所以我必须在这里放弃我的假设。

DPDK 的两个实例(例如 pktgen 和 l3fwd)应该能够在单个虚拟机上共存而不会出现任何问题,前提是您使用不同的前缀运行这两个实例,并使用 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

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

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

我从未尝试过这个,但只要您正确设置了 MAC 地址,将流量 VF 直接发送到 VF 也应该有效,这是一个合理的假设。有对DTS测试[1]的引用,它正是这样做的(只使用两个虚拟机而不是一个,我认为这不会有任何区别),所以这应该是可能的。

您也可以使用完全虚拟端口,并使用我们的软件驱动程序之一(例如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

最新更新