Lossless traffic processing using DPDK
Over the past few years, performance of Linux-based operating system has been especially topical. This is easy to explain. The amount of data processed by the system is constantly increasing. Every year, every month, every day, every hour. Previously, 1 Gb/s for applications was considered normal. To process this amount of traffic, a standard set of applications from the Linux kernel stack was quite enough. However, the speed rates increased to 10 Gb/s, which negatively affected the traffic processing systems, because the capacity of standard utilities was not enough. Increased amount of traffic has led to an increase in the number of CPU cycles and the number of access calls to the main memory, which have a limited number of iterations. Despite the fact that we have many 10GE terminal devices at our disposal (10GBASE-LR, 10GBASE-LRM, 10GBASE-ER, 10GBASE-ZR, 10GBASE-LX4, 10GBASE-PR) that enable receiving and transmitting the traffic over long distances at high speed, this does not in any way increase the speed of traffic processing inside the system. Most of the bottlenecks are in the Linux kernel. In order to avoid a bottleneck, it needs to be bypassed. Which means to bypass the Linux kernel. We use DPDK to bypass the kernel in our solutions: DPDK - Data Plane Development Kit.
DPDK allows a user application to interact with a network device directly without using the kernel. This network structure created specifically for the cards powered by Intel chips is a set of libraries (queue management library, memory management library, packet buffer management library), and dedicated drivers that in combination provide quick data processing.
Take a look at the illustration. On the left, you can see that before a package gets into the application, it must go through the Linux kernel stack first. And this is not bad. But it will require an extra cycle in the CPU and extra access to the main memory to do so. The system on the right allows the package to go directly from the network device to the application. This takes less time and does not engage additional resources. Therefore, DPDK technologies enable to build the fastest and most efficient traffic processing systems, the lossless ones.
Stress test is an important, must-have, and indispensable process in the traffic processing systems development. Some developers believe that when engineering complex server traffic processing solutions, the hardware will withstand any amount of traffic. But what if the hardware can't handle the required amount of traffic? How long will the system run smoothly? Where is the traffic speed limit for a specific server that when crossed leads to malfunctions? Stress test has the answers to all these questions. Server is subjected to stress testing before putting the server into operation. It enables to identify the system bottlenecks early, and avoid adverse consequences in the future, such as unexpected equipment failures or traffic loss.
For stress testing during the course of the traffic processing system design & engineering, a traffic generator is used. Traffic packet generator is a very handy tool that any network engineer needs to work with. This generator enables to create traffic with the required speed rates and loads, traffic with the required properties, and direct it to the one or more selected interfaces. Then, all you need to do is to monitor the traffic processing system performance, how it will react to changes in the parameters set during traffic generation.
Generator is a flexible tool that can be customized to your particular equipment configuration.
In our projects, we use tcpreplay utility from the DPDK package, and another generator written by our own team of developers.
Therefore, stress test helps to challenge the selected hardware configuration and evaluate its behavior when the load increases.