leoll2 / UDPDK

A minimal UDP stack based on DPDK
Other
90 stars 35 forks source link

pingpong sample application stuck in rte_eth_tx_burst() #5

Open plaublin opened 2 years ago

plaublin commented 2 years ago

Hello

Thank you for having developed and open-sourced UDPDK.

When I execute the pingpong application, the call to rte_eth_tx_burst() in udpdk_poller.c:flush_tx_table() is stuck. As a result no message is sent over the network. Strangely, when executing the application with gdb, adding a breakpoint to rte_eth_tx_burst(), and issuing next commands, the packet is sent over the network and correctly received by the other endpoint. This suggests to me there is a data race somewhere in the code.

I had to make a few small changes to the code and compilation process to fit with my environment (AMD EPYC 7543 and Mellanox ConnectX-6 Dx) that you can find here. However they should not impact the code in any negative way.

By any chance, would you have any pointers or ideas on the problem origin and/or how to debug it?

plaublin commented 2 years ago

Hi. After more investigation the problem is related to the two processes (parent + child) not waiting correctly on each others. I didn't find a beautiful fix for now, but here is the fix with a 5sec sleep in the child.

For fun I have also bumped the DPDK version and created Rust bindings to UDPDK here.

leoll2 commented 2 years ago

Hi @plaublin, thanks for the fix and the Rust bindings, awesome work!
I will try to test the changes as soon as I get hardware to do it :)