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: [email protected] 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
