All Projects → baidu → dperf

baidu / dperf

Licence: Apache-2.0 license
dperf is a DPDK based 100Gbps network performance and load testing software.

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to dperf

dpdk
A comprehensive rust binding for DPDK allowing high speed userspace networking across 256 cores and 32 NICs
Stars: ✭ 30 (-97.73%)
Mutual labels:  tcp, dpdk, udp, vlan
masscanned
Let's be scanned. A low-interaction honeypot focused on network scanners and bots. It integrates very well with IVRE to build a self-hosted alternative to GreyNoise.
Stars: ✭ 50 (-96.21%)
Mutual labels:  tcp, ipv6, udp
Dpvs
DPVS is a high performance Layer-4 load balancer based on DPDK.
Stars: ✭ 2,168 (+64.24%)
Mutual labels:  ipv6, dpdk, lvs
ebook
Third edition of the Computer Networking: Principles, Protocols and Practice ebook
Stars: ✭ 64 (-95.15%)
Mutual labels:  tcp, ipv6, udp
captcp
A open source program for TCP analysis of PCAP files
Stars: ✭ 110 (-91.67%)
Mutual labels:  tcp, ipv6, udp
EdgeAdmin
CDN & WAF集群管理系统。
Stars: ✭ 199 (-84.92%)
Mutual labels:  tcp, ipv6, udp
net-protocol
golang模拟内核协议栈 实现链路层、网络层、传输层、应用层 用户态协议栈 ,基于虚拟网卡TUN/TAP
Stars: ✭ 129 (-90.23%)
Mutual labels:  tcp, ipv6, udp
Fi6s
IPv6 network scanner designed to be fast
Stars: ✭ 116 (-91.21%)
Mutual labels:  tcp, ipv6, udp
Yasio
A multi-platform support c++11 library with focus on asio (asynchronous socket I/O) for any client application.
Stars: ✭ 483 (-63.41%)
Mutual labels:  tcp, ipv6, udp
Cnp3
Computer Networking : Principles, Protocols and Practice (first and second edition, third edition is being written on https://github.com/cnp3/ebook)
Stars: ✭ 471 (-64.32%)
Mutual labels:  tcp, ipv6, udp
Packetsender
Network utility for sending / receiving TCP, UDP, SSL
Stars: ✭ 1,349 (+2.2%)
Mutual labels:  tcp, ipv6, udp
Netlink
Socket and Networking Library using msgpack.org[C++11]
Stars: ✭ 197 (-85.08%)
Mutual labels:  tcp, ipv6, udp
Pypacker
📦 The fastest and simplest packet manipulation lib for Python
Stars: ✭ 216 (-83.64%)
Mutual labels:  tcp, udp
Ohsce
PHP HI-REL SOCKET TCP/UDP/ICMP/Serial .高可靠性PHP通信&控制框架SOCKET-TCP/UDP/ICMP/硬件Serial-RS232/RS422/RS485 AND MORE!
Stars: ✭ 206 (-84.39%)
Mutual labels:  tcp, udp
Pss
This is a based plug-in framework that provides cross-platform IO and logically separated plug-in services.
Stars: ✭ 219 (-83.41%)
Mutual labels:  tcp, udp
overload
📡 Overload DoS Tool (Layer 7)
Stars: ✭ 167 (-87.35%)
Mutual labels:  tcp, udp
Frpc Android
Android,安卓版frpc,一个快速反向代理,可帮助您将NAT或防火墙后面的本地服务器暴露给Internet。
Stars: ✭ 205 (-84.47%)
Mutual labels:  tcp, udp
Gnb
GNB is open source de-centralized VPN to achieve layer3 network via p2p with the ultimate capability of NAT Traversal.GNB是一个开源的去中心化的具有极致内网穿透能力的通过P2P进行三层网络交换的VPN。
Stars: ✭ 225 (-82.95%)
Mutual labels:  tcp, udp
AndroidNetMonitor
This project aims to collect and analyze traffic information of Android.(采集手机发送和接收的报文简要信息,并且根据socket记录每个报文对应哪个手机app)
Stars: ✭ 25 (-98.11%)
Mutual labels:  tcp, udp
Ssokit Qmake
A Simple & Strong Tool for TCP&UDP Debug
Stars: ✭ 231 (-82.5%)
Mutual labels:  tcp, udp

dperf Apache V2 License

English | 中文

dperf is a DPDK based 100Gbps network performance and load testing software.

Advantage

  • High performance:
    • Based on DPDK, dperf can generate huge traffic with a single x86 server: tens of millions of HTTP CPS,hundreds of Gbps throughput and billions of concurrent connections.
  • Detailed statistics:
    • Provides detailed statistics and identify every packet loss.
  • Support multiple scenarios:
    • Load testing and stability testing for Layer 4 Load Balancer and other Layer 4 gateways
    • Network performance testing for servers on cloud
    • Performance test of network package processing capability for NIC and CPU
    • Can be used as a high performance HTTP server or client for load testing

Performance

HTTP Connections per Second

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,172

HTTP Throughput per Second

Client Cores Server Cores RX(Gbps) TX(Gbps)) Client CPU Usage(%) Server CPU Usage(%)
1 1 18 18 60 59
2 2 35 35 60 59
4 4 46 46 43 43

HTTP Current Connections

Client Cores Server Cores Current Connections Client CPU Usage(%) Server CPU Usage(%)
1 1 100,000,000 34 39
2 1 200,000,000 36 39
4 4 400,000,000 40 41

UDP TX PPS

Client Cores TX MPPS Client CPU Usage(%)
1 15.96 95
2 29.95 95
4 34.92 67
6 35.92 54
8 37.12 22

Note: this test is under one 25Gbps Mellanox CX4

Client & Server Configuration

Above performance is obtained with below configurations:

  • MEM: 512GB(hugepage 100GB)
  • NIC: Mellanox MT27710 25Gbps * 2
  • Kernel: 4.19.90

Statistics

dperf outputs various statistics every second:

  • TPS, CPS, various PPS
  • Errors of TCP/Socket/HTTP
  • Packets loss/drop
  • Retransmissions of 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  0

Getting Started

Set hugepages

#edit '/boot/grub2/grub.cfg' like this, and reboot the OS
linux16 /vmlinuz-... nopku transparent_hugepage=never default_hugepagesz=1G hugepagesz=1G hugepages=8

Build DPDK

#edit 'config/common_base' to enable PMDs
#Mellanox CX4/CX5 requires 'CONFIG_RTE_LIBRTE_MLX5_PMD=y'
#HNS3 requires 'CONFIG_RTE_LIBRTE_HNS3_PMD=y'
#VMXNET3 requires 'CONFIG_RTE_LIBRTE_VMXNET3_PMD=y'

TARGET=x86_64-native-linuxapp-gcc #or arm64-armv8a-linuxapp-gcc

cd /root/dpdk/dpdk-stable-19.11.10
make install T=$TARGET -j16

Build dperf

cd dperf
make -j8 RTE_SDK=/root/dpdk/dpdk-stable-19.11.10 RTE_TARGET=$TARGET

Bind interface

#Mellanox NIC skip this step!
#Suppose your PCI number is 0000:1b:00.0

modprobe uio
modprobe uio_pci_generic
/root/dpdk/dpdk-stable-19.11.10/usertools/dpdk-devbind.py -b uio_pci_generic 0000:1b:00.0

Start dperf server

#dperf server bind at 6.6.241.27:80,  gateway is 6.6.241.1
./build/dperf -c test/http/server-cps.conf

Send request from a client

#the client IP must be in the range of 'client' in the configuration file
ping 6.6.241.27
curl http://6.6.241.27/

Running the tests

Below example will start a HTTP CPS stress test.
#run dperf server ./build/dperf -c test/http/server-cps.conf

#from another host, run dperf client
./build/dperf -c test/http/client-cps.conf

Documentation

Limitation

  • dperf requires that the HTTP message is in one packet, which is not suitable for the test of layer 7 load balancer;
  • dperf requires exclusive use of the network interfaces.
  • dperf does not have routing capability. It is recommended to build a test environment with a switch.

Related Articles

Contributing

dperf welcomes your contribution. See the CONTRIBUTING file for details. Welcome to the development team, please contact Jianzhang Peng to add you to the developer mailing list.

Authors

  • Jianzhang Peng - Initial work

License

dperf is distributed under the Apache License, Version 2.0.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].