[dpdk-users] How rte_mempool_ops_table is populated in a DPDK client application?

Ming Fu Ming.Fu at esentire.com
Fri Sep 1 22:26:48 CEST 2017


Did some digging and find that the rte_mempool_ops_table is populated from function rte_mempool_register_ops().
>From a small program build in the dpdk example, the rte_mempool_register_ops() is called from the following stack trace

(gdb) where
#0  0x000000000047eea0 in rte_mempool_register_ops ()
#1  0x00000000006a8abd in __libc_csu_init ()
#2  0x00007ffff71f97bf in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#3  0x0000000000440f29 in _start ()

So this function is called probably before rte_eal_init(). If I have an application linked to a static lib of dpdk outside of dpdk build tree, how do I make it to register the call to rte_mempool_register_ops from __libc_csu_init()?

Thanks
Ming

From: Ming Fu
Sent: September-01-17 9:36 AM
To: users at dpdk.org
Subject: How rte_mempool_ops_table is populated in a DPDK client application?

Try to make snort to receive packet from a dpdk ring as an client application. The DPDK is compiled into the snort DAQ lib statically. The DAQ lib is then linked to snort statically.

What I am find is that the rte_mempool_ops_table is all 0, causing the client to crash when free the received mbuf from the ring. I was wondering how this rte_mempool_ops_table is populated during DPDK initialization for a client application.

The my dpdk snort went through rte_eal_init(), rte_ring_lookup() and rte_mempool_lookup() without error.

Thanks
Ming


More information about the users mailing list