Boost Your Network Testing: How dperf Achieves 10 M HTTP Connections per Second
dperf, Baidu’s open‑source DPDK‑based tool, delivers ultra‑high‑performance network testing by generating up to ten million HTTP connections per second, hundreds of gigabits of throughput, and detailed per‑second statistics, with step‑by‑step guidance on environment setup, compilation, and execution.
Overview
dperf is an open‑source network performance and load‑testing tool from Baidu, built on DPDK. It can generate tens of millions of HTTP connections per second and achieve hundreds of gigabits per second of throughput.
Key Advantages
High Performance
Based on DPDK, a single x86 server can produce massive traffic: millions of new HTTP connections per second, hundreds of Gbps bandwidth, billions of concurrent connections.
Detailed Statistics
Provides fine‑grained metrics and identifies every packet loss.
Rich Use Cases
Layer‑4 load‑balancer stress testing.
Cloud VM network performance testing.
NIC and CPU network packet‑processing benchmarking.
Standalone high‑performance HTTP server/client.
Performance Benchmarks
HTTP Connections per Second (CPS)
Client Cores Server Cores HTTP CPS
1 1 2,101,044
2 2 4,000,423
4 4 7,010,743
6 6 10,027,172HTTP Throughput
Client Cores Server Cores RX(Gbps) TX(Gbps) Client CPU(%) Server CPU(% )
1 1 18 18 60 59
2 2 35 35 60 59
4 4 46 46 43 43Concurrent Connections
Client Cores Server Cores Current Connections Client CPU(%) Server CPU(% )
1 1 100,000,000 34 39
2 2 200,000,000 36 39
4 4 400,000,000 40 41UDP TX Packets per Second (PPS)
Client Cores TX MPPS Client CPU(%)
1 15.96 95
2 29.95 95
4 34.92 67
6 35.92 54
8 37.12 22Test Environment
Memory: 512 GB (hugepages 100 GB)
NIC: Mellanox MT27710 25 Gbps × 2
Kernel: 4.19.90
Statistics Collected per Second
TPS, CPS, various PPS dimensions
TCP/Socket/HTTP error counts
Packet loss
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 reboot
linux16 /vmlinuz-... nopku transparent_hugepage=never default_hugepagesz=1G hugepagesz=1G hugepages=8Compile 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.confRun Client
ping 6.6.241.27
curl http://6.6.241.27/Execute Test
# On another machine as client
./build/dperf -c test/http/client-cps.confSource code: https://github.com/baidu/dperf
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.
