【问题标题】:How to debug a DPDK app that uses hugepages如何调试使用大页面的 DPDK 应用程序
【发布时间】:2015-12-06 15:58:50
【问题描述】:

我正在处理使用 DPDK-1.6.0r0 编写的应用程序,我想对其进行调试。我的第一个想法是使用 gdb,但我得到了这个错误: EAL:hugepages-2048kB 中没有报告免费的大页面

我是这样编译环境的: make install T=x86_64-default-linuxapp-gcc EXTRA_CFLAGS='-g -ggdb'1

大页面预订:

cd /tmp
sudo mkdir -p /mnt/huge
grep -s '/mnt/huge' /proc/mounts > /dev/null
if [ $? -ne 0 ] ; then
    sudo mount -t hugetlbfs nodev /mnt/huge
fi
Pages=256
echo "echo $Pages > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages" > .echo_tmp

echo "Reserving hugepages"
sudo sh .echo_tmp
rm -f .echo_tmp

然后我使用 gdb 运行应用程序:

gdb appname`
...
(gdb) start appname -c 7e -n 3 --no-hpet -- -p 1`

你有什么解决办法吗?

【问题讨论】:

    标签: debugging networking gdb packet-capture dpdk


    【解决方案1】:

    使用--no-huge-m EAL 选项,因此您不需要大页面。

    例如,在 GDB 中使用 128MB 的“malloc”内存: gdb --args appname -c 7e -n 3 --no-hpet --no-huge -m 128 -- -p 1

    如果您真的想使用带有特定挂载点的大页面,请使用 --huge-dir EAL 选项: gdb --args appname -c 7e -n 3 --no-hpet --huge-dir /mnt/huge -- -p 1

    【讨论】:

    • 完美。我只想添加我必须以 root 身份运行 gdb 才能使用大页面。
    • 除了DPDK官方网站上的文档之外,是否还有某种“教程”? @jeremf
    • 我不知道在 DPDK 网站以外的其他地方有什么好的“教程”。但是这个网站上的文档写得很好并且可以理解。对于 EAL 选项,您可以在 testpmd 文档中查看它们的描述:dpdk.org/doc/guides/testpmd_app_ug/…
    【解决方案2】:

    您可以使用 GDB 在大页面中调试 DPDK 应用程序,这不是问题。 hugepage 只涉及一些设置(hugetlbfs 映射、rte_memseg 设置、使用 rte_malloc),并且在运行时,它应该看起来与普通页面相同。

    是的,cmets 是对的,您必须是 root 才能访问大页面。有地方说通过使非特权用户可以访问大页面安装点,您可以启动 DPDK 应用程序。但是,这不再正确,因为出于安全考虑,Linux 已向具有 CAP_SYS_ADMIN 功能的用户添加了 /proc/self/pagemap 访问控制。如果没有 pgemap,DPDK 将无法工作,因为它无法为其拉模式驱动程序 DMA 找到物理地址映射。

    https://www.kernel.org/doc/Documentation/vm/pagemap.txt

    【讨论】:

      【解决方案3】:

      在下面的方法中,我假设您可以毫无问题地启动您的应用程序。如果您能够启动您的应用程序,您可以尝试以下技巧,我总是为我的应用程序在 GDB 中进行调试。确保你已经编译了带有 GDB 标志的 DPDK 库,无论如何你都会这样做。

      int loop_hack=1
      while(loop_hack);
      

      使用上述内容,您的应用程序将从一开始就循环等待。使用所有参数成功启动您的应用程序后,将其附加到 gdb。不是您的应用程序的 PID

      gdb <app_withsymbol> -p <pid> set loop_hack=0 c

      【讨论】:

        猜你喜欢
        • 2018-03-28
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多