[dpdk-dev] Multi-thread mempool usage

Matteo Lanzuisi m.lanzuisi at resi.it
Mon Aug 13 15:20:44 CEST 2018


Any suggestion? any idea about this behaviour?

Il 08/08/2018 11:56, Matteo Lanzuisi ha scritto:
> Hi all,
>
> recently I began using "dpdk-17.11-11.el7.x86_64" rpm (RedHat rpm) on 
> RedHat 7.5 kernel 3.10.0-862.6.3.el7.x86_64 as a porting of an 
> application from RH6 to RH7. On RH6 I used dpdk-2.2.0.
>
> This application is made up by one or more threads (each one on a 
> different logical core) reading packets from i40e interfaces.
>
> Each thread can call the following code lines when receiving a 
> specific packet:
>
> RTE_LCORE_FOREACH(lcore_id)
> {
>         result = 
> rte_mempool_get(cea_main_lcore_conf[lcore_id].de_conf.cmd_pool, 
> (VOID_P *) &new_work);        // mempools are created one for each 
> logical core
>         if (((uint64_t)(new_work)) < 0x7f0000000000)
>             printf("Result %d, lcore di partenza %u, lcore di 
> ricezione %u, pointer %p\n", result, rte_lcore_id(), lcore_id, 
> new_work);    // debug print, on my server it should never happen but 
> with multi-thread happens always on the last logical core!!!!
>         if (result == 0)
>         {
>             new_work->command = command; // usage of the memory gotten 
> from the mempool... <<<<<- here is where the application crashes!!!!
>             result = 
> rte_ring_enqueue(cea_main_lcore_conf[lcore_id].de_conf.cmd_ring, 
> (VOID_P) new_work);    // enqueues the gotten buffer on the rings of 
> all lcores
>             // check on result value ...
>         }
>         else
>         {
>             // do something if result != 0 ...
>         }
> }
>
> This code worked perfectly (never had an issue) on dpdk-2.2.0, while 
> if I use more than 1 thread doing these operations on dpdk-17.11 it 
> happens that after some times the "new_work" pointer is not a good 
> one, and the application crashes when using that pointer.
>
> It seems that these lines cannot be used by more than one thread 
> simultaneously. I also used many 2017 and 2018 dpdk versions without 
> success.
>
> Is this code possible on the new dpdk versions? Or have I to change my 
> application so that this code is called just by one lcore at a time?
>
> Matteo
>
>
>

-- 


Descrizione: resi.gif

*Matteo Lanzuisi*

/Business Unit ICT/

/
/RESI Informatica S.p.A.
Via Pontina Km 44,044
04011 Aprilia (LT) - Italy
*Tel:*+39 06 92710339
*Mobile:*+39 3355686712
*Fax:*+39 06 92710208

*Email:*m.lanzuisi at resi.it
*Web:*www.resi.it <blocked::http://www.resi.it/>**

Descrizione: resi-group.gif width= <http://www.resi-group.com/>

_ _ _ _ _ _ _ _ _ _ _ _

*Nota di riservatezza:*Ai sensi del Decreto Legislativo n. 196/2003, 
"Codice in materia di Protezione dei dati personali", si precisa che le 
informazioni contenute in questo messaggio e negli eventuali allegati 
sono riservate e per uso esclusivo del destinatario. Persone diverse 
dallo stesso non possono copiare o distribuire il messaggio a terzi. 
Chiunque riceva questo messaggio per errore è pregato di distruggerlo e 
di informare immediatamente il mittente. Grazie.


*Confidentiality Notice:* Accordingly to Italian legislative decree n. 
196/2003 concerning privacy, the information contained in this e-mail is 
intended for the named recipients only. It may contain privileged and 
confidential information and if you are not an intended recipient, you 
must not copy, distribute or take any action in reliance on it. If you 
have received this e-mail in error, please notify the sender by e-mail 
and delete the e-mail and any copies of it. Thank you.

*P*****Please consider the environment before printing this mail. 
Rispettate l’ambiente e stampate questa email solo in caso di reale 
necessità



More information about the dev mailing list