千万级 CPS 的开源网络压测软件 dperf
内容转发自 BFE 开源项目
今天向大家介绍一款开源的高性能网络压测软件 dperf,可用于测试四层负载均衡等网关设备。
dperf 由百度的智能负载均衡团队研发,使用 Apache License Version 2.0 许可证开源发布,项目地址 https://github.com/baidu/dperf 。
dperf 一经开源,立即在圈内引发了关注,因为它能用来进行高达千万 CPS (Connections Per Second, 每秒新建连接数) 级别的压力测试,在部分场景下可代替售价数百万元的商用性能测试仪,为用户节省昂贵的测试仪购买成本;而且由于采用软件的方式,也极大提高了性能测试的便利性。
1. 缘起
四层负载均衡器(如 LVS,DPVS)等网络程序或设备,本身往往具有极高的性能。无论是厂商研发网络设备,还是用户使用网络设备,若想要对其进行性能测试,则需要有相应的设备或程序,来提供足够的网络压力。
在 dperf 出现之前,可以用两种方式来进行压力测试:使用商用的网络压力测试仪,或使用大量客户端部署开源测试软件。
(1) 商用硬件测试仪:目前主要被少数几家国外厂商垄断,价格昂贵,其售价往往高达每台数百万元,且性能一般仅为百万 CPS 的级别。若要达到千万级别 CPS 的测试,则需要多台测试仪同时工作,成本可能达到上千万元,即使租用,每天的成本也很高。
(2) 开源软件:使用开源软件(如 nginx + ab 或 wrk)进行测试,适合一些较小压力的场景。在测试高性能的网络设备时,开源软件的方案往往会有明显的不足:
单台性能低、资源消耗大:两台物理服务器配合,可以压测约 50 至 100 万 CPS;要达到千万级 CPS,则需要几十台物理服务器;
连接失败高:压力较大时,Linux 或 FreeBSD 的网络协议栈可能因为资源不足导致出现连接失败,这些连接失败会干扰测试数据,影响测试结果;
无法发现丢包:整个测试过程中,不能发现被测设备的丢包等报文级错误。
正是由于当前压测工具的这些不足,百度的智能负载均衡团队在对其高性能的四层负载均衡产品进行压测时,急需一款高性能、低成本、简单易用的网络压力测试仪。这也是促成我们研发 dperf 的主要原因。
2. 优势
dperf 主要具有如下优势:
(1) 高性能:dperf 基于 DPDK,使用普通 x86 服务器,即可实现千万级 CPS。详细的性能指标如下:
HTTP 新建(CPS):单核超过 2 百万,性能随使用的核数基本呈线性扩展;
HTTP 并发:单核支持 1 亿 TCP 并发连接数,性能随使用的核数基本呈线性扩展;
HTTP 吞吐:单核可以达到 RX/TX 各 18Gbps 的吞吐,性能随使用的核数基本呈线性扩展(注:带宽受制于网卡规格)。
(2) 使用场景丰富:支持在如下场景使用
对四层负载均衡等四层网关进行性能测试、长稳测试
对云上虚拟机的网络性能进行测试
对网卡性能、CPU 的网络报文处理能力进行测试
压测场景下,可作为高性能的 HTTP Server 或 HTTP Client 单独使用
(3) 可以发现被测设备的丢包等报文级错误
3. 功能
dperf 可用于进行 HTTP 新建连接数测试、HTTP 并发连接数测试、HTTP 吞吐测试、TCP/UDP 的包转发性能(PPS)测试。
dperf 还提供数据统计功能,支持实时数据查看,包括:
每秒收包数,每秒发包数,每秒接收比特,每秒发送比特
2-3 层协议的收发报文数:ARP、ICMP
TCP 各种状态的收发报文数:SYN、FIN、PUSH、RST
HTTP 请求、响应数统计:GET、2XX
失败数:连接失败数、网卡丢包数等
TCP 报文重传数:SYN、FIN、ACK、PUSH 重传
统计数据每秒刷新,示例如下:
4. 设计原理
想知道 dperf 为什么可以实现如此高的性能?请阅读 dperf 设计原理的文档:
https://github.com/baidu/dperf/blob/main/docs/design-CN.md
5. 限制
dperf 的 HTTP 消息长度不超过一个网络报文,适合测试基于报文转发的网络设备,不适合用于七层负载均衡器的测试;
dperf 在运行期间需要独占网卡,不支持网口 Bonding;
6. 使用
dperf 的安装和使用方式见文档:
https://github.com/baidu/dperf 中的/docs
https://gitee.com/baidu/dperf 中的/docs
7. 例子:使用 dperf 测试 LVS 性能
与商业测试仪相比,dperf 的 TCP 协议栈针对 LVS 等四层负载均衡器的压测场景进行了优化,以获得更高的发送测试流量的能力。本节我们展示如何用 dperf 对 LVS 进行性能测试。
(1) 测试环境
配置:
网络拓扑:
(2) 测试结果
通过测试结果我们发现,LVS 作为一款开源免费的四层负载均衡软件,性能也是非常不错的。具体结果如下:
新建测试结果(客户端):
并发测试结果(客户端)
带宽测试结果(客户端)
评论