Hi,
I am having problem with SRIO Type11 data transfer. Basically when some external device sends a stream of type11 messages some packets get lost. The link partner receives responses without errors. This happens at speeds 6-10 Gbps (SRIO in 4 lane 3.25 Gbps). I can receive big chunks (tens of MB) of data if at around 5Gbps without losses but at higher speed there is mismatch in packet count on both ends. I use srio driver.
I receive data by calling Srio_sockRecv in a cycle. If there is some nontrivial code inside the loop the number of lost packets is big if loop is empty the number is small or sometimes all data is received (compiling in release also helps). That seems strange because there is around 3k cpu cycles between packets (4k bytes per packet at 10 Gbps). If I send small number of packets (fewer then srio_driver_config.u.drvManagedCfg.rxCfg.numRxBuffers) then it seems that all messages are received regardless of speed.
There are a couple of things that might cause this problem:
- I use NDK that uses QMSS/CPPI.
- The main cycle is run inside SYSBIOS task.
- Instead of using simplified OSAL memory allocation as in example, the function Osal_srioDataBufferMalloc uses HeapBuf_alloc.
- Data from srio is transfered into DDR.
Do I need to go to barebone design and get rid of all of the above in oder to ensure reliable data trasfer? Is there a way to detect packets received by srio subsystem and dropped due to the lack of unused qmss/cppi rx buffers?
Thanks in advance,
Alexey