问题标签 [dpdk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
638 浏览

network-programming - 运行 DPDK KNI 示例的问题

我是 DPDK 的新手。我正在尝试了解 KNI。我编译并启动了库提供的 KNI 示例。

  • 我使用 ifconfig 命令调出对应于每个端口的 vEth 接口,并为它们分配 IP 地址和网络掩码。
  • 我试图对同一网络上的其他机器进行 ping 和 hping(tcp ping)。通过 tcpdump,我可以看到 KNI 接口发送了正确的帧,但似乎没有收到任何内容。
  • 我在 dmesg 或运行 KNI 测试脚本的控制台中看不到任何错误。
  • 我继续尝试通过打印出 mbufs 条目进行调试。KNI Rx 似乎没有在与应该接收数据/帧的 Eth 端口对应的环形缓冲区中找到任何内容。但是,ifconfig 消息确实会显示在缓冲区上,并相应地由内核执行。

如果有人可以建议我如何推进这一点并让它按预期工作,那将非常有帮助。我已经为此旋转了一段时间。我已经在具有多个网络接口的虚拟机和物理机上尝试过这个。

谢谢

0 投票
1 回答
822 浏览

dpdk - DPDK 基本硬件要求

我正在寻找DPDK + Vhost. 您知道此活动的最低硬件要求(如 CPU、内存大小等)吗?我有以下组合:-

  • 虚拟盒子中的 Fedora Core 20
  • 给 Fedora 的 4GB

想法是在这个 Fedora 里面有一个虚拟机,它可以使用 dpdk vhost 来转发数据包。

0 投票
1 回答
4604 浏览

dpdk - 英特尔 82540EM 未与 DPDK 驱动程序绑定

我正在使用 dpdk 库来增强数据包捕获。要使用 dpdk,我们需要将至少一个 NIC 绑定到 dpdk 驱动程序。正如 dpdk 文档中所写,我可以使用 uio_pci_generic 或 igb_ko 驱动程序。

为了与 dpdk 驱动程序绑定,他们提供了一个 python 脚本: http ://www.dpdk.org/browse/dpdk/plain/tools/dpdk_nic_bind.py

我的系统中有两个英特尔 NIC,英特尔 82579LM 和英特尔 82540EM。如http://dpdk.org/doc/nics中给出的,Intel 82540EM 是带有驱动程序 e1000 的受支持的 NIC。

现在,问题是我无法将Intel 82540EM与 dpdk 驱动程序绑定。我做了以下步骤:

  1. ifdown INTERFACE_NAME
  2. modprobe uio_pci_generic(或 insmod igb_ko)
  3. dpdk_nic_bind.py --bind=uio_pci_generic PCI_ID_OF_NIC

这将打印错误'Error: bind failed for PCI_ID_OF_NIC - Cannot bind to driver uio_pci_generic'。所以我尝试手动绑定它。我做了以下步骤来手动绑定网卡:

  1. ifdown INTERFACE_NAME
  2. modprobe uio_pci_generic(或 insmod igb_ko)
  3. echo "PCI_ID_OF_NIC" > /sys/bus/pci/drivers/e1000/unbind
  4. echo "PCI_ID_OF_NIC" > /sys/bus/pci/drivers/uio_pci_generic/bind

即使这样,我也会收到“bash: echo: write error: No such device”错误。我用 Intel 82579LM 尝试了相同的步骤,它完美绑定,但不幸的是它不是受支持的 NIC。

我究竟做错了什么?

[根据评论请求编辑更新Output of lspci -vnnk 01:02.0]

0 投票
1 回答
3138 浏览

network-programming - 使用 DPDK 创建 tcp/ip 连接

我想知道是否有一种方法可以使用 DPDK 在用户空间建立 TCP 连接而无需从内存中复制数据包?

我对此很陌生,我不知道从哪里开始,任何关于如何开始的建议都会有所帮助。我曾尝试在谷歌上搜索一些提示,或者是否有人问过,但我找不到很多资源。

0 投票
2 回答
1873 浏览

openvswitch - 将 DPDK 与 OVS 集成

我有一个关于集成的DPDK问题OVS。由于将帮助数据包绕过内核并将数据包直接传递到用户空间以供应用程序使用,如果我只想增强 Linux 机器的基本数据包交换,那么与DPDK它集成是否有意义?DPDKOVS

0 投票
1 回答
1126 浏览

network-programming - 如何正确修改数据包字段,并更新 ip/eth 校验和?

我像这样更改我的小 NAT 实现的数据包源端口和 IP 地址(数据包在 中struct rte_mbuf *m):

这是修改包的正确方法吗?如果是这样,我如何更新校验和?

0 投票
1 回答
146 浏览

linux - 有没有一种简单的方法可以从网络应用程序通过 IP 地址(不知道 MAC)发送数据包?

我正在使用 DPDK 开发一个小型 NAT 应用程序。目前,我使用pcap_pmd驱动程序,因此这些设备对于 ifconfig 和 mate 仍然可见。现在我想通过特定的 IP 地址发送一个数据包,但我不想运行 ARP,并自己修改路由表。

有没有办法只给接口一个数据包,让它弄清楚如何自动传递它?如果不是,通过已知 IP 查询该 MAC 地址的最简单方法是什么?该设备仍然由内核管理,所以也许我可以以某种方式查询它的路由表?

如果我使用较低级别的驱动程序,例如 e1000,它将设备与内核管理解除绑定,我仍然可以避免实现自己的路由吗?

0 投票
2 回答
564 浏览

network-programming - 如何在我们自己的dpdk应用中使用dpdk的librte_pmd_pcap进行抓包?

我是 DPDK 的新手,我正在尝试编写自己的应用程序,它会以线速捕获数据包。我可以将默认内核空间 libpcap long 与 dpdk ring 和 lcore 一起使用吗?或者我可以使用 dpdk 包中的 librte_pmd_pcap。

Librte_pmd_pcap 在内部使用内核空间 libpcap。

而且我不知道如何在我自己的 dpdk 应用程序中使用 librte_pmd_pcap。有人可以帮助我在我们自己的 dpdk 应用程序中使用 librte_pmd_pcap 来捕获 tcp 数据包。

*我已经测试了 dpdk 软件包附带的 testpmd 应用程序,testpmd 工作正常。我需要你的帮助来编写我自己的 dpdk 应用程序。提前致谢。

0 投票
1 回答
1205 浏览

network-programming - 如何确定以太网帧是否为 IPv4 数据包?

我在 DPDK 应用程序中使用 pcap_pmd,它不会packet_type自动设置字段。从接口接收到数据包后,如何确定正确的数据包类型?

编辑:以太网头结构:

没有给出在哪里搜索 L3 协议标识符的线索。

0 投票
2 回答
1951 浏览

c++ - CPU utlization on poll mode

For our project written in c++, we run the processor cores on poll mode to poll the driver (dpdk), but in poll mode the cpu utilization shows up as 100% in top/htop. As we started seeing glitch of packet drops, calculated the number of loops or polls executed per sec on a core (varies based on the processor speed and type).

Sample code used to calculate the polls/second with and with out the overhead of driver poll function is as below.

The poll count results are varying, sometimes we see a glitch and the number go down 50% or lower than regular counts, thought this could be problem with the linux scheduling the task so Isolated the cores using linux command line (isolcpus=...), Set affinity, Increase priority for the process/thread to highest nice value and type to realtime (RT)

But no difference.

So questions are, Can we rely on the number of loops/polls per sec executed on a processor core in poll mode?

Is there a way to calculate the CPU occupancy on poll mode since the cores CPU utilization shows up as 100% on top?

Is this the right approach for this problem?

Environment:

  • Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz
  • 8G ram
  • Ubuntu virtual machine on Vmware hypervisor.

Not sure if this was previously answered, any references will be helpful.