问题标签 [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.
linux-kernel - BUG:无法处理内核分页请求,DPDK
我试图DPDK
KNI
用 dpdk 版本 16.07.2 运行应用程序,
为此,我首先使用以下命令取消绑定端口ixgbe
并将它们绑定到模块igb_uio
我使用 Linux 版本 4.4.20 (sushila@dev03) (gcc 版本 4.9.2 (crosstool-NG 1.20.0) ) #1 SMP Fri Feb 24 14:32:28 CST 2017 编译了目标机器的 kni 应用程序
当我运行应用程序时,它挂起以下消息
在那里我看到它在文件kni_net_rx_normal()
功能的某个地方失败了kni_net.c
。
所以我缩小了它失败的代码行,它来到了发生 memcpy 的第 169 行接下来我尝试在该函数中打印一些地址,它给了我
接下来我尝试查看是否可以打印data_kva地址中的数据并在那里失败,所以当我尝试访问data_kva @ 0000077e1d012900时似乎失败了,我猜地址错误,我不知道为什么,你能给我一些关于这个或一些尝试调试问题的想法。
nic - XL710如何设置RSS哈希函数接收IPv4流类型?
在 DPKD 中ETH_RSS_IPV4
,XL710 Intel NIC 的数据流默认不激活。因此,当您想在 lcore 之间分发数据包时,您必须选择 XL710 支持的其他 IPv4 数据流,即ETH_RSS_FRAG_IPV4
、ETH_RSS_NONFRAG_IPV4_TCP
、ETH_RSS_NONFRAG_IPV4_UDP
、ETH_RSS_NONFRAG_IPV4_SCTP
和ETH_RSS_NONFRAG_IPV4_OTHER
。但是,当您处理分段的 IP 数据包时,您将面临一个愚蠢的问题。如果您选择使用ETH_RSS_FRAG_IPV4
andETH_RSS_NONFRAG_IPV4_TCP
选项,则连接的一些碎片数据包将落入另一个队列,因为它们没有 L4 端口号。如果排除ETH_RSS_NONFRAG_IPV4_TCP
函数,则ETH_RSS_FRAG_IPV4
散列函数将不会应用于非分段数据包,这些数据包将进入队列 0。所有其他散列函数组合将不起作用。那么,我们应该怎么做呢?
bus-error - 大量的大页面导致总线错误
我试图dpdk
timer
通过设置 512 个 2MB 大页面来运行应用程序,但应用程序因以下错误而崩溃
EAL:检测到 4 个 lcore
EAL:探测 VFIO 支持...
总线错误(核心转储)
如果我将数量减少hugepages
到 256,它可以正常工作。我想知道这里可能是什么问题。这是我的cpu信息
处理器:0
vendor_id:GenuineIntel
cpu 系列:6
型号:26
型号名称:Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz
步进:5
微码:0x11
cpu MHz:2794.000
缓存大小:8192 KB
物理 ID:0
兄弟:4
核心 id:0
cpu 核心:4
apicid:0
初始 apicid:0
fpu:是
fpu_exception:是
cpuid 级别:11
wp:是
标志: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc monitor ds_perf pni dtest4 tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dtherm tpr_shadow vnm i flexpriority ept vpid 错误:
bogomips:5600.00
clflush 大小:64
cache_alignment:64
地址大小:36 位物理,48 位虚拟
电源管理:
处理器:1
vendor_id:GenuineIntel
cpu 系列:6
型号:26 型号名称:Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz
步进:5
微码:0x11
cpu MHz:2794.000
缓存大小:8192 KB
物理 ID:0
兄弟: 4
核心 id : 1
cpu 核心 : 4
apicid : 2
初始 apicid : 2
fpu : 是
fpu_exception : 是
cpuid 级别 : 11
wp : 是
标志: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc monitor ds_perf pni dtest4 tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dtherm tpr_shadow vnm i flexpriority ept vpid 错误:
bogomips:5600.00
clflush 大小:64
cache_alignment:64
地址大小:36 位物理,48 位虚拟
电源管理:
这是我的 meminfo
MemTotal:24679608 kB
MemFree:24014156 kB
MemAvailable:23950600 kB
缓冲区:3540 kB
缓存:31436 kB
SwapCached:0 kB
Active:21980 kB
Inactive:22256 kB
Active(anon):10760 kB
Inactive
(anon):2940 kB
: 11220 kB
非活动(文件): 19316 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 32 kB
回写: 0 kB
AnonPages: 9252 kB
Mapped: 11912 kB
Shmem: 4448 kB
Slab: 27712 kB
SReclaimable: 11276 kB
SUnreclaim: 16436 kB
KernelStack: 2672 kB
PageTables: 1000 kB
NFS_Unstable: 0 kB
Bounce: 0 kB WritebackTmp
: 0 kB
CommitLimit: 12077660 kB
Committed_AS: 137792 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 2048 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 256
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
大页面大小:2048 kB
DirectMap4k:22000 kB
DirectMap2M:25133056 kB
performance - 为什么小包中DPDK转发性能较低?
我在“ http://fast.dpdk.org/doc/perf/Intel_DPDK_R16_11_NIC_performance_report.pdf ”阅读了这份报告“英特尔 DPDK 性能报告”。
我发现 DPDK 处理小数据包(如 64 字节)的性能低于大数据包(如 128/256 字节)。较大的有 100% 的线速。但较小的只有大约 60% 的线速。
为什么?仅仅因为小数据包会导致频繁操作?有什么限制?
linux-device-driver - 如何为 DPDK 应用程序更改 NIC 的批量大小?
我在运行Ubuntu 16.04的基于Xeon(R) CPU E5-2640 v3的服务器上使用英特尔 2P X520 适配器。当我们在 NIC 和应用程序中更改批处理因子时,我有兴趣测量应用程序的性能(吞吐量)。通过更改应用程序中的批量大小,我们可以获得更高的吞吐量,直到 PCIe 开始成为瓶颈。
我不确定如何更改 NIC 的批处理大小。代码中需要更改哪些内容以更改 NIC 的批处理大小以及 DPDK(版本 16.07)中 x520 NIC 的默认批处理大小是多少?
PS:对于某些应用程序而言,较大的批处理大小是一个问题,因为每个数据包的延迟相对于批处理大小会增加。我只对吞吐量感兴趣,而不是每个数据包的延迟。
dpdk - 如何使用 DPDK 发送和接收数据
我有一个四端口英特尔 1G 网卡。我正在使用 DPDK 在一个物理端口上发送数据并在另一个物理端口上接收数据。
我在 DPDK 代码中看到了一些示例,但无法使其工作。如果有人知道该怎么做,请给我发送简单的说明,以便我可以遵循和理解。我为大页面正确设置了我的 PC,加载驱动程序,并分配网络端口以使用 dpdk 驱动程序等...我可以从 DPDK 运行 helloworld,因此系统设置对我来说看起来不错。
提前致谢。温度5556
c - 它如何为不同 URL 的相同子字符串创建不同的哈希值?
我正在尝试在哈希表中添加给定 URL 的所有前缀。我已将所有 URL 存储在一个文件中,现在从文件中读取 URL。
例如:对于下面给出的 URL
它应该在表中插入以下前缀
这是代码:
但它正在插入
但是,当我将键字符数组的大小更改为 128 时,它工作正常。
我不确定我错过了什么,以及为什么当大小相同时它给出相同的哈希值,否则它会给出不同的哈希值。
interrupt - 在 DPDK 应用程序中编写抢占式用户级线程调度程序时的注意事项
我已经阅读了大量的 DPDK 文档,但我对它是否支持或鼓励中断感到困惑。文档直截了当地说 DPDK 不使用中断,但我仍然能够注册中断并成功接收它们。
具体来说,我正在研究是否可以为 DPDK 应用程序编写用户级抢占式线程调度程序。为了创建它,我需要注册定时器中断。文档说 DPDK 不支持调度程序。
我看到 DPDK 有一个 lthread 抽象,但它的调度程序实现需要每个单独的 lthread 手动将控制权交给调度程序,而不是根据计时器中断将控制权自动转移回调度程序。
我看到了警报功能(在 rte_alarm 中),它基于轮询模拟定时器中断。但是,您需要另一个 pthread 来进行轮询,目前轮询 pthread 是运行回调函数的那个(而我希望最初设置计时器的 pthread 运行回调函数)。
我不明白为什么 DPDK 会实现一个不支持抢占的 lthread 抽象,因为它可以注册来自操作系统的实时计时器中断。使用某些对象(例如无锁环形缓冲区)时可能需要更加小心,但这是可以管理的。
有人可以澄清 DPDK 支持什么吗?
dpdk - 为什么 bnx2x_recv_pkts 在 dpdk 中将 mbuf data_off 设置为 cqe_fp->placement_offset?
我设置了 256 字节的标题空间,我想用它来保存私有数据,但是bnx2x_recv_pkts
方法将 mbuf data_off 设置为cqe_fp->placement_offset
在 dpdk 中?为什么?
networking - ovs-dpdk 和 VM 之间的 VHOST-USER 接口
我试图了解 ovs-dpdk(在主机上运行)通过 vhost 用户界面与 VM 通信的数据包生命周期:
- 数据包通过物理端口接收到设备。
DMA 传输到用户空间中由 dpdk-ovs 分配的大页面上的内存池。
ovs-dpdk 将此数据包复制到关联来宾的 shared-vring(在 ovs-dpdk 用户空间进程和来宾之间共享)
来宾中不再有副本 - 即,当来宾上运行的任何应用程序想要使用数据包时 - 在 shared-vring 和来宾应用程序之间存在零副本。
那是对的吗?第 4 部分如何实施?这是来宾中的操作系统和来宾中的应用程序之间的通信,那么这是如何实现零拷贝的呢?