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。
祝大家圣诞快乐。