zoukankan      html  css  js  c++  java
  • TRex,一个基于DPDK的数据包发生器,测试仪

    1. introduction

      TRex是cisco基于Intel dpdk开发的软件程序。推荐在CentOS/RHEL 7.6, 64bits中运行,否则connectx-4网卡不可使用。

    笔者在Ubuntu16.04中Intel-XL710网卡测试也成功。

      使用中高端服务器和最新的Intel网卡,TRex的发包性能可达到200Gbps,使用某些类型的网卡还支持基于硬件的每流统计量汇报(Intel-XL710 支持255条独立流)。

    2. installation

    mkdir -p /opt/trex
    
    cd /opt/trex
    
    wget --no-cache https://trex-tgn.cisco.com/trex/release/latest
    
    tar -xzvf latest

      至此就结束了安装,解压出来都是可执行文件。

      另外,需要配置网卡设置:

    sudo ./dpdk_setup_ports.py -s
    # 查看网络接口配置

      设置配置文件,例如:给DPDK驱动使用:

    cp  cfg/simple_cfg.yaml /etc/trex_cfg.yaml
    #拷贝例子到默认配置文件路径

      根据接口情况手动修改配置文件:

    sudo vim /etc/trex_cfg.yaml
    <none>
    - port_limit      : 2
      version         : 2
    interfaces    : ["03:00.0", "03:00.1"]  #需要对此进行手动调整,填写网口pcie编号
    port_info       :  
              - ip         : 1.1.1.1
                default_gw : 2.2.2.2
              - ip         : 2.2.2.2
                default_gw : 1.1.1.1

    3. 配置多流流量

        sudo vim /opt/trex/v2.61/stl/simple_3pkt.py

    def create_stream (self):
    
            # create a base packet and pad it to size
            size = self.fsize - 4 # no FCS
            base_pkt =  Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)       1
            base_pkt1 =  Ether()/IP(src="16.0.0.2",dst="48.0.0.1")/UDP(dport=12,sport=1025)
            base_pkt2 =  Ether()/IP(src="16.0.0.3",dst="48.0.0.1")/UDP(dport=12,sport=1025)
            pad = max(0, size - len(base_pkt)) * 'x'
    
    
            return STLProfile( [ STLStream( isg = 0.0,
                                            packet = STLPktBuilder(pkt = base_pkt/pad),
                                            mode = STLTXCont( pps = 10),                         2
                                            ),
    
                                 STLStream( isg = 25000.0, #defined in usec, 25 msec
                                            packet  = STLPktBuilder(pkt = base_pkt1/pad),
                                            mode    = STLTXCont( pps = 20),                      3
                                            ),
    
                                 STLStream(  isg = 50000.0,#defined in usec, 50 msec
                                             packet = STLPktBuilder(pkt = base_pkt2/pad),
                                             mode    = STLTXCont( pps = 40)                      4
    
                                            )
                                ]).get_streams()

      可分别对三种流量包头配置(IP),速度配置(PPS),启动时间配置(isg)。

    4. 启动TRex,测试双网口网卡回环。

      将光线两端分别接入网卡的两个口。

      打开命令行终端,并开启TRex服务端程序:

    sudo ./t-rex-64 -i 
    # t-rex-64 是可执行文件,在安装目录中

      打开另外一个命令行终端,开启TRex客户端程序:

    trex-console  

      在客户端程序中开启流量发送:

    start -f stl/simple_3pkt.py -a

      常用操作:

    pause -a 
    #暂停所有发送
    
    tui
    #流量统计信息

      另外一个比较有用的操作是可以根据流量配置文件生成对应的pcap文件,在流量发送之前,

    通过视察pcap文件,我们可以测试配置脚本是否正确:

    sudo ./stl-sim -f stl/udp_1pkt_range_clients_splita.py -o flow1a64Byte60000.pcap -l 60000
    #-o 输出文件名 -l 总包数

    5. 启动硬件每流测量

      编写流量配置文件,其中需要设置流ID(pg_id = 7),以及打开统计功能(flow_stats) ,stl/4flow_stats.py:

    from trex_stl_lib.api import *
    
    class STLS1(object):
    
        def __init__ (self):
            self.fsize  =128; # the size of the packet
    
    
        def create_stream (self):
    
            # Create base packet and pad it to size
            size = self.fsize - 4; # HW will add 4 bytes ethernet FCS
            base_pkt =  Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
            base_pkt1 =  Ether()/IP(src="16.0.0.2",dst="48.0.0.1")/UDP(dport=12,sport=1025)
            base_pkt2 =  Ether()/IP(src="16.0.0.3",dst="48.0.0.1")/UDP(dport=12,sport=1025)
            base_pkt3 =  Ether()/IP(src="16.0.0.4",dst="48.0.0.1")/UDP(dport=12,sport=1025)
            pad = max(0, size - len(base_pkt)) * 'x'
    
    
            return STLProfile( [ STLStream( isg = 1.0, # start in delay in usec
                                            packet = STLPktBuilder(pkt = base_pkt/pad),
                                            mode = STLTXCont( pps = 27500),
                                            flow_stats = STLFlowStats(pg_id = 7),
                                            ),
    
                                 STLStream( isg = 2.0,
                                            packet  = STLPktBuilder(pkt = base_pkt1/pad),
                                            mode    = STLTXCont( pps = 27500),
                                            flow_stats = STLFlowStats(pg_id = 12),
                                            ),
    
                                 STLStream(  isg = 3.0,
                                             packet = STLPktBuilder(pkt = base_pkt2/pad),
                                             mode    = STLTXCont( pps = 27500),
                                             flow_stats = STLFlowStats(pg_id = 15),
    
                                            ),
                                 STLStream( isg = 4.0,
                                            packet = STLPktBuilder(pkt = base_pkt3/pad),
                                            mode    = STLTXCont( pps =27500),
                                            flow_stats = STLFlowStats(pg_id = 17),
    
                                            )
                                ]).get_streams()
    
    
        def get_streams (self, direction = 0, **kwargs):
            # create 1 stream
            return self.create_stream()
    
    
    # dynamic load - used for trex console or simulator
    def register():
        return STLS1()

      开始流量:

    start -f stl/4flow_stats.py -a

      打开监控:

    tui

      打开每流显示:

    #对于版本不同可能采用不同方式, v2.6的打开方式如下:
    # 先按下esc
    # 再按下x,启动每流监控
  • 相关阅读:
    前端面试题目笔记-1
    前端面试题目笔记-2
    css样式重置reset
    【css】清除浮动的几种方式
    jpages中文api
    jQuery全屏滚动插件fullPage.js中文帮助文档API
    JSONP数据调用
    jsonp全国天气案例
    关于 System.IO.File.Exists 需要注意的事项
    设置、显示、移除服务启动依赖关系
  • 原文地址:https://www.cnblogs.com/pandaroll/p/11617801.html
Copyright © 2011-2022 走看看