Hi all,

I ran into a problem with a multi-process application, in which two processes 
assigned the same mempool handler ops index to *different* handlers. This 
happened because the two processes supplied the -d EAL arguments in different 
order, e.g.:

sudo ./appA -dlibrte_mempool_bucket.so -dlibrte_mempool_ring.so --proc-type 
primary &
sudo ./appB -dlibrte_mempool_ring.so -dlibrte_mempool_bucket.so --proc-type 
secondary &

The dynamic load order matters because the ops indexes are assigned in the 
order the library ctors are run. This can result in the different processes 
trying to use different handlers for the same mempool.

I'm not aware of any requirement that the EAL argument order should match 
across processes, so I don't think this is a user error. This could also happen 
in static libraries if they linked the libraries in a different order - but 
that shouldn't occur if both applications are following the rules for building 
an external application 
(https://doc.dpdk.org/guides/prog_guide/dev_kit_build_system.html#building-external-applications).

If you agree that this is an issue, I see a couple possible resolutions:


1.       Add a note/warning to the mempool handlers section of the user guide 
(https://doc.dpdk.org/guides/prog_guide/mempool_lib.html#mempool-handlers)

2.       Modify rte_mempool_register_ops() so that built-in handlers (ring, 
stack, etc.) have fixed IDs. E.g. ring is always 0, stack is always 1, etc. 
These handlers could be identified by their name string. User-registered 
mempools would still be susceptible to this problem, though.

Thoughts? Alternatives?

Thanks,
Gage

Reply via email to