问题标签 [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.
packet - 如何检测 DPDK 中的丢包风险?
假设在一个典型的 DPDK 应用程序中,lcore 从队列 0 端口 0 接收数据包流。处理后,将它们转发到队列 0 端口 1。我们如何知道我们面临丢包风险。即处理率小于收入率并且积压数据包的数量即将超过接收队列大小。例如,当我们使用接收数据包rte_eth_rx_burst()
并检索 MAX 可能的数据包时,我们能说什么?我们如何检测丢包或丢包风险?
c - 从 Rust 调用 DPDK 函数时,从 C 调用时输出不同
我正在编写一个与 Intel 的 DPDK 接口的 Rust 程序,但我遇到了一个我不太了解的问题。我目前可以在 Rust 程序中执行 DPDK 库中的函数,但它与用 C 编写的同一程序的结果不同。
Rust 程序输出 -
C 程序输出 -
DPDK 已编译为我在 Rust 中链接到的静态库。下面是 Rust 和 C 程序的代码。
Rust main.rs -
C main.c -
我通过查看 DPDK 源代码并添加打印语句来查看不同之处进行了一些调查。该rte_eal_init()
函数位于eal.c中,并调用各种其他 init 函数。额外输出的触发器来自eal_common_dev.crte_eal_dev_init()
中调用的另一个函数。
rte_eal_dev_init()
-
我发现 Rust 程序进入了rte_eal_dev_init()
函数,但从未进入TAILQ_FOREACH()
宏的循环。如果我要像这样在宏的上方和下方添加打印语句 -
这给了我 Rust 中的以下输出 -
以及 C 中的以下输出 -
我发现它TAILQ_FOREACH()
是在sys/queue.h中定义的。据我了解,链接到静态库不应该导致库动态链接到其他内容的问题。这个对吗?
ubuntu - 无法`make install` ovs
我正在按照本指南使用 DPDK 安装 OVS。
我一直管理到2.3 安装 OVS
一切运行良好,没有任何错误,但是当我这样做时
它失败。
这是输出
我不明白我错过了什么。
DPDK 是dpdk-16.07
OpenVSwitch 是openvswitch-2.5.0
Ubuntu 是Ubuntu 16.04.1 LTS
任何帮助将不胜感激。
谢谢你。
dpdk - 大页面存在,但不是免费的,也不是保留的。或者,我如何释放大页面?
我正在运行一个 SPDK 实验(它使用 DPDK,而 DPDK 又使用大页面),它昨天还在工作。我在共享环境中运行它们(我认为还有一两个人将这台机器用于其他东西)。现在,每当我尝试运行它时,都会出现 no free hugepages 错误。
/proc/meminfo 的输出是:
安装输出:
在我上一个环境中起作用的东西不再起作用:
然后 /proc/meminfo 的输出是
但如果我尝试运行它:
为什么这些页面是多余的而不是免费的?有什么办法可以释放他们吗?我想重新启动系统,因为可能有其他作业正在运行或有人在使用它。
编辑:重新启动机器,分配更多的大页面并且它们是免费的。执行测试,它崩溃了,现在大页面又丢失了。
没有有效答案的相关问题(至少对我而言):
dpdk - DPDK“端口数必须是偶数”一个以太网设备
我正在尝试从 DPDK 源代码运行骨架示例,但是每当我尝试在 make 过程之后构建代码时,我都会收到一条错误消息:“端口数必须是偶数”但是当我尝试查看我的以太网设备列表时我只能看到一台设备(我在 Ubuntu 的 vmware 工作站环境下运行骨架示例)
我想过尝试模拟另一个以太网设备,这可能吗?我应该怎么做才能使骨架示例运行?
sockets - 如何编写自己的 TCP/IP 或 ISO/OSI 堆栈以使用 WebSockets 而无需每次都使用握手?
我的目的是将 WebSockets 与自己的 TCP/IP 或 ISO/OSI 堆栈一起使用。我想对从客户端到应用程序服务器的所有请求进行负载平衡(我们知道 WebSockets 只能与已建立连接的一台服务器一起使用)。我希望能够连接到一个节点并向任何节点发送请求。
算法如下:
1. 客户端与负载均衡器后面的一个节点建立连接。
2. 客户端通过 WebSocket 向负载均衡器发送数据。
3. 负载均衡器接收数据并将其发送到任何服务器。
4. 服务器看到数据并将其发送给应用程序。即使尚未建立连接,服务器也不会丢弃数据包,它只是将数据包发送到应用程序。
在这种情况下,我们可以轻松地对 WebSockets 请求进行负载平衡。我试图了解如何重写 TCP/IP 堆栈并让数据包直接进入用户空间中的应用程序,但我很困惑。
我们需要使用 DPDK 吗?是的,那么您能否展示一个如何直接接收和发送数据包或如何跳过连接检查的最小示例?如果没有,那么在这种情况下我们需要使用什么?
installation - ovs2.6:无法创建未知类型 dpdk 的 netdev dpdk1
我正在尝试使用 DPDK16.07 设置 OVS2.6。我正在遵循openvswitch-2.6.0.tar.gz下的 INSTALL.DPDK.md 说明。在 ovs-vswitchd.log 中收到以下警告消息:
00034|netdev|WARN|无法创建未知类型 dpdk 的 netdev dpdk1 00035|bridge|WARN|无法打开网络设备 dpdk1(协议不支持地址系列)
谷歌一点点显示这个问题也存在于早期的 ovs 版本中,但我没有找到任何令人满意的解决方案。
知道什么可能是根本原因,以及如何解决它?
谢谢!
linux - 如何在 Linux 中获取 DMA 的 MMU 进程的页表
如何在 Linux 中获取 DMA 的 MMU 进程的页表?
(对于 DPDK 应用、自定义 DMA、FPGA 中的自定义 MMU、Zynq-7020/US+、Linux 4.6+,DMA 的 MMU 绑定到单个进程)
进程的Task_struct可以通过内核模块获得,内核模块可以通过“当前”访问它,如那里所述。
我struct mm_struct *mm, *active_mm;
在struct task_struct (line 1475)的第 1549 行看到。
我认为页表指针必须在那里,但我看不到它。
有谁知道它存储在哪里?
linux - 不确定如何在启用 RSS 的情况下设置和使用 dpdk-pktgen
我正在购买 25Gbe 卡,目前正在评估该卡,我似乎无法让它接收 64 字节 UDP 或 TCP 数据包流量的 25G 流。收到大量丢包,dpdk-pktgen 说明它使用的内核数量与我设置的一样多。最难发现的是为什么数据包进入 MAC 但在到达物理层时被丢弃。这使我相信数据包接收的分散没有得到正确处理。让我相信 RSS 不会在 dpdk 下与设备一起发生。IRQ 分散在系统中使用的内核中,这些内核已被隔离以防止内核将作业置于它们之上,并且所有需要的调整似乎都表明它已经完成,并且事情应该继续进行,
运行命令初始化 dpdk-pktgen:
我阅读了DPDK RSS提供的文档,但没有看到任何更改。我已经更改了 dpdk 源“$RTE_SDK/drivers/net/mlx5/mlx5-rss.c”中包含的实际驱动程序,并添加了它建议的密钥,我还操作了 pktgen-port-cfg.c 文件使用相同的指令更改以下代码片段
更改 rx_adv_conf 以反映我想要使用的密钥,即。
问题是文档似乎声明只要设置了 rss_hf 参数,那么它将使用 RSS,如果没有明确说明,则内部定义。如果是这种情况,是否有办法在 pktgen、ethtool 或任何其他工具中验证每个环的接收率?
dpdk - 使用 DPDK 应用程序时,rte_eth_dev_count 总是返回 0
我已将 NIC 卡配置如下:-
当我运行 ethtool 示例应用程序时,它给出的错误为 0 NIC 端口,如下所示:-
如果端口配置错误或其他原因,有人可以帮我配置端口。