dperf 是一款面向四层网关(如四层负载平衡,L4LB)的高性能的压测工具。近日已由百度开源,依照 apache license v2 公布。
通常,对四层负载平衡的测试都要用商用测试仪。如思博伦、IXIA 等,价格差不多是 1 HTTP CPS = 1RMB。对于网络设备厂商来说,商用测试仪是标配;然而对于很多科研单位的研究者来说,买一个思博伦是不太事实的;据我理解,很多互联网厂家也不太喜爱买商用测试仪,苦了一堆做网关的开发者。
我也是被逼得没方法,就写了一个测试仪,毕竟这是一个掉头发的事件,当初悔恨也来不及了,不说也罢。
dperf 基于 dpdk 实现的,外面有一个高度优化、高度定制的 TCP 协定栈(前面再写文章介绍),实际上是一个超级简略的 TCP 协定栈,简单的协定栈咱也写不进去;不过外面的优化是做的能够的,也有专利技术(还没批下来),前面细说。
dperf 新建性能确实很强。用两个核,一个核运行 dperf 客户端,一个核运行 dperf 服务器,在 X86(Intel(R) Xeon(R) Silver 4214) 上可能测出 230 万 HTTP CPS 新建,在鲲鹏 902 上能够测出 210 万。如果用 ab 去测试 nginx,CPS 只有 2.5 万,性能相差 1 百倍。
dperf 并发也很强。因为 dperf 一个连贯只耗费了 64 个字节,nginx 可能要耗费 64K,四层负载平衡可能要耗费几百个字节。对于 dperf 来说,几十个亿的并发几乎就是小菜一碟。
dperf 的带宽受制于网卡。带宽这个事就不是个事,上个好的网卡就能够了。
下面的这些性能,都不是我最喜爱的,因为性能太强了,很多时候用不上,花了很多工夫去优化,白白掉了很多头发不说,也就义了很多陪娃的工夫。
dperf 有一项我最喜的性能:重传统计(丢包统计)。对传统 tcp 协定栈来说,丢个包是失常的,丢了就丢了,重传一个呗。这怎么能够呢,我预计第一个不批准的是做交换机的敌人,第二个不批准的是做四层负载平衡的敌人,哪里都能够丢包,我这里就是不能,丢包的锅我不能背。dperf 也认为重传是不对的,它把重传做了计数,同门通过重传计数,就可能实时观测到,链路上是否丢包了,如果丢包了,再去看交换机,被测设施等,如果测试下来,没有丢一个包,那就妥妥的了。
用 Linux 协定栈上工具(ab, wrk)做性能测试敌人就没方法测出丢包数,糊里糊涂就过来了;如果你切实是看不惯,就是要和丢包过不过来,就试用一下 dperf 做测试吧。
如果你曾经开始应用了 dperf,请通知我,在应用 dperf 的过程中有什么问题,请在 dperf 的 issue 上提问题,也能够给我发邮件,谢谢。
我的项目以后是 110 个 star。圣诞节许个愿,我心愿 dperf 在 2022 年可能达到 1000 个 star。
祝大家圣诞快乐。