If you want to program a high speed data plane packet processing, you must be thinking to optimize whatever can be. For example, you should want to minimize context switch which is result of system call. You should also want to capture packets in network interface without using system call. Note that Linux socket APIs are indeed system call.
This document tries to help in this direction
DPDK is a set of libraries and drivers for fast packet processing. It was designed to run on any processors. DPDK is an Open Source BSD licensed project.
Developers may be able to eliminate special-purpose hardware such as network processors (NPUs), co-processors, application specific integrated circuits (ASICs), and field-programmable gate arrays (FPGAs).
You decided to write a program which would manipulate packets coming from the NIC. Now what design choices would you have?
1.) Choice 1: You can develop an user space application which can send/receive packets via an Ethernet device. But there will be observed performance penalty due to :
a) context switching and data copy associated with system calls (User Space to Kernel Space memory conversion).
b) the processing done on the packets by the kernel. Remember OSI layer? The packet would have to go through all the network layers as specified by the Kernel before reaching the NIC.
2.) Choice 2: You can develop your application as part of the kernel for higher performance. The fastest way for any software is to write your own Kernel :). However, this comes with the maintainability issues associated with kernel development. A bug in the software can bring down the system and your hardware!
DPDK mainly provides the solutions for the performance issues associated with the first design choice.
These libraries can be used to:
receive and send packets within the minimum number of CPU cycles (usually less than 80 cycles)
develop fast packet capture algorithms (tcpdump-like)
run third-party fast path stack
Below diagram compares the flow with/without DPDK library
Below diagram shows the architecture of DPDK. Note that here Linux system call is replaced by DPDK libraries.
As you can see, everything and every method DPDK has employed is just used to save the time spent in packet processing, the core aspect of any fastpath Technology.
With the advent of Big Data, every Business Industry where big data is extensively used and researched upon (Entire analytic Industry, Google, Microsoft, Product Managers, list is endless) would need servers that support, facilitate and process the Big Data even faster! In that regard, DPDK provides an open source picture which can be used by companies to develop their own Data Processing Applications (eg: 6Wind, WindRiver etc.). Now with IoT (Internet of Things) also starting to leave it's mark, the Big Data explosion is imminent. And for that, DPDK serves as a great tool in developing your own applications for it.
http://www.intel.com/content/www/us/en/embedded/technology/packet-processing/dpdk/dpdk-getting-started-guide.html has starter guide for developer.
http://dpdk.org/
http://www.telecomtv.com/articles/intel/ericsson-makes-efficient-use-out-of-dpdk-11806/
http://www.intel.com/content/www/us/en/intelligent-systems/intel-technology/packet-processing-is-enhanced-with-software-from-intel-dpdk.html
https://www.linkedin.com/pulse/dpdk-layman-aayush-shrut