当前位置: 首页 > 工具软件 > dperf > 使用案例 >

dperf 支持 HTTP 协议,可以测试 nginx 的性能

姜鸿畴
2023-12-01

1.背景

dperf 原本设计用于四层负载均衡测试,TCP协议栈、HTTP协议栈设计相当简略,不适合对Nginx进行测试。由于以下原因,决定给dperf支持完整的HTTP协议:

  1. 封在家里50多天,要找点有趣的事情,充实丰富生活

  2. dperf 做一个受众更广的特性,让它能帮助更多的人

  3. 很多年一直想解决七层性能测试问题

2.需求与假设

  1. 作为HTTP客户端运行,能够解析HTTP响应

  2. 不支持作为HTTP服务器运行(未来支持)

  3. 不支持HTTPS

  4. 用来测试nginx的性能,不是测试功能

  5. 在内网运行,带宽很高、极少发生丢包

  6. 只支持HTTP GET,不支持POST

  7. HTTP响应的header不会跨报文

3.设计

  1. 无拥塞控制

    1. 限制PATH长度,把HTTP请求限制在一个报文内,这样发送数据就不会超过接收窗口,所以发送方向不需要考虑拥塞控制

    2. 接收方向收到数据后,解析完就丢弃,基本可以做到线速,可以把接收窗口设置为极大,不要收缩接收窗口

  2. HTTP解析

    1. 要求报文符合HTTP协议格式

    2. 只需要关注报文长度、长/短连接相关的头部,要求这些头部不能跨报文:Connection,Content-Length, Transfer-Encoding

    3. 整个解析过程不缓存报文,只需要记录状态

  3. 不使用DPDK GRO的原因

    1. DPDK GRO不支持IPV6

    2. VXLAN支持可能有较大挑战(猜测)

    3. dperf协议栈非常快,在协议栈上的开销非常小,GRO对性能的贡献有限(猜测)

    4. 我希望四层、七层处理逻辑统一,不使用GRO逻辑更简单

  4. 丢包与乱序

    1. 假设极少丢包,如果丢报文,说明以及测到了极限,应该降低压力

    2. 假设没有乱序,如果乱序,简单起见(不想缓存报文),就认为丢包了,也许以后可以改进一下

    3. 不支持SACK,不想缓存报文

  5. 其他TCP特性

    1. 不支持Timestamp

    2. 支持Delay ACK,大概0.1ms刷一次delay的ACK

4.使用方法

只涉及三个配置项,详见 配置文档

protocol http
http_path /xxxx
http_host www.dperf.com

例子,客户端是dperf,服务器是nginx。

mode client
cpu 0
protocol http
duration 1d
keepalive 1ms
http_path /16k
cps 1
cc 10
port 0000:00:04.0 172.16.192.111 172.16.199.174
client 172.16.192.111 1
server 172.16.199.174 1 listen 80 1

5.总结与展望

dperf 可以作为性能测试工具,测试nginx等HTTP服务器的性能。当前仍然在测试阶段,希望大家积极试用、反馈。接下来dperf会作为一个测试用的高性能的HTTP服务器。

希望 dperf 对你有帮助,如果喜欢,请去github上加个star吧,谢谢!

 类似资料: