I need to develop an application to facilitate communications between two Linux computers using DPDK technology. It basically needs to send a string message from one to the other.
In particular, I need to develop a simple bi-directional communication link between two linux computers using DPDK technology, with the aim of reducing the overall loopback latency vs traditional socket (UPD) calls available in the operating system.
All we need is a simple function that sends a parameter string, and a receiving function that returns the string at the other end. It can be a blocking function that returns control once the string has arrived, or a main thread with a call back pointer to a procedure once the received string is available. The use case is similar to the standard UDP socket functions available in the operating system.
The demo testbench would include a simple console for the user to send strings and receive the same string back, plus a measure of the latency between send and receive. On the other end, it would consist of a program receiving and sending back the same string by calling the same receive and send functions.
Loopback latency should be benchmarked vs the same set up using UDP sockets. So the functions should be configurable to either use standard UDP sockets or DPDK (in order to run both experiments and compare overall loopback latency)
The project should be done in standard ANSI c, using gcc on eclipse.
Some additional details for clarification
The DPDK mode does not have the kernel functionality of Linux, so de facto this project entails an implementation of the UDP protocol. It is not really complicated but the functions should be able to fragment UPD datagrams (sending function) and reconstruct them (receiving function). So it is a bit more than just building a wrapper so that the functions to build just call the corresponding Linux/DPDK functions.
DPDK works at ethernet level (level 2) so you need to do yourself the needed level 3 functionality.
Another point: the implementation should be able to work in virtual environment, with the drivers VIRTIO-NET or VMXNET3, recently published, so that can be tested with regular equipment (no need for special ethernet cards)