写点什么

T-rex 压测工具使用

  • 2025-06-12
    北京
  • 本文字数:1745 字

    阅读完需:约 6 分钟

本文分享自天翼云开发者社区《T-rex压测工具使用》,作者:f****n


trex 使用

一、软件版本

TRex版本:v3.00
复制代码

二、无状态模式(单设备发包)

1.工作目录

cd /home/root/trex/scripts/
复制代码

2.dpdk 网卡使用

modprobe uioinsmod /home/root/pktgen-3.7.2/igb_uio.ko/home/root/dpdk-devbind.py -b igb_uio 3b:00.1 &&\/home/root/dpdk-devbind.py -b igb_uio af:00.1
复制代码

3.stl 服务启动

//-i 交互模式, --stl 无状态模式 --no-scapy-server 禁用 Scapy 服务器,Scapy 是一个 Python 库,用于网络数据包的创建和解析   -c 16 运行16个lcore./t-rex-64 -i  --stl --no-scapy-server -c 16
复制代码

4.控制台启动

//在新窗口./trex-console -s 127.0.0.1 --force
复制代码

5.控制台执行脚本

trex> start -f stl/split_var_to_cores.py -m 700000// -m 700000 为重复次数,执行这个脚本得话实际看是pps数量,
复制代码

6.脚本介绍

stl/split_var_to_cores.py 作用:测试 other 协议包、udp 协议包等自定义类型包,可以指定 payload 长度

from trex_stl_lib.api import *import argparse  class STLS1(object):     def create_stream (self, direction):        payload_len = 0        #GRE        #base_pkt =  Ether(dst='00:00:aa:aa:aa:aa',src='00:00:bb:bb:bb:bb')/IP()/GRE(key=12345)/IP()/UDP()/('!'*payload_len)        #TCP SYN        base_pkt =  Ether(dst='00:00:aa:aa:aa:aa',src='00:00:bb:bb:bb:bb')/IP()/TCP(flags="S")/('!'*payload_len)        #UDP        #base_pkt =  (Ether(dst='00:00:aa:aa:aa:aa',src='00:00:bb:bb:bb:bb')/IP()/UDP()/('*' * payload_len))        #VLAN       #base_pkt =  (Ether(dst='00:00:aa:aa:aa:aa',src='00:00:bb:bb:bb:bb')/Dot1Q(vlan=189)/IP()/UDP()/('*' * payload_len))         ip_range = {'src': {'start': "10.0.0.1", 'end': "10.255.255.254"},                    'dst': {'start': "8.0.0.1",  'end': "8.0.0.5"}}         if (direction == 0):            src = ip_range['src']            dst = ip_range['dst']        else:            src = ip_range['dst']            dst = ip_range['src']          vm = STLVM()         vm.var(name="src", min_value=src['start'], max_value=src['end'], size=4, op='inc')        vm.var(name="dst", min_value=dst['start'], max_value=dst['end'], size=4, op='inc')        vm.var(name="src", min_value=1024, max_value=65535, size=2, op='inc')       # 端口号按递增赋值        vm.var(name="dst", min_value=5011, max_value=5011, size=2, op='inc')     #vm.repeatable_random_var(fv_name="src_port", size=2, min_value = 1024, max_value = 65535, limit=3, seed=0)     # 随机值,seed要为可变值才能实现随机,如使用时间戳     #vm.repeatable_random_var(fv_name="dst_port", size=2, min_value = 1024, max_value = 65535, limit=3, seed=0)        vm.write(fv_name="src", pkt_offset='IP.src')        vm.write(fv_name="dst", pkt_offset='IP.dst')        #vm.write(fv_name="src_port", pkt_offset="UDP.sport")       # 根据TCP/UDP选择切换        #vm.write(fv_name="dst_port", pkt_offset="UDP.dport")        vm.write(fv_name="src_port", pkt_offset="TCP.sport")        vm.write(fv_name="dst_port", pkt_offset="TCP.dport")        vm.fix_chksum(offset='IP')        return STLStream(packet = STLPktBuilder(pkt = base_pkt, vm = vm),                         mode = STLTXCont())     def get_streams (self, direction, tunables, **kwargs):        parser = argparse.ArgumentParser(description='Argparser for {}'.format(os.path.basename(__file__)),                                         formatter_class=argparse.ArgumentDefaultsHelpFormatter)         args = parser.parse_args(tunables)        # create 1 stream        return [ self.create_stream(direction) ]  # dynamic load - used for trex console or simulatordef register():    return STLS1()
复制代码


用户头像

还未添加个人签名 2022-02-22 加入

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

评论

发布
暂无评论
T-rex压测工具使用_网络_天翼云开发者社区_InfoQ写作社区