首页 > 解决方案 > 为 DPDK 运行 Helloworld 示例?

问题描述

我是 DPDK 的新手,正在运行作为 DPDK 构建的一部分给出的 Helloworld 示例。在这里,我能够成功运行并获得预期的 O/p。那就是在不同的 lcore 上打印 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 中的工作方式的理解有什么问题吗?

标签: dpdk

解决方案


可能有几个原因可能会导致您的观察,例如

  1. DPDK 示例hello world是一个简单的竞赛程序模型,它lcore_hello在所有工作线程和主线程中启动。在所需的 lcore 上运行没有无限循环的 while 或 for。
  2. DPDK 应用程序在 VM 内运行,ISOL cpu 设置为单核。
  3. htop 采样时间不足以显示所有 4 个 cpu 都已使用的情况

由于有关设置和环境的信息有限,我不得不假设您的错误原因是 3。您的要求的解决方案是为了在所有线程中实现 100% 的利用率,编辑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;
}

注意:我强烈建议使用perf record正确的采样率来捕获特定应用程序启动的所有核心事件。


推荐阅读