⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 github.com/baidu/dperf 「baidu」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

dperf 是一款基于 DPDK 的 100Gbps 网络性能和负载测试软件,能够每秒建立千万级的 HTTP 连接、亿级别的并发请求和数百 Gbps 的吞吐量。

优点

性能强大:

  • 基于 DPDK,使用一台普通 x86 服务器就可以产生巨大的流量:千万级的 HTTP 每秒新建连接数,数百 Gbps 的带宽,几十亿的并发连接数

统计信息详细:

  • 能够输出详细的统计信息,并且识别每一个丢包

使用场景丰富:

  • 可用于对四层负载均衡等四层网关进行性能压力测试、长稳测试
  • 可用于对云上虚拟机的网络性能进行测试
  • 可用于对网卡性能、CPU 的网络报文处理能力进行测试
  • 压测场景下,可作为高性能的 HTTP Server 或 HTTP Client 单独使用

性能

HTTP 每秒新建连接数

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 吞吐

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 并发连接数

Client Cores Server Cores Current Connections Client CPU Usage(%) Server CPU Usage(%)
1 1 100,000,000 34 39
2 2 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

测试环境配置

dperf 的以上性能数据,基于下面的配置测试得到:

  • 内存: 512GB(大页 100GB)
  • 网卡: Mellanox MT27710 25Gbps * 2
  • 内核: 4.19.90

统计数据

dperf 每秒输出多种统计数据:

  • TPS, CPS, 各种维度的 PPS
  • TCP/Socket/HTTP 级别的错误数
  • 丢包数
  • 按照 TCP Flag 分类的报文重传数

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

开始使用

设置大页

#参考如下参数编辑 '/boot/grub2/grub.cfg',然后重启OS  
linux16 /vmlinuz-... nopku transparent_hugepage=never default_hugepagesz=1G hugepagesz=1G hugepages=8

编译 DPDK

#编辑'config/common_base'打开PMD开关  
#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

编译 dperf

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

绑定网卡

#Mellanox网卡跳过此步  
#假设PCI号是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

启动 dperf server

#dperf server监听6.6.241.27:80, 网关是6.6.241.1  
./build/dperf -c test/http/server-cps.conf

从客户端发送请求

#客户端IP必须要在配置文件的'client'范围内  
ping 6.6.241.27
curl http://6.6.241.27/

运行测试

下面的例子运行一个 HTTP CPS 压力测试。在 server 端运行 dperf ./build/dperf -c test/http/server-cps.conf

#以另一台机器作为client端,运行dperf  
./build/dperf -c test/http/client-cps.conf

开源地址

  • https://github.com/baidu/dperf
文章目录
  1. 1. 优点
    1. 1.1. 性能强大:
    2. 1.2. 统计信息详细:
    3. 1.3. 使用场景丰富:
  2. 2. 性能
    1. 2.1. HTTP 每秒新建连接数
    2. 2.2. HTTP 吞吐
    3. 2.3. HTTP 并发连接数
    4. 2.4. UDP TX PPS
  3. 3. 测试环境配置
  4. 4. 统计数据
  5. 5. 开始使用
    1. 5.1. 设置大页
    2. 5.2. 编译 DPDK
    3. 5.3. 编译 dperf
    4. 5.4. 绑定网卡
    5. 5.5. 启动 dperf server
    6. 5.6. 从客户端发送请求
    7. 5.7. 运行测试
    8. 5.8. 开源地址