如何调试使用largepages的DPDK应用程序

时间:2015-12-06 15:58:51

标签: debugging networking gdb packet-capture dpdk

我正在使用DPDK-1.6.0r0编写的应用程序,我想调试它。我的第一个想法是使用gdb,但是我收到了这个错误: EAL:大型页面报告没有免费的大页面--2048kB

我用这种方式编译环境: make install T=x86_64-default-linuxapp-gcc EXTRA_CFLAGS='-g -ggdb' 1

hugepages预订:

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`

你有什么想法来解决它吗?

3 个答案:

答案 0 :(得分:3)

使用--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

答案 1 :(得分:1)

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

是的,评论是对的,你必须是root才能访问hugepage。有一个地方说,通过使非特权用户可以访问巨大的页面安装点,您可以启动DPDK应用程序。但是,由于安全问题,Linux已经为具有CAP_SYS_ADMIN功能的用户添加了/ proc / self / pagemap访问控制,因此不再适用。如果没有pgemap,DPDK就无法工作,因为它无法为其拉模式驱动程序DMA找到物理地址映射。

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

答案 2 :(得分:0)

在下面的方法中,我假设您可以毫无问题地启动应用程序。如果您能够启动您的应用程序,则可以尝试以下技巧,而我始终会为我的应用程序在GDB中进行调试。确保您已经使用GDB标志编译了DPDK库。

int loop_hack=1
while(loop_hack);

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

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