我是 DPDK 的新手,正在运行作为 DPDK 构建的一部分给出的 Helloworld 示例。在这里,我能够成功运行并获得预期的 O/p。那就是在不同的内核上打印 Hello World。
./dpdk-helloworld -l 0-3 -n 4
EAL: Detected 112 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: No available hugepages reported in hugepages-2048kB
EAL: Probing VFIO support...
EAL: No legacy callbacks, legacy socket not created
hello from core 1
hello from core 2
hello from core 3
hello from core 0
但是当我运行 htop 时,我只能看到正在使用的第一个核心,我预计将使用四个核心。
我对 EAL 在 DPDK 中的工作方式的理解有问题吗?
答案 0 :(得分:0)
可能有几个原因可能会导致您的观察,例如
hello world
是一个简单的运行竞争程序模型,它在所有工作线程和主线程中启动 lcore_hello
。没有无限循环的 while 或 for 在所需的 lcore 上运行。由于有关设置和环境的信息有限,我必须假设您的错误原因是 3。满足您要求的解决方案是为了在所有线程中实现 100% 的利用率编辑 {{1 }} 是一个无限循环,下面的示例代码
lcore_hello
注意:我强烈建议使用具有正确采样率的 static int
lcore_hello(__rte_unused void *arg)
{
unsigned lcore_id;
lcore_id = rte_lcore_id();
printf("hello from core %u\n", lcore_id);
while(1);
return 0;
}
来捕获特定应用程序启动的所有核心事件。