https://zhuanlan.zhihu.com/p/451341132

dperf是一款高性能的开源网络压力测试仪,是Linux基金会旗下的DPDK官方生态项目。本文介绍如利用dperf在两台物理服务器之间互打http流量进行基本性能测试:每秒新建连接数、并发连接数、带宽、PPS。本次测试示例客户端与服务器均使用1个核、1个网口。客户端、服务器上已经安装了dperf。

环境说明

项目 配置
物理服务器(客户端) 大页内存>=40G
数据网卡>=10GbpsIP=6.6.245.3-6.6.245.102地址:6.6.245.3-6.6.245.102,100个IP网关:6.6.245.1
物理服务器(服务器) 大页内存>=40G
数据网卡>=10GbpsIP=6.6.247.1地址:6.6.247.3网关:6.6.247.1
三层交换机 客户端网关地址:6.6.245.1
服务器网关地址:6.6.247.1
dperf版本 V1.0.0

网络拓扑图

准备工作

dperf安装

请在客户端与服务器上分别安装dperf。安装方请参考这篇文章:ArtNowBen:【dperf系列-4】dperf快速上手

熟悉配置

配置手册详细说明了dperf的所有配置项含义;建议在往下阅读前,先读一遍此文档。

https://github.com/baidu/dperf/blob/main/docs/configuration-CN.md

新建连接数测试

测试方法

在新建连接数测试中,我们使用短连接,每个连接只一个HTTP请求与响应,报文序列如下:

客户端发送SYN
服务器发送SYN+ACK
客户端发送请求(最小HTTP请求)
客户端发送请求(最小HTTP响应)
服务器发送响应+FIN
客户端发送FIN + ACK
服务器发送ACK

新建连接数测试会消耗较多的连接数(五元组),在新建连接数测试中,建议dperf连接总数是新建连接数目标的10倍以上;因为tcp超时为2秒,4次超时则认为连接失败。

dperf中连接总数 = 客户端IP数 * 65535 * 服务器IP数 * 监听端口数

为了达到较高的性能,我们配置客户端较多的IP,本例中客户端使用了100个IP;服务器监听端口数为5。

服务器配置

#daemon
mode server
tx_burst 128
cpu 48 duration 3m
payload_size 1 #numa2
port 0000:87:00.0 6.6.247.3 6.6.247.1 b4:a9:fc:ab:7a:85 # addr_start num
client 6.6.245.3 100 # addr_start num
server 6.6.247.3 1 # port_start num
listen 80 5

配置文件:server-cps-port1-1.conf

  1. 监听IP是6.6.247.3,监听端口范围为:80-84
  2. 只接受客户端地址范围是:6.6.245.3-6.6.245.102;tcp报文的源地址不在这个范围就丢包或RST,ping不受影响
  3. 服务器只绑定一个网口,设置与交换机的互连IP为6.6.247.3(复用了监听IP),网关为6.6.247.1(交换机IP)
  4. 新建连接数测试不能开启keepalive
  5. 设置HTTP响应长度为最小:payload_size 1

客户端配置

mode            client
tx_burst 128
launch_num 10
cpu 0 payload_size 1
duration 2m
cps 2.1m #port pci addr gateway [mac]
port 0000:01:00.0 6.6.245.3 6.6.245.1 b4:a9:fc:ab:7a:85 # addr_start num
client 6.6.245.3 100 # addr_start num
server 6.6.247.3 1
# port_start num
listen 80 5

配置文件:client-cps-port1-1.conf

  1. 给出服务器的监听地址,客户端向这个地址发起连接。 IP:6.6.247.3 监听端口范围为:80-84
  2. 客户端使用地址池的地址作为源地址:6.6.245.3-6.6.245.102
  3. 客户端只绑定一个网口,设置与交换机的互连IP为6.6.245.3(复用了地址池内的IP),网关为6.6.245.1(交换机IP)
  4. 设置HTTP响应长度为最小:payload_size 1
  5. 设置CPS目标为2m,请根据CPU能力灵活调整cps值,建议先设置较小的值,如"10k"

运行dperf

#运行服务器
dperf -c server-cps-port1-1.conf #运行客户端
dperf -c client-cps-port1-1.conf

并发连接数测试

测试方法

在并发连接数测试中,我们要使用长连接,每个连接持续发送HTTP请求、响应。在测试过程中,并发连接数持续增加,直到达到测试目标;我们可以通过客户端的每秒新建连接数来控制爬坡斜率;在测试并发连接数时,建议为客户端配置较大请求发送的间隔,如60秒;payload_size设置为最小。

服务器配置

#daemon
mode server
tx_burst 128
cpu 48 duration 10m
payload_size 1
keepalive 1 #numa2
port 0000:87:00.0 6.6.247.3 6.6.247.1 b4:a9:fc:ab:7a:85 # addr_start num
client 6.6.245.3 100 # addr_start num
server 6.6.247.3 1 # port_start num
listen 80 32

配置文件:server-cc-port1-1.conf

客户端配置

mode                        client
tx_burst 128
launch_num 10
cpu 0 payload_size 1
duration 10m cps 0.5m
cc 100m
keepalive 60s #port pci addr gateway [mac]
port 0000:01:00.0 6.6.245.3 6.6.245.1 b4:a9:fc:ab:7a:85 # addr_start num
client 6.6.245.3 100 # addr_start num
server 6.6.247.3 1
# port_start num
listen 80 32

配置文件:client-cc-port1-1.conf

带宽测试

测试方法

带宽的测试,是在并发连接数的基础上基础上进行的:

  1. 增大报文长度,payload_size设置为1400
  2. 降低并发连接数,如cc设置为3000
  3. 提升请求发送速度,如从60秒发送1次,提升为1毫秒发送一次
  4. 降低cps,由于并发度连接数较低,应该把新建速度同时调低

服务器配置

#daemon
mode server
tx_burst 128
cpu 48 duration 3m
payload_size 1400
keepalive 1 #numa2
port 0000:87:00.0 6.6.247.3 6.6.247.1 b4:a9:fc:ab:7a:85 # addr_start num
client 6.6.245.3 100 # addr_start num
server 6.6.247.3 1 # port_start num
listen 80 5

配置文件:server-tps-port1-1.conf

服务器配置

mode                        client
tx_burst 128
launch_num 10
cpu 0 payload_size 1400
duration 2m
cps 400
cc 3000
keepalive 1ms #port pci addr gateway [mac]
port 0000:01:00.0 6.6.245.3 6.6.245.1 b4:a9:fc:ab:7a:85 # addr_start num
client 6.6.245.3 100 # addr_start num
server 6.6.247.3 1
# port_start num
listen 80 5

配置文件:client-tps-port1-1.conf

PPS测试

PPS(packets perf second)是网络设备的一个重要指标,测试PPS只需要在并发连接数的基础上做少量调整,与带宽测试类似。

  1. 降低报文长度,payload_size设置为1
  2. 设置合适的并发连接数
  3. 提升请求发送速度,如从60秒发送1次,提升为1毫秒发送一次
  4. 降低cps,由于并发度连接数较低,应该把新建速度同时调低

总结

本文使用dper客户端打dperf服务器,介绍了新建、并发、带宽、PPS的测试方法。对于要测试DUT的场景,测试方法相同,修改dperf发送、接收地址即可。复杂的使用场景请关注后续文章。

如果喜欢,请去github上为dperf加个star,支持一下,非常感谢!

[转帖]【dperf系列-5】使用dperf进行性能测试(初级)的更多相关文章

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级) 企业库提供了一个很强大的验证应用程序模 ...

  2. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级) 企业库加密应用程序模块提供了2种方 ...

  3. 黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级) 本篇文章具体官方解释请参照以下链接: h ...

  4. [转帖]HTTPS系列干货(一):HTTPS 原理详解

    HTTPS系列干货(一):HTTPS 原理详解 https://tech.upyun.com/article/192/HTTPS%E7%B3%BB%E5%88%97%E5%B9%B2%E8%B4%A7 ...

  5. [转帖]Linux系列之SAR命令使用详解

    Linux系列之SAR命令使用详解 sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工 ...

  6. 2015年11月26日 Java基础系列(三)ThreadLocal类初级学习

    序,ThreadLocal类是为了解决多线程的安全问题.线程安全的意思也就是说每个线程操作自己的变量,不要对其他线程的值造成影响. 在很多情况下,ThreadLocal比直接使用synchronize ...

  7. 《Unity系列》Json文件格式的解析——初级教程

    Json作为轻量级的数据交换格式,被广泛应用于网络数据传输中.相关的解析工具层出不穷,一般掌握一个工具的应用其他的相应工具就能立马学会. 这里以C#中的LitJson为例给大家示范一下解析工具的用法. ...

  8. [转帖]APP逆向神器之Frida【Android初级篇】

    APP逆向神器之Frida[Android初级篇] https://juejin.im/post/5d25a543e51d455d6d5358ab 说到逆向APP,很多人首先想到的都是反编译,但是单看 ...

  9. 【转帖】sysbench的安装和做性能测试

    iMySQL | 老叶茶馆 sysbench的安装和做性能测试 http://imysql.cn/node/312 我仿照这个学的 但是 需要用更新的版本才可以.   By yejr on 14 六月 ...

  10. Enterprise Library 5.0 系列教程

    1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise L ...

随机推荐

  1. GaussDB(DWS)迁移:一种执行高效的TereData的marco迁移方案

    摘要:提供一种执行高效的TereData的marco迁移方案. 本文分享自华为云社区<GaussDB(DWS)迁移 - teredata兼容 -- macro兼容 # [玩转PB级数仓Gauss ...

  2. 如何通过jstat命令进行查看堆内存使用情况?

    摘要:jstat命令可以查看堆内存各部分的使用量,以及加载类的数量. 本文分享自华为云社区<JVM之通过jstat命令进行查看堆内存使用情况>,作者:共饮一杯无 . 基本概念 jstat是 ...

  3. 在springboot中,如何读取配置文件中的属性

    摘要:在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在springboot的项目中,我们应 ...

  4. 专注提升用户体验,Superset 1.3发布!

    近期Superset发布了新的版本1.3.0,此版本专注于提升用户体验.并进行了大量的改进与错误修复. 用户体验 此版本的一个主要目标是改进仪表盘原生过滤器.这些过滤器的级别为仪表盘级别,而不是图表级 ...

  5. iOS代码安全加固利器:深入探讨字符串和代码混淆器的作用

    ​ 在网上搜"代码混淆"关键词,可以看到n多教程.包括本篇博客,大部分重要内容也是从网上各位大神的博客里面看到然后摘取和总结出来的.虽然网上都有,但是对于我个人来说,很难找到一篇博 ...

  6. 当OLAP碰撞Serverless,看ByteHouse如何建设下一代云计算架构

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 作为云计算的下一个迭代,Serverless 可以使开发者更专注于构建产品中的应用,而无需考虑底层堆栈问题.伴随着 ...

  7. Java 获取当前天是一年中的第几天

    Java 获取当前天是一年中的第几天 @Test void dayofweed() throws Exception { System.out.println("2023-01-01 第 & ...

  8. 方法记录 | 文件批量导入Goodnotes

    一般来说通常资料都是用网盘下载了很多文件,想用Goodnotes来写批注,记笔记等,但是由于网盘不能直接分享.也不能批量分享到Goodnotes,给学习带来了很大的麻烦. 当然有钱的大佬们呢直接开了 ...

  9. Python | 解放双手,用Python实现自动发送邮件

    解放双手,用Python实现自动发送邮件 使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间. Python有两个内置库:smtplib和email,能够实现邮件功能, ...

  10. 无需修改代码,用 fcapp.run 运行你的 REST 应用

    作者 | 阿里云 Serverless 技术研发 落语 背景 阿里云函数计算产品在较早的时候支持了HTTP触发器能力,支持用户使用 HTTP 协议进行函数调用.函数计算后端通过一个共享的 APISer ...