在对高性能转发设备测试时,一款好用的高性能压测工具必不可少,考虑被测设备一般也基于dpdk实现,而压测工具的性能理论上是需要能榨干被测设备的,传统的一些压测工具,iperf/wrk/ab等出于性能方面就被pass了。dpdk-pktgen在性能方面基本能满足述求,但是灵活性极差,不改源码的情况下,甚至连tcp flag都无法设置。
介绍trex前,可以先介绍一款python的数据包操纵程序scapy,scapy中允许按layers来逐级构包,比如基于如下代码,可构造出一个vxlan的ipv6 syn包。
pkt = Ether()/IP()/UDP(dport=4789)/VXLAN()/IPV6()/TCP(flags="S")
事实上scapy可以发出任意想发的包(不符合协议也允许),通过自定义layers,可以很方便的插一些自定义协议进去,比如自定义的tcp options,自定义的proxy protocol、nsh之类的。
而trex 通过python sdk中的STLPktBuilder,是可以支持scapy构包的。
Trex 数据面基于DPDK实现,通过json-rpc的方式对外暴露控制接口,client端支持CLI/PYT