Hi everyone, I am working on a multi-process DPDK application. It uses one NIC, one port, and both separate processes send as well as receive, and they share memory for synchronization and IPC.
I had previously made a mistake in setting up the lcores, and all of the processes were assigned to the same physical core. This seems to have concealed some DPDK thread safety issues which I am now dealing with. I understand that rte_eth_tx_burst() and rte_eth_rx_burst() are not thread safe. Previously I did not have any synchronization around these functions. Now that I am successfully using separate cores, I have added a shared spinlock around all invocations of these functions, as well as around all mbuf frees and allocations. However, when my code sends a packet, it checks the return value of rte_eth_tx_burst() to ensure that the packet was actually sent. If it fails to send, my app exits with an error. This was not previously happening, but now it happens every time I run it. I thought this was due to the lack of synchronization but it is still happening after I added the lock. Why would rte_eth_tx_burst() be failing now? Thank you, -Alan