I teamed up with BrandonKinman to build a network streamer for ADC data. The system has three components:
- a DMA capable extension to the scope
- a driver that allocates suitable memory and provides hardware access to userland
- a command line application that sends data from the driver over a network socket
Forcibly disabling the cache on the DMA memory region resolved this issue, but as a consequence the maximum sustainable data rate dropped to about 8MSps. It seems that there is significant handling of the data being done by the kernel while it's in transit.
Following up on SampsaRanta's suggestions (see above), we are now looking into integrating netmap on the RedPitaya, and wiring it into a purpose-build network stack to achieve zero-copy transmission.
My next step is to get acquainted with the IP stack and to see what it would take to get it to not do anything with the buffers that it processes (apart from preparing and inserting headers and dividing it into chunks, obviously).
Any help with or advice on these matters is highly welcome.
At some point, a web front-end to the whole thing would also be required. Any takers ?