Unlock 10M+ HTTP Connections per Second: dperf’s DPDK‑Powered Performance
dperf, an open‑source Baidu tool built on DPDK, delivers ultra‑high network performance—supporting millions of HTTP connections per second, hundreds of Gbps throughput, and detailed statistics—making it ideal for load‑balancer, cloud VM, NIC, and CPU network testing, with step‑by‑step deployment instructions.
dperf is Baidu's open‑source network performance and load testing tool built on DPDK, capable of generating tens of millions of HTTP connections per second, billions of concurrent requests, and hundreds of Gbps throughput.
Advantages
Powerful performance: Using a single x86 server, it can create tens of millions of HTTP connections per second and achieve hundreds of Gbps bandwidth.
Detailed statistics: Provides granular metrics and per‑packet loss detection.
Rich use cases: Suitable for L4 load‑balancer testing, cloud VM network testing, NIC and CPU packet‑processing benchmarks, and can act as a high‑performance HTTP server or client.
Performance Benchmarks
HTTP connections per second (CPS): 1 core client/server – 2.1 M CPS; 2 cores – 4 M CPS; 4 cores – 7 M CPS; 6 cores – 10 M CPS.
HTTP throughput: 1 core – 18 Gbps (RX/TX); 2 cores – 35 Gbps; 4 cores – 46 Gbps with ~43 % CPU usage.
Concurrent connections: 1 core – 100 M; 2 cores – 200 M; 4 cores – 400 M connections.
UDP TX packets per second (PPS): Scales from 15.96 MPPS on 1 core to 37.12 MPPS on 8 cores.
Test Environment
Memory: 512 GB (hugepages 100 GB)
NIC: Mellanox MT27710 25 Gbps × 2
Kernel: 4.19.90
Statistics Output
dperf outputs various metrics each second, including TPS, CPS, PPS, error counts at TCP/Socket/HTTP levels, packet loss, and retransmissions classified by TCP flags.
seconds 22 cpuUsage 52
pktRx 3,001,058 pktTx 3,001,025 bitsRx 2,272,799,040 bitsTx 1,920,657,600 dropTx 0
arpRx 0 arpTx 0 icmpRx 0 icmpTx 0 otherRx 0 badRx 0
synRx 1,000,345 synTx 1,000,330 finRx 1,000,350 finTx 1,000,350 rstRx 0 rstTx 0
synRt 0 finRt 0 ackRt 0 pushRt 0 tcpDrop 0
skOpen 1,000,330 skClose 1,000,363 skCon 230 skErr 0
httpGet 1,000,345 http2XX 1,000,350 httpErr 0
ierrors 0 oerrors 0 imissed 0Getting Started
Configure Hugepages
# Edit '/boot/grub2/grub.cfg' and add:
linux16 /vmlinuz-... nopku transparent_hugepage=never default_hugepagesz=1G hugepagesz=1G hugepages=8
# Then rebootCompile DPDK
# Enable required PMDs in 'config/common_base'
TARGET=x86_64-native-linuxapp-gcc # or arm64-armv8a-linuxapp-gcc
cd /root/dpdk/dpdk-stable-19.11.10
make install T=$TARGET -j16Compile dperf
cd dperf
make -j8 RTE_SDK=/root/dpdk/dpdk-stable-19.11.10 RTE_TARGET=$TARGETBind NIC
# Skip for Mellanox NICs
modprobe uio
modprobe uio_pci_generic
/root/dpdk/dpdk-stable-19.11.10/usertools/dpdk-devbind.py -b uio_pci_generic 0000:1b:00.0Start dperf server
./build/dperf -c test/http/server-cps.conf # listens on 6.6.241.27:80Run client requests
ping 6.6.241.27
curl http://6.6.241.27/Execute a test
Run the server configuration and then on another machine start the client:
# Server
./build/dperf -c test/http/server-cps.conf
# Client
./build/dperf -c test/http/client-cps.confSource code: https://github.com/baidu/dper
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Java High-Performance Architecture
Sharing Java development articles and resources, including SSM architecture and the Spring ecosystem (Spring Boot, Spring Cloud, MyBatis, Dubbo, Docker), Zookeeper, Redis, architecture design, microservices, message queues, Git, etc.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
