TRex Installation Guide

原文TRex

hhaim
<<hhaim@cisco.com>>
version 2.1, 2017-02-21-a

1.介绍

1.1.谈谈流量生成器

传统上,路由器使用商业流量生成器进行测试,而性能通常使用每秒数据包(PPS)指标来衡量。随着路由器功能和服务变得越来越复杂,有状态流量生成器已经成为提供更真实的流量场景的必要条件。

仿真流量生成器的优势:

  • 精准的性能度量。
  • 发现真实流量场景中的瓶颈。
1.1.1.当前挑战
  • 成本:商用有状态流量生成器非常昂贵。
  • 扩展性:带宽不能很好地随特征复杂性的增加而增加。
  • 标准化:流量模型和方法缺乏标准化。
  • 灵活性:商用工具不能很好的满足客户定制和灵活性需求。

1.1.2.启示

  • 不同团队的高成本支出(capex)。
  • 小规模测试和推测成为一种常见的测试方法。这是不理想的,并且无法发现真实流量场景中出现的瓶颈。
  • 团队使用不同的基准测试方法,因此测试结果不是标准化的。
  • 由于对测试工具特性的依赖而导致的开发和测试延迟。
  • 在开发不同的特别工具和测试方法论上耗费大量的资源和精力。

1.2.TRex概述

TRex通过创新和可扩展的软件实现,以及利用标准,开放的软件和x86/UCS硬件,解决了与商用有状态流量生成器相关的问题。

  • 生成并分析L4-7流量。在一个包中,提供商用L7工具的功能。
  • 基于预处理和真实流量模板智能回放的有状态流量生成器。
  • 生成和放大客户端和服务器端流量。
  • 可以添加自定义功能。
  • 一个UCS可扩展到200Gb/秒 (using Intel 40Gb/sec NICs)。
  • 低成本
  • 可以轻松安装和部署的发行包。
  • 对虚拟接口支持使TRex能够在没有物理网卡的完全虚拟环境中使用。示例用例: Amazon AWS  Cisco LaaS  TRex on your laptop

                                                   Table 1. TRex Hardware

Cisco UCS PlatformIntel NIC

1.3.本指南的目的

本指南解释了TRex内部的使用以及TRex与Cisco ASR1000系列路由器的使用。这些示例说明了TRex实现的新颖流量生成技术。

2.下载与安装

2.1.硬件推荐

TRex是一个Linux应用程序,与Linux内核模块交互。它使用DPDK(不需要将DPDK作为库安装)。TRex应该可以在任何COTS x86服务器上工作(它可以编译为ARM,但在我们的回归中没有测试)。我们的回归测试计划使用Cisco UCS硬件来实现高性能低延迟用例。以下平台已经通过测试,建议用于运行TRex。

注意:TRex并不完全支持所有DPDK支持的接口。

                                            Table 2. Preferred UCS hardware

UCS TypeComments

UCS C220 Mx

Preferred Low-End. Supports up to 40Gb/sec with 540-D2. With newer Intel NIC (recommended), supports 80Gb/sec with 1RU. See table below describing components.

UCS C200

Early UCS model.

UCS C210 Mx

Supports up to 40Gb/sec PCIe3.0.

UCS C240 Mx

Preferred, High-End Supports up to 200Gb/sec. 6x XL710 NICS (PCIex8) or 2xFM10K (PCIex16). See table below describing components.

UCS C260M2

Supports up to 30Gb/sec (limited by V2 PCIe).

                                   Table 3. Low-end UCS C220 Mx - Internal components

ComponentsDetails

CPU

2x E5-2620 @ 2.0 GHz.

CPU Configuration

2-Socket CPU configurations (also works with 1 CPU).

Memory

2x4 banks f.or each CPU. Total of 32GB in 8 banks.

RAID

No RAID.

                                        Table 4. High-end C240 Mx - Internal components

ComponentsDetails

CPU

2x E5-2667 @ 3.20 GHz.

PCIe

1x Riser PCI expansion card option A PID UCSC-PCI-1A-240M4 enables 2 PCIex16.

CPU Configuration

2-Socket CPU configurations (also works with 1 CPU).

Memory

2x4 banks for each CPU. Total of 32GB in 8 banks.

RAID

No RAID.

Riser 1/2

Both left and right should support x16 PCIe. Right (Riser1) should be from option A x16 and Left (Riser2) should be x16. Need to order both.

 !注意:在所有裸机情况下,拥有4个DRAM通道非常重要。较少的通道会带来性能问题。要确认它,你可以运行sudo dmidcode -t memory | grep CHANNEL并检查CHANNEL x

                                                 Table 5. Supported NICs

ChipsetBandwidth (Gb/sec)LSOLROExample

Any Kernel Linux interface

x

x

x

veth,tap,tun,eth0,wireless interface, up to ~1MPPS, one thread. see low footprint and Linux interfaces

Intel I350

1

+

-

Intel 4x1GE 350-T4 NIC

Intel 82599

0.1/1/2.5/5/10

+

+

Cisco part ID:N2XX-AIPCI01 Intel x520-D2, Intel X520 Dual Port 10Gb SFP+ Adapter. X550-T2,x540-T2 for tbase Cisco part ID:UCSC-PCIE-ID10GC

Intel 82599 VF

x

+

+

Intel X710

10

+

-

Cisco part ID:UCSC-PCIE-IQ10GF SFP+Preferred support per stream stats in hardware Silicom PE310G4i71L

Intel XL710

40

+

-

Cisco part ID:UCSC-PCIE-ID40GF, QSFP+ (copper/optical) Preferred support per stream stats in hardware

Intel XXV710

1/10/25

+

-

SFP28 Intel XXV710 Preferred support per stream stats in hardware

Intel XL710/X710 VF

x

+

-

Napatech SmartNICs NT40E3-4

10

-

-

./b configure --with-ntacc to build the library

Napatech SmartNICs NT80E3-2

40

-

-

./b configure --with-ntacc to build the library

Napatech SmartNICs NT100E3-1

100

-

-

./b configure --with-ntacc to build the library. The only Napatech NIC in our regression. more info

Napatech SmartNICs NT200A01

100

-

-

./b configure --with-ntacc to build the library Note: This NIC require a BIOS with PCIe bifurcation support. PCIe bifurcation

Mellanox ConnectX-4/Lx

25/40/50/56/100

+

+

SFP28/QSFP28, ConnectX-4 ConnectX-4-brief (copper/optical) supported from v2.11 more details and issues TRex Support

Mellanox ConnectX-5/6

25/40/50/56/100/200

+

+

Supported, see issues TRex Support

Cisco 1300 series

40

+

-

QSFP+, VIC 1380, VIC 1385, VIC 1387 see more TRex Support

VMXNET3

VMware paravirtualized

+

-

Connect using VMware vSwitch

E1000

paravirtualized

+

-

VMware/KVM/VirtualBox

Virtio

paravirtualized

+

-

KVM

Amazon ENA

paravirtualized

+

-

Amazon Cloud

MS Failsafe

paravirtualized

+

-

Azure with DPDK mlx5 support

memif

shared memory rings

+

-

see memif support multi core for STL. ASTF only one core

 !注意:LSO (Large Send Offload)和LRO (Large Receive Offload)是通过减少CPU负载来增加高带宽网络连接的出入吞吐量的技术。这些通常使用多包缓冲来完成。当应用于TCP时,LSO也被称为TCP分段卸载(TSO)或通用分段卸载(GSO)。详情参考 Large Receive Offload和在维基百科上获取更多信息,https://en.wikipedia.org/wiki/Large_send_offload(Large Send Offload)。

                                                       Table 6. SFP+ support

SFP+Intel Ethernet Converged X710-DAXSilicom PE310G4i71L (Open optic)82599EB 10-Gigabit

Cisco SFP-10G-SR

Not supported

Supported

Supported

Cisco SFP-10G-LR

Not supported

Supported

Supported

Cisco SFP-H10GB-CU1M

Supported

Supported

Supported

Cisco SFP-10G-AOC1M

Supported

Supported

Supported

 !注意:Intel X710 NIC (example: FH X710DA4FHBLK) operates *only* with Intel SFP+. For open optic, use the Silicom PE310G4i71L NIC, available here: http://www.silicom-usa.com/PE310G4i71L_Quad_Port_Fiber_SFP+_10_Gigabit_Ethernet_PCI_Express_Server_Adapter_49

!注意:For Intel XXV710 Cisco NIC, make sure to upgrade cimc to latest at lest v4.0(2f), the firmware of the XXV710 will be upgraded to v6 that can support most of sfps.

                                Table 7. XL710 NIC base QSFP+ support

QSFP+Intel Ethernet Converged XL710-QDAXSilicom PE340G2Qi71 Open optic

QSFP+ SR4 optics

Supported: APPROVED OPTICS. Not supported: Cisco QSFP-40G-SR4-S

Supported: Cisco QSFP-40G-SR4-S

QSFP+ LR-4 Optics

Supported: APPROVED OPTICS. Not supported: Cisco QSFP-40G-LR4-S

Supported: Cisco QSFP-40G-LR4-S

QSFP Active Optical Cables (AoC)

Supported: Cisco QSFP-H40G-AOC

Supported: Cisco QSFP-H40G-AOC

QSFP+ Intel Ethernet Modular Supported

N/A

N/A

QSFP+ DA twin-ax cables

N/A

N/A

Active QSFP+ Copper Cables

Supported: Cisco QSFP-4SFP10G-CU

Supported: Cisco QSFP-4SFP10G-CU

 !注意:For Intel XL710 NICs, Cisco SR4/LR QSFP+ does not operate. Use Silicom with Open Optic

                        Table 8. ConnectX-4 NIC base QSFP28 support (100gb)

QSFP28ConnectX-4

QSFP28 SR4 optics

N/A

QSFP28 LR-4 Optics

N/A

QSFP28 (AoC)

Supported: Cisco QSFP-100G-AOCxM

QSFP28 DA twin-ax cables

Supported: Cisco QSFP-100G-CUxM

                             Table 9. Cisco VIC NIC base QSFP+ support

QSFP+Intel Ethernet Converged XL710-QDAX

QSFP+ SR4 optics

N/A

QSFP+ LR-4 Optics

N/A

QSFP Active Optical Cables (AoC)

Supported: Cisco QSFP-H40G-AOC

QSFP+ Intel Ethernet Modular Optics

N/A

QSFP+ DA twin-ax cables

N/A

Active QSFP+ Copper Cables

N/A

                                       Table 10. FM10K QSFP28 support 

QSFP28Example

todo

todo

 !注意:

  • Intel SFP+ 10Gb/sec 是标准Linux驱动程序默认支持的唯一选项。
  • 为了实现操作高速吞吐量(example: several Intel XL710 40Gb/sec),不同的网卡使用不同的NUMA节点。验证NUMA和网卡拓扑:lstopo (yum install hwloc),查询CPU信息,包括NUMA节点信息:lscpu,NUMA用法:example
  • 对于Intel XL710 网卡。确认NVM版本是V5.04 Info.       > sudo ./t-rex-64 -f cap2/dns.yaml -d 0 *-v 6* --nc | grep NVM                                                                           PMD: FW 5.0 API 1.5 NVM 05.00.04 eetrack 800013fc

Table 11. Sample order for recommended low-end Cisco UCSC-C220-M3S with 4x10Gb ports

ComponentQuantity

UCSC-C220-M3S

1

UCS-CPU-E5-2650

2

UCS-MR-1X041RY-A

8

A03-D500GC3

1

N2XX-AIPCI01

2

UCSC-PSU-650W

1

SFS-250V-10A-IS

1

UCSC-CMA1

1

UCSC-HS-C220M3

2

N20-BBLKD

7

UCSC-PSU-BLKP

1

UCSC-RAIL1

1

!注意: 单独购买10Gb/sec SFP+ ,思科会接受TRex(但是没有linux驱动的计划)

2.2.安装OS

2.2.1.支持的OS版本

支持的linux版本:

CentOS/RHEL 7.6,64-bit kernel(不支持32-bit)(被推荐的)- 这是ConnectX-4的唯一工作选项。

!注意:通过编译必要的驱动程序,可以支持其他操作系统版本。

查看内核是否为64位,请查看以下命令的输出信息为“x86_64”。

[bash]>uname -m
x86_64
2.2.2.验证Intel网卡安装

使用lspci命令验证网卡是否安装成功。

示例:4x 10Gb/秒TRex配置(见下面的输出):

  • I350管理端口
  • 4 × Intel以太网融合网络适配器型号x520-D2(82599芯片组)
[bash]>lspci | grep Ethernet
01:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)                #1
01:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)                #2
03:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01) #3
03:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)
82:00.0 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)
82:00.1 Ethernet controller: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection (rev 01)

1 管理端口

2 CIMC 端口

3 10Gb/sec traffic ports (Intel 82599EB)

2.3.获取TRex安装包

首先使用ssh连接到准备TRex的机器上并执行下面描述的命令。

!注意:TRex获取路径只支持https

最新(稳定)发布版:

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

最新(前沿)版本:

[bash]>wget --no-cache https://trex-tgn.cisco.com/trex/release/be_latest

获取具体版本:

[bash]>wget --no-cache https://trex-tgn.cisco.com/trex/release/vX.XX.tar.gz #1

1 where X.XX = 主版本号.次版本号https://trex-tgn.cisco.com/trex/doc/release_notes.html

3.首次运行

3.1.配置环回口

在将TRex连接到被测设备之前,强烈建议验证TRex和网卡在环回测试中是否正常工作。

!注意:

  1. 为了获得最佳性能,请将同一NUMA上的接口进行环回连接(由同一物理处理器控制)。如果你无法检查此选项,请跳过此步骤继续。
  2. 如果你使用基于Intel 520-D2 的10Gbs 网卡,和你的同一网卡的环回口使用SFP+,设备可能无法同步,可能导致链路状态不正常。SFP+多数类型已经被验证是可以正常工作的。如果遇到链路问题,请尝试从不同的网卡进行环回测试,或者使用 Cisco twinax copper cable

                                                                 Loopback example

 3.1.1.识别端口

使用以下命令识别端口:

[bash]>sudo ./dpdk_setup_ports.py -s

 Network devices using DPDK-compatible driver
 ============================================

 Network devices using kernel driver
 ===================================
 0000:03:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb #1
 0000:03:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
 0000:13:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
 0000:13:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
 0000:02:00.0 '82545EM Gigabit Ethernet Controller (Copper)' if=eth2 drv=e1000 unused=igb_uio *Active* #2

 Other network devices
 =====================
 <none>

1 如果没有运行过任何DPDK应用程序,命令输出将显示绑定到内核或没有绑定驱动的接口列表。

2 标记为“active”的接口是ssh连接使用的接口。永远不要把这个接口放到TRex配置文件中。

选择要使用的端口,并按照下一节中的说明创建配置文件。

3.1.2.创建最小配置文件

默认配置文件名:/etc/trex_cfg.yaml

获取YAML配置文件选项的完整列表,参见 Platform YAML.

出于许多目的,从基本配置文件模板的副本开始是很方便的,可以在cfg文件夹中找到:

[bash]>cp  cfg/simple_cfg.yaml /etc/trex_cfg.yaml

接下来,编辑配置文件,添加接口和IP地址的详细信息。

示例:

<none>
- port_limit      : 2
  version         : 2
#List of interfaces. Change according to your setup. Use ./dpdk_setup_ports.py -s to see available options.
interfaces    : ["03:00.0", "03:00.1"]  #1
port_info       :  # Port IPs. Change according to your needs. In case of loopback, you can leave as is.
          - ip         : 1.1.1.1
            default_gw : 2.2.2.2
          - ip         : 2.2.2.2
            default_gw : 1.1.1.1

1 编辑这一行以匹配你正在使用的接口。所有网卡类型必须一致,不要在一个配置文件中混用不同的网卡类型。欲了解更多信息,参见trex-201

3.2.配置文件创建脚本

有一个自动化脚本可以根据你的需要裁剪基本配置文件。该脚本将引导你开始,然后你可以直接编辑生成的配置文件以获得高级选项。有关详细信息,参见Platform YAML

运行脚本有两种方式:

  • 交互模式:脚本提示输入参数。
  • 命令行模式:使用命令行选项提供所有参数。
3.2.1.交互模式

该脚本提供了一个可用接口列表,其中包含接口相关信息。按照说明创建基本配置文件。

[bash]>sudo ./dpdk_setup_ports.py -i
3.2.2 命令行模式

显示所有接口列表和接口相关信息。

[bash]>sudo ./dpdk_setup_ports.py -t
  • 如果只有环回口或L1-L2交换机,则不需要ip和目的mac。该脚本假定有以下接口连接 0↔1, 2↔3 etc.

执行以下命令:

[bash]>sudo ./dpdk_setup_ports.py -c <TRex interface 0> <TRex interface 1> ...
  • 如果是路由器(或其他下一跳设备,如L3 Switch),请指定Rex 的ip地址和默认网关,mac,如下所述。

                  Table 12. 配置文件创建脚本的命令行选项(dpdk_setup_ports.py -c)

ArgumentDescriptionExample

-c

配置指定接口(PCI地址或Linux名称:eth1等)创建配置文件。

-c 03:00.1 eth1 eth4 84:00.0

--dump

将创建的配置显示到屏幕。

-o

将配置输出到文件中。

-o /etc/trex_cfg.yaml

--dest-macs

配置每个接口要使用的目的mac。在基于mac的配置中使用此选项,而不是基于ip的配置。不要将这个选项与--ip和--def_gw一起使用。

--dest-macs 11:11:11:11:11:11 22:22:22:22:22:22

--ip

配置每个接口使用的ip列表。如果没有指定--ip和--dest-mac,脚本假定有环回连接(0↔1、2↔3等)。

--ip 1.2.3.4 5.6.7.8

--def-gw

配置每个接口使用的默认网关。当使用--ip选项时,也要使用--def_gw选项。

--def-gw 3.4.5.6 7.8.9.10

--ci

Cores include:使用的cpu核白名单。为每个NUMA配置足够的cpu核。

--ci 0 2 4 5 6

--ce

Cores exclude:排除黑名单。在排除cpu核时,确保每个NUMA都有足够的剩余cpu核。

--ce 10 11 12

--no-ht

No HyperThreading: 只使用配置文件中指定的每个cpu核的一个线程。(关闭超线程)

--prefix

(高级选项)在多实例的情况下,TRex配置中使用的前缀。多实例运行时指定。

--prefix first_instance

--zmq-pub-port

(高级选项)在多实例的情况下,在TRex配置中使用的ZMQ 发布者端口。

--zmq-pub-port 4000

--zmq-rpc-port

(高级选项)在多实例的情况下,在TRex配置中使用的ZMQ RPC端口。

--zmq-rpc-port

--ignore-numa

(高级选项)创建配置时忽略numa。此选项可能会降低性能。仅在必要时使用-例如,在不同numa的一对接口的情况下。

3.3.TRex on ESXi

一般建议:为了获得最佳性能,在“裸机”硬件上运行TRex,不使用任何类型的VM。虚拟机带宽可能受限,不能完全支持IPv6。

在特殊情况下,在VM上运行TRex可能是合理的或有利的:

  • 如果你已经安装了VM,并且不需要高性能。
  • 虚拟网卡可以连接TRex和TRex不支持的网卡。
3.3.1.配置ESXi以运行TRex

1.Click the host machine, then select Configuration → Networking.

    a.其中一个网卡必须连接到主vSwitch网络,以便为TRex客户端和ssh提供“外部”连接:

    b.TRex用于测试流量的网卡必须在单独的vSwitch中:

 2.Right-click the guest machine → Edit settings→确保网卡设置为其网络:

 !注意:在2.10版本之前,以下命令不能正常工作:

sudo ./t-rex-64 -f cap2/dns.yaml --lm 1 --lo -l 1000 -d 100

vSwitch没有正确路由报文。这个问题在2.10版本中解决了,因为TRex开始支持ARP。

3.3.2.配置Pass-through

Pass-through(直通)允许从虚拟机内部直接使用主机网卡。直通访问通常只受网卡/硬件本身的限制,但偶尔会出现延迟高峰(~10ms)。直通设置不能保存到OVA中。

  1. Click the host machine. Enter Configuration → Advanced settings → Edit.

  2. Mark the desired NICs.

  3. Reboot the ESXi to apply.

  4. Right-click the guest machine. Edit settings → Add → PCI device → Select the NICs individually.

3.4.低端机

从2.37版本开始,增加了在低端机器(如笔记本电脑)上运行TRex的功能。

要启用此模式,请在平台配置文件中定义low_end参数:

  - version: 2
    interfaces: ['82:00.0', '82:00.1']
    low_end: true                       1
    low_end_core: 3                     2
    ...

1 使能low-end模式

2 将进程和该core设置亲和性(默认为0)

该模式的含义如下:

  • 所有TRex线程将被分配到单个core(默认为0,可通过low_end_core配置)
  • 较低的内存分配/需求。 如果你已经启动了,没有使用low_end参数,请重新启动Linux以释放hugepages。
  • 在调度中sleeps,而不是忙着等待 (精准性降低,但节省电力)
  • 如果队列已满,请勿重试发送。
  • 忽略配置文件中的"platform"部分。

我们用以下VM进行了测试:

  • 1 core
  • 475MB 的 RAM

  • 两张E1000虚拟网卡

例如,无状态IMIX:

>start -f stl/imix.py -m 100kpps

Tx bps L2  |       289.67 Mbps |       289.67 Mbps |       579.34 Mbps
Tx bps L1  |       305.68 Mbps |       305.68 Mbps |       611.36 Mbps
Tx pps     |       100.07 Kpps |       100.07 Kpps |       200.14 Kpps
Line Util. |           30.57 % |           30.57 % |

 "top" 显示:

%CPU COMMAND
 1.0 _t-rex-64
 0.0  `- eal-intr-thread
13.0  `- Trex DP core 1
 3.0  `- TRex RX
 0.0  `- Trex Publisher
 0.0  `- Trex Publisher
 0.0  `- Trex ZMQ sync
 0.0  `- Trex Watchdog
 0.0  `- Trex ZMQ sync
 0.0  `- Trex ZMQ sync

3.5.linux接口

另一个有趣的低端用例是使用本地Linux接口。(2.37版开始)

优势:

  • 可以使用任何类型的网卡(Linux支持),特别是没有PCI地址的虚拟接口。
  • 不需要hugepages。
  • 能在Linux中捕获流量(Wireshark / tcpdump etc.)。
  • 启动非常快(网卡没有初始化)
  • 不需要特殊的内核模块(igb_uio.ko等等)

缺点:

  • 单个TX/RX core,特别是速率将限制在~1Mpps。
  • 需要更多的CPU利用率。
  • 使Linux系统整体变慢。

“Platform”配置文件示例:

- port_limit: 2
    version: 2
    interfaces: ['eth2', 'eth3']
...

在底层,它被替换为以下内容(也可以使用完整的语法,可能包含另一个DPDK参数):

- port_limit: 2
    version: 2
    interfaces: ['--vdev=net_af_packet0,iface=eth2', '--vdev=net_af_packet1,iface=eth3']
...

3.6.memif 接口(vpp虚拟接口)

它封装了一个共享内存环。有四个参数来连接两个memifs进行通信:socket, id, role和secret。

Socket, id和secret需要相同(对于一对连接的memifs), role必须不同。

一对memifs接口中有一个master和一个slave。

Socket用于交换协议控制消息。(我只需要匹配默认路径/run/vpp/memif,在FD vpp中。每一对memif都是独一无二的。Secret是可选字段(默认为空),必须匹配。

3.6.1.memif环回示例

将两个memifs互连成环回:

                                                            trex_cfg.yaml

  - port_limit: 2
    version: 2
    interfaces: ["--vdev=net_memif0,id=0,role=master",
                 "--vdev=net_memif1,id=0,role=slave"]
3.6.2.memif互连trex和FD.io VPP示例

连接trex和两个VPP memif接口:

                                                             trex_cfg.yaml

 - port_limit: 2
    version: 2
    interfaces: ["--vdev=net_memif0,role=slave,id=0,socket-abstract=no,socket=/run/vpp/memif.sock",
                 "--vdev=net_memif1,role=slave,id=1,socket-abstract=no,socket=/run/vpp/memif.sock"]

VPP CLI命令创建相应的接口:

vpp# create interface memif id 0 master
vpp# set interface state memif0/0 up
vpp# create interface memif id 1 master
vpp# set interface state memif0/1 up

然后可以通过以下方式验证状态:

vpp# show memif

3.7.TCP/IP 协议栈

在交互模式下,可以选择TRex如何响应ping/ARP的方法(STL/ASTF)。(2.43版开始)

有效值:

  • “legacy” - 默认值,TRex使用自己的代码来应答ping / arp。
  • "linux_based" - arp /ping被重定向到Linux接口被处理。Linux接口被分配在单独的网络名称空间中,以便拥有自己的ARP表,而不会干扰系统的其余部分。它可以在未来被扩展:a 支持Linux本地支持的其他协议;b TRex端口充当连接所有仿真协议栈客户端的交换机。

“Platform”配置文件示例:

- version: 2
    interfaces: ['82:00.0', '82:00.1']
    stack: linux_based
...
Table 13. Features of stacks
Stack:legacylinux_based

L2:

yes

yes

IPv4:

yes

yes

IPv6:

no

yes

VLAN:

yes

yes

STL:

fully

in service

ASTF:

fully

fully

!注意: linux_based stack需要service mode以STL方式处理RX报文

配置示例:

Console:

L2, IPv4, VLAN - 以相同的方式配置两个协议栈。

IPv6:

trex>ipv6 --help
usage: port [-h] -p PORT (--off | --auto | -s SRC_IPV6)

Configures IPv6 of a port

optional arguments:
  -h, --help            show this help message and exit
  -p PORT, --port PORT  source port for the action
  --off                 Disable IPv6 on port.
  --auto                Enable IPv6 on port with automatic address.
  -s SRC_IPV6, --src SRC_IPV6
                        Enable IPv6 on port with specific address.

 API:

参见 IPv6 configuration

3.8.虚拟端口

虚拟端口可以解决两个问题:

  • 奇数个接口。例如只有一个接口的TRex。
  • 相邻接口属于不同numa时性能下降。

配置示例:

  ...
    interfaces: ['07:00.0', 'dummy', 'dummy', '8a:00.0']
  ...

错误的配置示例:

 ...
    interfaces: ['dummy', 'dummy', 'dummy', '8a:00.0']
 ....

(每对端口至少有一个非虚拟端口)

!注意:

  1. 从v2.38后开始在TRex中支持
  2. v2.38之前的客户端(Python API, trex-console)无法使用虚拟端口。将客户机更新到v2.38或更高版本。
  3. 虚拟端口可用于所有TRex模式(无状态、有状态和ASTF)。

如果为单接口TRex生成器使用虚拟端口,请考虑以下内容:

Configuration

Mode

Support Status

Comments

Single TRex Generator, Single Interface

Stateless

functional

单向操作

Stateful

semi-functional

单向发送

ASTF

depends on remote

需要双向TCP协议栈,如果远端支持TCP协议栈,能正常工作,远端不支持则不能正常工作

Two TRex Generators ,Single Interface

Stateless

functional

双向操作

Stateful

semi-functional

能正常工作,然而流不能同步。

ASTF

functional

full TCP stack

 3.9.bonding接口

它提供了与Linux bonding驱动程序类似的功能。模式4支持链路聚合802.3AD。详情请看here

配置示例:

  ...
    interfaces: [ '--vdev=net_bonding0,mode=0,slave=d8:00.0,slave=d8:00.1', 'dummy' ]
  ...

bond设备继承第一个slave设备的属性。所有从设备应具有相同的速率和双工模式。

!注意:当使用模式4时,可能需要更多的收敛时间。使用-w命令行选项为它提供足够的时间。

3.10.配置路由器(或其他L3设备)作为DUT运行

你可以按照 this presentation了解如何将路由器配置为DUT的示例。

3.11.运行TRex,显示信息解释

配置完成后,使用以下命令启动TRex运行10秒(使用默认配置文件/etc/trex_cfg.yaml):

[bash]>sudo ./t-rex-64 -f cap2/dns.yaml -c 4 -m 1 -d 10
3.11.1.TRex 输出

成功运行TRex后,输出如下所示:

$ sudo ./t-rex-64 -f cap2/dns.yaml -d 10
Starting  TRex 2.09 please wait  ...
zmq publisher at: tcp://*:4500
 number of ports found : 4
  port : 0
  ------------
  link         :  link : Link Up - speed 10000 Mbps - full-duplex      1
  promiscuous  : 0
  port : 1
  ------------
  link         :  link : Link Up - speed 10000 Mbps - full-duplex
  promiscuous  : 0
  port : 2
  ------------
  link         :  link : Link Up - speed 10000 Mbps - full-duplex
  promiscuous  : 0
  port : 3
  ------------
  link         :  link : Link Up - speed 10000 Mbps - full-duplex
  promiscuous  : 0


 -Per port stats table
      ports |               0 |               1 |               2 |               3
 -------------------------------------------------------------------------------------
   opackets |            1003 |            1003 |            1002 |            1002
     obytes |           66213 |           66229 |           66132 |           66132
   ipackets |            1003 |            1003 |            1002 |            1002
     ibytes |           66225 |           66209 |           66132 |           66132
    ierrors |               0 |               0 |               0 |               0
    oerrors |               0 |               0 |               0 |               0
      Tx Bw |     217.09 Kbps |     217.14 Kbps |     216.83 Kbps |     216.83 Kbps

 -Global stats enabled
 Cpu Utilization : 0.0  % 2  29.7 Gb/core 3
 Platform_factor : 1.0
 Total-Tx        :     867.89 Kbps                                             4
 Total-Rx        :     867.86 Kbps                                             5
 Total-PPS       :       1.64 Kpps
 Total-CPS       :       0.50  cps

 Expected-PPS    :       2.00  pps   6
 Expected-CPS    :       1.00  cps   7
 Expected-BPS    :       1.36 Kbps   8

 Active-flows    :        0 9 Clients :      510   Socket-util  : 0.0000 %
 Open-flows      :        1 10 Servers :      254   Socket   :        1  Socket/Clients :  0.0
 drop-rate       :       0.00  bps   11
 current time    : 5.3 sec
 test duration   : 94.7 sec

1 Link 必须时up时,TRex才能正常工作。

2 发送线程的平均CPU利用率。低于80%效果最好。

3 每个DP core发送流速率Gb/秒。越高越好。

4 Total Tx必须与运行结束时的Total Rx相同(理想情况下行,但现实测试,不一定能达到)。

5 Total Rx必须与运行结束时的Total Tx相同。

6 每秒期望包数(计算时不考虑延迟包数)。

7 每秒预期连接数(计算时不考虑延迟数据包)。

8 每秒预期bit数(计算时不考虑延迟数据包)。

9 TRex active“流”的数量。由于老化问题,可能与路由器流的数量不同。通常情况下,由于路由器流老化较慢,TRex活动流的数量远低于路由器的数量。

10 自启动以来生成的TRex流的总数(包括活动流和已经关闭的流)。

11 drop 速率。

3.11.2.延迟统计

延迟和抖动信息虽然没有出现在上面的输出中,但测量是可能的!详情参考Measuring Jittery/Latency

3.11.3.输出统计信息中的其他信息

socket:与active流数相同。

Socket/Clients:每个客户端活动流的平均值,以active_flows/#clients计算。

Socket-util:估计每个客户端IP使用的L4端口(套接字)数量。这大约是(100*active_flows/#clients)/64K,计算为(每个客户端的平均活动流量*100/64K)。使用率超过50%说明每个client ip被TRex 生成了太多的流(port使用太多),需要配置更多的clients ip来满足测试需要。

Platform_factor:在某些情况下,用户使用分配器/交换机复制流量。在这个场景中,将TRex显示的所有数字乘以这个因子是很有用的,这样TRex计数器将与DUT计数器匹配。

 !注意:如果没有看到Rx数据包统计,请检查MAC地址配置。

4.基本用法

4.1.DNS基本示例

下面是一个简单的例子,有助于理解TRex是如何工作的。该示例使用TRex模拟器。这个模拟器可以在任何Cisco Linux上运行,包括TRex本身。TRex模拟客户机和服务器,并根据提供的pcap文件生成流量。 

                                                            Clients/Servers

 下面是一个yaml格式的流量配置文件示例(cap2/dns_test.yaml),并附有解释性说明。

[bash]>cat cap2/dns_test.yaml
- duration : 10.0
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"     1
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"     2
          servers_end   : "48.0.0.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 1
          udp_aging      : 1
  cap_info :
     - name: cap2/dns.pcap               3
       cps : 1.0                         4
       ipg : 10000                       5
       rtt : 10000                       6
       w   : 1

1 客户端ip范围(IPv4格式)。

2 服务端ip范围(IPv4格式)。

3 pcap文件,其中包括将用作模板的DNS cap文件。

4 每秒要生成的连接数。在本例中,1.0表示每秒1个连接。

5 发包间隔(微秒)。10,000 = 10毫秒。

6 应该和ipg一样。

                                                       DNS template file

DNS模板文件包括:

  1. 一条流
  2. 两个包
  3. 第一个数据包:来自发起人(client-server)
  4. 第二个数据包:响应(server→client)

TRex替换client_ip、client_port和server_ip。server_port将保持不变。

[bash]>./bp-sim-64-debug -f cap2/dns.yaml -o my.erf -v 3
 -- loading cap file cap2/dns.pcap
 id,name               , tps, cps,f-pkts,f-bytes, duration,   Mb/sec,   MB/sec,   #1
 00, cap2/dns.pcap     ,1.00,1.00,     2 ,     170 ,   0.02 ,   0.00 ,    0.00 ,
 00, sum               ,1.00,1.00,     2 ,     170 ,   0.00 ,   0.00 ,    0.00 ,

 Generating erf file ...
pkt_id,time,fid,pkt_info,pkt,len,type,is_init,is_last,type,thread_id,src_ip,dest_ip,src_port #2
 1 ,0.010000,1,0x9055598,1,77,0,1,0,0,0,10000001,30000001,1024
 2 ,0.020000,1,0x9054760,2,93,0,0,1,0,0,10000001,30000001,1024
 3 ,2.010000,2,0x9055598,1,77,0,1,0,0,0,10000002,30000002,1024
 4 ,2.020000,2,0x9054760,2,93,0,0,1,0,0,10000002,30000002,1024
 5 ,3.010000,3,0x9055598,1,77,0,1,0,0,0,10000003,30000003,1024
 6 ,3.020000,3,0x9054760,2,93,0,0,1,0,0,10000003,30000003,1024
 7 ,4.010000,4,0x9055598,1,77,0,1,0,0,0,10000004,30000004,1024
 8 ,4.020000,4,0x9054760,2,93,0,0,1,0,0,10000004,30000004,1024
 9 ,5.010000,5,0x9055598,1,77,0,1,0,0,0,10000005,30000005,1024
 10 ,5.020000,5,0x9054760,2,93,0,0,1,0,0,10000005,30000005,1024
 11 ,6.010000,6,0x9055598,1,77,0,1,0,0,0,10000006,30000006,1024
 12 ,6.020000,6,0x9054760,2,93,0,0,1,0,0,10000006,30000006,1024
 13 ,7.010000,7,0x9055598,1,77,0,1,0,0,0,10000007,30000007,1024
 14 ,7.020000,7,0x9054760,2,93,0,0,1,0,0,10000007,30000007,1024
 15 ,8.010000,8,0x9055598,1,77,0,1,0,0,0,10000008,30000008,1024
 16 ,8.020000,8,0x9054760,2,93,0,0,1,0,0,10000008,30000008,1024
 17 ,9.010000,9,0x9055598,1,77,0,1,0,0,0,10000009,30000009,1024
 18 ,9.020000,9,0x9054760,2,93,0,0,1,0,0,10000009,30000009,1024
 19 ,10.010000,a,0x9055598,1,77,0,1,0,0,0,1000000a,3000000a,1024
 20 ,10.020000,a,0x9054760,2,93,0,0,1,0,0,1000000a,3000000a,1024

file stats
=================
 m_total_bytes                           :       1.66 Kbytes
 m_total_pkt                             :      20.00  pkt
 m_total_open_flows                      :      10.00  flows
 m_total_pkt                             : 20
 m_total_open_flows                      : 10
 m_total_close_flows                     : 10
 m_total_bytes                           : 1700

1 给出了模板的全局统计信息。Cps =每秒连接数。TPS是每秒模板数。在一个模板包含多个流的插件中,它们可能会有所不同。例如EMIX配置文件中的RTP流(avl/delay_10_rtp_160k_full.pcap)

 2 生成信息输出

[bash]>wireshark  my.erf

gives

                                                    TRex generated output file

images/dns_trex_run.png(显示出错)

如输出文件所示…

  • TRex每秒生成一个新的流。
  • 客户端IP值取自客户端IP池。
  • 服务器IP值取自服务器IP池。
  • IPG(包间间隙)值取自配置文件(10毫秒)。

!注意:在基本使用中,TRex不等待收到发起者数据包。响应包将仅基于超时(本例中为IPG)触发。 在高级场景(如NAT)中,流的第一个报文由TRex处理,只有在收到报文后才会发起响应报文。因此,有必要脱机处理模板pcap文件,并确保客户机和服务器数据包之间有足够的往返延迟(RTT)。看一看:astf-sim for fixing pcaps,另一种方法是将yaml ipg字段更改为足够高的值(大于10msec)。

转换模拟器文本会得到一个类似于下面的表:

                                 Table 14. DNS example formatted results

pkttime secfidflow-pkt-idclient_ipclient_portserver_ipdirection

1

0.010000

1

1

16.0.0.1

1024

48.0.0.1

2

0.020000

1

2

16.0.0.1

1024

48.0.0.1

3

2.010000

2

1

16.0.0.2

1024

48.0.0.2

4

2.020000

2

2

16.0.0.2

1024

48.0.0.2

5

3.010000

3

1

16.0.0.3

1024

48.0.0.3

6

3.020000

3

2

16.0.0.3

1024

48.0.0.3

7

4.010000

4

1

16.0.0.4

1024

48.0.0.4

8

4.020000

4

2

16.0.0.4

1024

48.0.0.4

9

5.010000

5

1

16.0.0.5

1024

48.0.0.5

10

5.020000

5

2

16.0.0.5

1024

48.0.0.5

11

6.010000

6

1

16.0.0.6

1024

48.0.0.6

12

6.020000

6

2

16.0.0.6

1024

48.0.0.6

13

7.010000

7

1

16.0.0.7

1024

48.0.0.7

14

7.020000

7

2

16.0.0.7

1024

48.0.0.7

15

8.010000

8

1

16.0.0.8

1024

48.0.0.8

16

8.020000

8

2

16.0.0.8

1024

48.0.0.8

17

9.010000

9

1

16.0.0.9

1024

48.0.0.9

18

9.020000

9

2

16.0.0.9

1024

48.0.0.9

19

10.010000

a

1

16.0.0.10

1024

48.0.0.10

20

10.020000

a

2

16.0.0.10

1024

48.0.0.10

 where:

fid: Flow ID -  流id.

low-pkt-id :每条流中数据包的id,从1开始。

client_ip: 客户端ip。

client_port:客户端端口。

server_ip:服务端ip。

direction:方向。“→”是客户端到服务端;“←”是服务端到客户端。

下面的配置扩大了CPS并缩短了持续时间。

[bash]>more cap2/dns_test.yaml
- duration : 1.0                        1
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 1
          udp_aging      : 1
  mac        : [0x00,0x00,0x00,0x01,0x00,0x00]
  cap_info :
     - name: cap2/dns.pcap
       cps : 10.0                        2
       ipg : 50000                       3
       rtt : 50000
       w   : 1

1 持续1秒

2 cps是10

3 IPG是50毫秒

运行此命令会产生以下输出:

[bash]>./bp-sim-64-debug -f cap2/dns_test.yaml -o my.erf -v 3
Table 15. Formated results
pkttime sectemplatefidflow-pkt-idclient_ipclient_portserver_ipdesc

1

0.010000

0

1

1

16.0.0.1

1024

48.0.0.1

2

0.060000

0

1

2

16.0.0.1

1024

48.0.0.1

3

0.210000

0

2

1

16.0.0.2

1024

48.0.0.2

4

0.260000

0

2

2

16.0.0.2

1024

48.0.0.2

5

0.310000

0

3

1

16.0.0.3

1024

48.0.0.3

6

0.360000

0

3

2

16.0.0.3

1024

48.0.0.3

7

0.410000

0

4

1

16.0.0.4

1024

48.0.0.4

8

0.460000

0

4

2

16.0.0.4

1024

48.0.0.4

9

0.510000

0

5

1

16.0.0.5

1024

48.0.0.5

10

0.560000

0

5

2

16.0.0.5

1024

48.0.0.5

11

0.610000

0

6

1

16.0.0.6

1024

48.0.0.6

12

0.660000

0

6

2

16.0.0.6

1024

48.0.0.6

13

0.710000

0

7

1

16.0.0.7

1024

48.0.0.7

14

0.760000

0

7

2

16.0.0.7

1024

48.0.0.7

15

0.810000

0

8

1

16.0.0.8

1024

48.0.0.8

16

0.860000

0

8

2

16.0.0.8

1024

48.0.0.8

17

0.910000

0

9

1

16.0.0.9

1024

48.0.0.9

18

0.960000

0

9

2

16.0.0.9

1024

48.0.0.9

19

1.010000

0

a

1

16.0.0.10

1024

48.0.0.10

20

1.060000

0

a

2

16.0.0.10

1024

48.0.0.10

 使用上面数据将输出为以下图表,x轴:时间(秒) ,y轴:显示的流id表明1秒内有10条流,与预期一致,IPG为50 msec

 !注意:请注意第二个流生成中的间隙。这是预期的计划工件,不会产生影响。

 4.2.DNS,从pcap文件中获取流量IPG

在下面的例子中,IPG取自IPG本身。

- duration : 1.0
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 0
          udp_aging      : 0
  mac        : [0x00,0x00,0x00,0x01,0x00,0x00]
  cap_ipg    : true        1
  #cap_ipg_min    : 30
  #cap_override_ipg    : 200
  cap_info :
     - name: cap2/dns.pcap
       cps : 10.0
       ipg : 10000
       rtt : 10000
       w   : 1

1 IPG取自pcap。

Table 16. dns ipg from pcap file
pkttime sectemplatefidflow-pkt-idclient_ipclient_portserver_ipdesc

1

0.010000

0

1

1

16.0.0.1

1024

48.0.0.1

2

0.030944

0

1

2

16.0.0.1

1024

48.0.0.1

3

0.210000

0

2

1

16.0.0.2

1024

48.0.0.2

4

0.230944

0

2

2

16.0.0.2

1024

48.0.0.2

5

0.310000

0

3

1

16.0.0.3

1024

48.0.0.3

6

0.330944

0

3

2

16.0.0.3

1024

48.0.0.3

7

0.410000

0

4

1

16.0.0.4

1024

48.0.0.4

8

0.430944

0

4

2

16.0.0.4

1024

48.0.0.4

9

0.510000

0

5

1

16.0.0.5

1024

48.0.0.5

10

0.530944

0

5

2

16.0.0.5

1024

48.0.0.5

11

0.610000

0

6

1

16.0.0.6

1024

48.0.0.6

12

0.630944

0

6

2

16.0.0.6

1024

48.0.0.6

13

0.710000

0

7

1

16.0.0.7

1024

48.0.0.7

14

0.730944

0

7

2

16.0.0.7

1024

48.0.0.7

15

0.810000

0

8

1

16.0.0.8

1024

48.0.0.8

16

0.830944

0

8

2

16.0.0.8

1024

48.0.0.8

17

0.910000

0

9

1

16.0.0.9

1024

48.0.0.9

18

0.930944

0

9

2

16.0.0.9

1024

48.0.0.9

19

1.010000

0

a

1

16.0.0.10

1024

48.0.0.10

20

1.030944

0

a

2

16.0.0.10

1024

48.0.0.10

在本例中,IPG取自pcap文件,它接近于20毫秒,而不是50毫秒(取自配置文件)。

  #cap_ipg_min    : 30           1
  #cap_override_ipg    : 200     2

1 设置应该被覆盖的最小IPG(微秒):( if (pkt_ipg<cap_ipg_min) { pkt_ipg = cap_override_ipg } )

2 要覆盖的值(微秒)。

4.3.DNS,设置一个服务器ip

在本例中,服务器IP取自模板。

- duration : 10.0
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.1.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 1
          udp_aging      : 1
  mac        : [0x00,0x00,0x00,0x01,0x00,0x00]
  cap_ipg    : true
  #cap_ipg_min    : 30
  #cap_override_ipg    : 200
  cap_info :
     - name: cap2/dns.pcap
       cps : 1.0
       ipg : 10000
       rtt : 10000
       server_addr : "48.0.0.7"    1
       one_app_server : true       2
       w   : 1

1 该模板的所有流将使用同一台服务器。

2 必须设置为“true”。

Table 17. dns ipg from pcap file
pkttime secfidflow-pkt-idclient_ipclient_portserver_ipdesc

1

0.010000

1

1

16.0.0.1

1024

48.0.0.7

2

0.030944

1

2

16.0.0.1

1024

48.0.0.7

3

2.010000

2

1

16.0.0.2

1024

48.0.0.7

4

2.030944

2

2

16.0.0.2

1024

48.0.0.7

5

3.010000

3

1

16.0.0.3

1024

48.0.0.7

6

3.030944

3

2

16.0.0.3

1024

48.0.0.7

7

4.010000

4

1

16.0.0.4

1024

48.0.0.7

8

4.030944

4

2

16.0.0.4

1024

48.0.0.7

9

5.010000

5

1

16.0.0.5

1024

48.0.0.7

10

5.030944

5

2

16.0.0.5

1024

48.0.0.7

11

6.010000

6

1

16.0.0.6

1024

48.0.0.7

12

6.030944

6

2

16.0.0.6

1024

48.0.0.7

13

7.010000

7

1

16.0.0.7

1024

48.0.0.7

14

7.030944

7

2

16.0.0.7

1024

48.0.0.7

15

8.010000

8

1

16.0.0.8

1024

48.0.0.7

16

8.030944

8

2

16.0.0.8

1024

48.0.0.7

17

9.010000

9

1

16.0.0.9

1024

48.0.0.7

18

9.030944

9

2

16.0.0.9

1024

48.0.0.7

19

10.010000

a

1

16.0.0.10

1024

48.0.0.7

20

10.030944

a

2

16.0.0.10

1024

48.0.0.7

4.4.DNS,减少客户端数量

- duration : 10.0
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"    1
          clients_end   : "16.0.0.1"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.3"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 1
          udp_aging      : 1
  mac        : [0x00,0x00,0x00,0x01,0x00,0x00]
  cap_ipg    : true
  #cap_ipg_min    : 30
  #cap_override_ipg    : 200
  cap_info :
     - name: cap2/dns.pcap
       cps : 1.0
       ipg : 10000
       rtt : 10000
       w   : 1

1 只有一个客户端

Table 18. dns ipg from pcap file
pkttime secfidflow-pkt-idclient_ipclient_portserver_ipdesc

1

0.010000

1

1

16.0.0.1

1024

48.0.0.1

2

0.030944

1

2

16.0.0.1

1024

48.0.0.1

3

2.010000

2

1

16.0.0.1

1025

48.0.0.2

4

2.030944

2

2

16.0.0.1

1025

48.0.0.2

5

3.010000

3

1

16.0.0.1

1026

48.0.0.3

6

3.030944

3

2

16.0.0.1

1026

48.0.0.3

7

4.010000

4

1

16.0.0.1

1027

48.0.0.4

8

4.030944

4

2

16.0.0.1

1027

48.0.0.4

9

5.010000

5

1

16.0.0.1

1028

48.0.0.5

10

5.030944

5

2

16.0.0.1

1028

48.0.0.5

11

6.010000

6

1

16.0.0.1

1029

48.0.0.6

12

6.030944

6

2

16.0.0.1

1029

48.0.0.6

13

7.010000

7

1

16.0.0.1

1030

48.0.0.7

14

7.030944

7

2

16.0.0.1

1030

48.0.0.7

15

8.010000

8

1

16.0.0.1

1031

48.0.0.8

16

8.030944

8

2

16.0.0.1

1031

48.0.0.8

17

9.010000

9

1

16.0.0.1

1032

48.0.0.9

18

9.030944

9

2

16.0.0.1

1032

48.0.0.9

19

10.010000

a

1

16.0.0.1

1033

48.0.0.10

20

10.030944

a

2

16.0.0.1

1033

48.0.0.10

在这种情况下,只有一个客户端ip,因此只有用端口来区分流,你需要确保在高速率运行TRex时有足够的空闲套接字

 Active-flows    :        0  Clients :      1  1  Socket-util : 0.0000 %    2
 Open-flows      :        1  Servers :      254   Socket :        1 Socket/Clients :  0.0
 drop-rate       :       0.00  bps

1 客户端数

2 sockets 使用率(应当低于20%,数据太大表明此时有问题)

4.5.DNS,W=1

w是IPclients/servers生成器的可调项。W =1是默认行为。设置w=2配置来自同一客户端的两次分配(也就是一个ip连续发流的个数,2就是连续发两个)。参见下面的示例。

- duration : 10.0
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.10"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.3"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 1
          udp_aging      : 1
  mac        : [0x00,0x00,0x00,0x01,0x00,0x00]
  cap_ipg    : true
  #cap_ipg_min    : 30
  #cap_override_ipg    : 200
  cap_info :
     - name: cap2/dns.pcap
       cps : 1.0
       ipg : 10000
       rtt : 10000
       w   : 2
Table 19. DNS ipg from pcap file
pkttime secfidflow-pkt-idclient_ipclient_portserver_ipdesc

1

0.010000

1

1

16.0.0.1

1024

48.0.0.1

2

0.030944

1

2

16.0.0.1

1024

48.0.0.1

3

2.010000

2

1

16.0.0.1

1025

48.0.0.1

4

2.030944

2

2

16.0.0.1

1025

48.0.0.1

5

3.010000

3

1

16.0.0.2

1024

48.0.0.2

6

3.030944

3

2

16.0.0.2

1024

48.0.0.2

7

4.010000

4

1

16.0.0.2

1025

48.0.0.2

8

4.030944

4

2

16.0.0.2

1025

48.0.0.2

9

5.010000

5

1

16.0.0.3

1024

48.0.0.3

10

5.030944

5

2

16.0.0.3

1024

48.0.0.3

11

6.010000

6

1

16.0.0.3

1025

48.0.0.3

12

6.030944

6

2

16.0.0.3

1025

48.0.0.3

13

7.010000

7

1

16.0.0.4

1024

48.0.0.4

14

7.030944

7

2

16.0.0.4

1024

48.0.0.4

15

8.010000

8

1

16.0.0.4

1025

48.0.0.4

16

8.030944

8

2

16.0.0.4

1025

48.0.0.4

17

9.010000

9

1

16.0.0.5

1024

48.0.0.5

18

9.030944

9

2

16.0.0.5

1024

48.0.0.5

19

10.010000

a

1

16.0.0.5

1025

48.0.0.5

20

10.030944

a

2

16.0.0.5

1025

48.0.0.5

4.6. 混合使用HTTP和DNS模板

下面的示例组合了HTTP和DNS模板的元素:

- duration : 1.0
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.10"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.3"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 1
          udp_aging      : 1
  mac        : [0x00,0x00,0x00,0x01,0x00,0x00]
  cap_ipg    : true
  cap_info :
     - name: cap2/dns.pcap
       cps : 10.0                        1
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_http_browsing_0.pcap
       cps : 2.0                         1
       ipg : 10000
       rtt : 10000
       w   : 1

1 两个模板的CPS相同。

这会产生以下输出:

Table 20. DNS ipg from pcap file
pkttime sectemplatefidflow-pkt-idclient_ipclient_portserver_ipdesc

1

0.010000

0

1

1

16.0.0.1

1024

48.0.0.1

2

0.030944

0

1

2

16.0.0.1

1024

48.0.0.1

3

0.093333

1

2

1

16.0.0.2

1024

48.0.0.2

4

0.104362

1

2

2

16.0.0.2

1024

48.0.0.2

5

0.115385

1

2

3

16.0.0.2

1024

48.0.0.2

6

0.115394

1

2

4

16.0.0.2

1024

48.0.0.2

7

0.126471

1

2

5

16.0.0.2

1024

48.0.0.2

8

0.126484

1

2

6

16.0.0.2

1024

48.0.0.2

9

0.137530

1

2

7

16.0.0.2

1024

48.0.0.2

10

0.148609

1

2

8

16.0.0.2

1024

48.0.0.2

11

0.148621

1

2

9

16.0.0.2

1024

48.0.0.2

12

0.148635

1

2

10

16.0.0.2

1024

48.0.0.2

13

0.159663

1

2

11

16.0.0.2

1024

48.0.0.2

14

0.170750

1

2

12

16.0.0.2

1024

48.0.0.2

15

0.170762

1

2

13

16.0.0.2

1024

48.0.0.2

16

0.170774

1

2

14

16.0.0.2

1024

48.0.0.2

17

0.176667

0

3

1

16.0.0.3

1024

48.0.0.3

18

0.181805

1

2

15

16.0.0.2

1024

48.0.0.2

19

0.181815

1

2

16

16.0.0.2

1024

48.0.0.2

20

0.192889

1

2

17

16.0.0.2

1024

48.0.0.2

21

0.192902

1

2

18

16.0.0.2

1024

48.0.0.2

Template_id :0:表示DNS模板1:表示HTTP模板

 

 如上所述,输出在1秒内显示了两个DNS流和十个HTTP流。

4.7. EMIX流YAML

EMIX流量包括多流量模板的组合。此EMIX流量配置文件用作我们的ASR1k/ISR-G2基准的流量配置文件。

流量是从带有Pagent的Spirent C100记录的,该Pagent从客户端和服务器端引入了10msec延迟。

- duration : 0.1
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.1.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.20.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 0
          udp_aging      : 0
  mac        : [0x0,0x0,0x0,0x1,0x0,0x00]
  cap_ipg    : true
  cap_info :
     - name: avl/delay_10_http_get_0.pcap
       cps : 404.52
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_http_post_0.pcap
       cps : 404.52
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_https_0.pcap
       cps : 130.8745
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_http_browsing_0.pcap
       cps : 709.89
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_exchange_0.pcap
       cps : 253.81
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_mail_pop_0.pcap
       cps : 4.759
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_mail_pop_1.pcap
       cps : 4.759
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_mail_pop_2.pcap
       cps : 4.759
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_oracle_0.pcap
       cps : 79.3178
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_rtp_160k_full.pcap
       cps : 2.776
       ipg : 10000
       rtt : 10000
       w   : 1
       one_app_server : false
       plugin_id : 1           2
     - name: avl/delay_10_rtp_250k_full.pcap
       cps : 1.982
       ipg : 10000
       rtt : 10000
       w   : 1
       one_app_server : false
       plugin_id : 1
     - name: avl/delay_10_smtp_0.pcap
       cps : 7.3369
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_smtp_1.pcap
       cps : 7.3369
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_smtp_2.pcap
       cps : 7.3369
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_video_call_0.pcap
       cps : 11.8976
       ipg : 10000
       rtt : 10000
       w   : 1
       one_app_server : false
     - name: avl/delay_10_sip_video_call_full.pcap
       cps : 29.347
       ipg : 10000
       rtt : 10000
       w   : 1
       plugin_id : 2   1
       one_app_server : false
     - name: avl/delay_10_citrix_0.pcap
       cps : 43.6248
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_dns_0.pcap
       cps : 1975.015
       ipg : 10000
       rtt : 10000
       w   : 1

1 SIP协议插件,用于根据数据流替换控制流中的IP/端口。

2 RTSP协议插件,用于根据数据流替换控制流中的IP/端口。

4.8.运行示例

TRex命令通常包括以下主要参数,但只有-f是必须的。

[bash]>sudo ./t-rex-64 -f <traffic_yaml> -m <multiplier>  -d <duration>  -l <latency test rate>  -c <cores>

可以找到完整的命令行参考在here

4.8.1.TRex命令行示例

Simple HTTP 1Gb/sec for 100 sec

[bash]>sudo ./t-rex-64 -f cap2/simple_http.yaml -c 4 -m 100 -d 100

Simple HTTP 1Gb/sec with latency for 100 sec

[bash]>sudo ./t-rex-64 -f cap2/simple_http.yaml -c 4 -m 100 -d 100 -l 1000

EMIX 35Gb/sec traffic

[bash]>sudo ./t-rex-64 -f avl/sfr_delay_10_1g.yaml -c 4 -m 35 -d 100 -p

EMIX 20Gb/sec traffic with latency

[bash]>sudo ./t-rex-64 -f avl/sfr_delay_10_1g.yaml -c 4 -m 20 -d 100 -l 1000

EMIX ipv6 20Gb/sec traffic with latency

[bash]>sudo ./t-rex-64 -f avl/sfr_delay_10_1g_no_bundeling.yaml -c 4 -m 20 -d 100 -l 1000 --ipv6

Simple HTTP 1Gb/sec with NAT translation support

[bash]>sudo ./t-rex-64 -f cap2/simple_http.yaml -c 4 -m 100 -d 100 -l 1000 --learn-mode 1

IMIX 1G/sec ,1600 flows

[bash]>sudo ./t-rex-64 -f cap2/imix_fast_1g.yaml -c 4 -m 1 -d 100 -l 1000

IMIX 1Gb/sec,100K flows

[bash]>sudo ./t-rex-64 -f cap2/imix_fast_1g_100k.yaml -c 4 -m 1 -d 100 -l 1000

64bytes ~1Gb/sec,1600 flows

[bash]>sudo ./t-rex-64 -f cap2/imix_64.yaml -c 4 -m 1 -d 100 -l 1000

4.9.TRex包提供的流量配置文件

namedescription

cap2/dns.yaml

simple dns pcap file

cap2/http_simple.yaml

simple http cap file

avl/sfr_delay_10_1g_no_bundeling.yaml

来自Avalanche - Spirent的EMIX流量捕获的配置文件,没有捆绑支持RTT=10msec(延迟机),这可以与-ipv6和-learn模式一起使用

avl/sfr_delay_10_1g.yaml

从Avalanche - Spirent获取前端EMIX流量的配置文件,支持绑定RTT=10msec(延迟机),当m=1时,它被标准化为1Gb/sec

avl/sfr_branch_profile_delay_10.yaml

Avalanche - Spirent获取EMIX流配置文件的分支,支持绑定,RTT=10msec,在m=1时归一化为1Gb/sec

cap2/imix_fast_1g.yaml

imix profile with 1600 flows normalized to 1Gb/sec.

cap2/imix_fast_1g_100k_flows.yaml

imix profile with 100k flows normalized to 1Gb/sec.

cap2/imix_64.yaml

64byte UDP packets profile

4.10.在有状态模式下模拟无状态流量

!注意:TRex还支持真正的无状态流量生成,如果你正在寻找无状态流量,请访问以下链接TRex Stateless Support

有了这个特性,你可以“重复”创建无状态的、类似IXIA的流。在注入由limit定义的流数量之后,TRex重复生成相同的流。如果所有模板都有限制,CPS将在一段时间后为零,因为在第一次迭代之后没有新的流。

IMIX 支持:

[bash]>sudo ./t-rex-64 -f cap2/imix_64.yaml  -d 1000 -m 40000  -c 4 -p

!注意:这里使用-p参数指定从两个接口发送客户端数据包。(通常仅从客户端端口发送。)使用此选项,端口由客户端IP选择。一条流的所有报文都从同一个接口发出。这可能会产生路由问题,因为客户端的IP将从服务器接口发送。配置策略路由可以解决这个问题,但不能在所有情况下都使用。所以要小心使用这个-p选项。

                                                        imix_64.yaml

 cap_info :
     - name: cap2/udp_64B.pcap
       cps   : 1000.0
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 1000    1

1 在循环中重复生成流,从此类型生成1000个流。在本例中,udp_64B只包含一个数据包。

pcap文件“cap2/udp_64B。pcap”只包含一个64B的数据包。这个配置文件创建了1000个流,这些流将按照如下方式重复:f1, f2, f3 ....f1000, f1, f2…其中当-m=1时PPS == CPS 。在本例中,当-m==1时,PPS=1000。可以混合使用无状态模板和有状态模板。

                               Imix YAML cap2/imix_fast_1g.yaml example

- duration : 3
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.255.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 0
          udp_aging      : 0
  mac        : [0x0,0x0,0x0,0x1,0x0,0x00]
  cap_info :
     - name: cap2/udp_64B.pcap
       cps   : 90615
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 199
     - name: cap2/udp_576B.pcap
       cps   : 64725
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 199
     - name: cap2/udp_1500B.pcap
       cps   : 12945
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 199
     - name: cap2/udp_64B.pcap
       cps   : 90615
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 199
     - name: cap2/udp_576B.pcap
       cps   : 64725
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 199
     - name: cap2/udp_1500B.pcap
       cps   : 12945
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 199

这些模板是为了更好地利用DRAM并获得更好的性能。

                                Imix YAML cap2/imix_fast_1g_100k_flows.yaml example

- duration : 3
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.255.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 0
          udp_aging      : 0
  mac        : [0x0,0x0,0x0,0x1,0x0,0x00]
  cap_info :
     - name: cap2/udp_64B.pcap
       cps   : 90615
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 16666
     - name: cap2/udp_576B.pcap
       cps   : 64725
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 16666
     - name: cap2/udp_1500B.pcap
       cps   : 12945
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 16667
     - name: cap2/udp_64B.pcap
       cps   : 90615
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 16667
     - name: cap2/udp_576B.pcap
       cps   : 64725
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 16667
     - name: cap2/udp_1500B.pcap
       cps   : 12945
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 16667

 下面的简单模拟示例包括3个流,CPS=10。

$more cap2/imix_example.yaml
#
# Simple IMIX test (7x64B, 5x576B, 1x1500B)
#
- duration : 3
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.255.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 0
          udp_aging      : 0
  mac        : [0x0,0x0,0x0,0x1,0x0,0x00]
  cap_info :
     - name: cap2/udp_64B.pcap
       cps   : 10.0
       ipg   : 10000
       rtt   : 10000
       w     : 1
       limit : 3                           1

1 流个数:3

[bash]>./bp-sim-64-debug -f cap2/imix_example.yaml  -o my.erf -v 3 > a.txt
Table 21. IMIX example limit=3
pkttime sectemplatefidflow-pkt-idclient_ipclient_portserver_ipdesc

1

0.010000

0

1

1

16.0.0.1

1024

48.0.0.1

2

0.210000

0

2

0

16.0.0.2

1024

48.0.0.2

3

0.310000

0

3

0

16.0.0.3

1024

48.0.0.3

4

0.310000

0

1

0

16.0.0.1

1024

48.0.0.1

5

0.510000

0

2

0

16.0.0.2

1024

48.0.0.2

6

0.610000

0

3

0

16.0.0.3

1024

48.0.0.3

7

0.610000

0

1

0

16.0.0.1

1024

48.0.0.1

8

0.810000

0

2

0

16.0.0.2

1024

48.0.0.2

9

0.910000

0

1

0

16.0.0.1

1024

48.0.0.1

10

0.910000

0

3

0

16.0.0.3

1024

48.0.0.3

11

1.110000

0

2

0

16.0.0.2

1024

48.0.0.2

12

1.210000

0

3

0

16.0.0.3

1024

48.0.0.3

13

1.210000

0

1

0

16.0.0.1

1024

48.0.0.1

14

1.410000

0

2

0

16.0.0.2

1024

48.0.0.2

15

1.510000

0

1

0

16.0.0.1

1024

48.0.0.1

16

1.510000

0

3

0

16.0.0.3

1024

48.0.0.3

17

1.710000

0

2

0

16.0.0.2

1024

48.0.0.2

18

1.810000

0

3

0

16.0.0.3

1024

48.0.0.3

19

1.810000

0

1

0

16.0.0.1

1024

48.0.0.1

20

2.010000

0

2

0

16.0.0.2

1024

48.0.0.2

21

2.110000

0

1

0

16.0.0.1

1024

48.0.0.1

22

2.110000

0

3

0

16.0.0.3

1024

48.0.0.3

23

2.310000

0

2

0

16.0.0.2

1024

48.0.0.2

24

2.410000

0

3

0

16.0.0.3

1024

48.0.0.3

25

2.410000

0

1

0

16.0.0.1

1024

48.0.0.1

26

2.610000

0

2

0

16.0.0.2

1024

48.0.0.2

27

2.710000

0

1

0

16.0.0.1

1024

48.0.0.1

28

2.710000

0

3

0

16.0.0.3

1024

48.0.0.3

29

2.910000

0

2

0

16.0.0.2

1024

48.0.0.2

30

3.010000

0

3

0

16.0.0.3

1024

48.0.0.3

31

3.010000

0

1

0

16.0.0.1

1024

48.0.0.1

  • Average CPS: 每秒10个数据包(3秒30个数据包)。

  • 如配置文件中指定的,总共有3个流。

  • 如配置文件中指定的那样,流以突发形式出现。

 4.11.Clients/Servers IP分配方案

目前,客户端和服务器共用一个全局IP池。它服务于所有模板。所有模板都将从这个全局池中分配IP。每个TRex客户端/服务器“双端口”(端口对,例如端口0是客户端的,端口1是服务器的)都有自己的生成器偏移量,从配置文件中获取。偏移量称为dual_port_mask。

示例:

generator :
  distribution : "seq"
  clients_start : "16.0.0.1"
  clients_end   : "16.0.0.255"
  servers_start : "48.0.0.1"
  servers_end   : "48.0.0.255"
  dual_port_mask : "1.0.0.0"                    1
  tcp_aging      : 0
  udp_aging      : 0

1 每个网口对添加的偏移量。“dual_port_mask”的功能是使每个网口的静态路由配置成为可能。有了这个偏移量,不同的网口有不同的前缀。

例如,对于四个网口,TRex将生成以下ip范围:

port pair-0 (0,1) --> C (16.0.0.1-16.0.0.128  ) <-> S( 48.0.0.1 - 48.0.0.128)
port pair-1 (2,3) --> C (17.0.0.129-17.0.0.255  ) <-> S( 49.0.0.129 - 49.0.0.255) + mask  ("1.0.0.0")
  • Number of clients : 255

  • Number of servers : 255

  • 由" dual_port_mask "(1.0.0.0)定义的偏移量为每个网口对添加,但客户端/服务器的总数将保持不变(255),并且不依赖于网口的数量。

  • TCP/UDP老化是指将套接字返回到池所花费的时间。当客户端数量非常少且模板定义的持续时间非常长时,需要使用此选项。

如果" dual_port_mask "被设置为0.0.0.0,两个端口对将使用相同的ip范围。例如,使用四个端口,我们将得到以下ip范围:

 port pair-0 (0,1) --> C (16.0.0.1-16.0.0.128  ) <-> S( 48.0.0.1 - 48.0.0.128)
 port pair-1 (2,3) --> C (16.0.0.129-16.0.0.255  ) <-> S( 48.0.0.129 - 48.0.0.255)

此模式的路由器配置:

        PBR不是必需的。下面的配置就足够了。

interface TenGigabitEthernet1/0/0     1
 mac-address 0000.0001.0000
 mtu 4000
 ip address 11.11.11.11 255.255.255.0
!
`
interface TenGigabitEthernet1/1/0      2
 mac-address 0000.0001.0000
 mtu 4000
 ip address 22.11.11.11 255.255.255.0
!
interface TenGigabitEthernet1/2/0      3
 mac-address 0000.0001.0000
 mtu 4000
 ip address 33.11.11.11 255.255.255.0
!
interface TenGigabitEthernet1/3/0       4
 mac-address 0000.0001.0000
 mtu 4000
 ip address 44.11.11.11 255.255.255.0
 load-interval 30


ip route 16.0.0.0 255.0.0.0 22.11.11.12
ip route 48.0.0.0 255.0.0.0 11.11.11.12
ip route 17.0.0.0 255.0.0.0 44.11.11.12
ip route 49.0.0.0 255.0.0.0 33.11.11.12

1 Connected to TRex port 0 (client side)  

2 Connected to TRex port 1 (server side)  

3 Connected to TRex port 2 (client side)  

4 Connected to TRex port 3 (server side)

One server:

      为了支持一个模板只有一个服务器,可以添加关键字“server_addr”。每个端口对将获得不同的服务器IP(根据“dual_port_mask”偏移量)。

- name: cap2/dns.pcap
  cps : 1.0
  ipg : 10000
  rtt : 10000
  w   : 1
  server_addr : "48.0.0.1"   1
  one_app_server : true      2

1 Server IP.

2 使能一个服务端模式。

在TRex服务器中,您将看到以下统计信息。

    Active-flows    :    19509  Clients :      504   Socket-util : 0.0670 %
    Open-flows      :   247395  Servers :    65408   Socket :    21277 Socket/Clients :  42.2

!注意:

  • 与老的生成器YAML格式没有向后兼容性。
  • 当使用-p选项时,TRex将不遵守静态路由规则。服务器端通信可以从客户端(端口0)发送,反之亦然。如果使用-p选项,则必须配置基于策略的路由,使所有流量从路由器端口1传递到路由器端口2,反之亦然。
  • VLAN特性不符合静态路由规则。如果使用该特性,还需要基于策略的路由规则来实现报文在VLAN0和VLAN1之间的传递。
  • 限制:当使用带有插件(集)的模板时,服务器的数量必须大于客户端的数量。
4.11.1.更多关于IP分配的详细信息

每次创建新流时,TRex都会分配新的客户端IP/端口和服务器IP。这个三元组在活动流中应该是不同的。

目前,IP分配只支持顺序分配。这意味着连续流的IP地址只增加一个。

 例如,如果我们有两个IP地址池:16.0.0.1和16.0.0.2,客户端src/端口对的分配将是

16.0.0.0.1 [1024]
16.0.0.0.2 [1024]
16.0.0.0.1 [1025]
16.0.0.0.2 [1025]
16.0.0.0.1 [1026]
16.0.0.0.2 [1026]
...
4.11.2.如何确定每秒包数(PPS)和每秒比特数(BPS)
  • 让我们看一个包含4个数据包的流示例。
  • 绿色圆圈表示每个流的第一个数据包。
  • 客户端ip池从16.0.0.1开始,按顺序分配。

$Total PPS = \sum_{k=0}^{n}(CPS_{k}\times {flow\_pkts}_{k})$

$Concurrent flow = \sum_{k=0}^{n}CPS_{k}\times flow\_duration_k $

以上公式可用于计算PPS。TRex吞吐量取决于上面计算的PPS和m的值(作为命令行参数-m给出的乘数)。

m值是pcap文件总CPS的乘数。pcap文件的CPS配置在yaml文件里。

下面是一个简单的例子。

cap_info :
     - name: avl/first.pcap  < -- has 2 packets
       cps : 102.0
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/second.pcap < -- has 20 packets
       cps : 50.0
       ipg : 10000
       rtt : 10000
       w   : 1

吞吐量:m*(CPS_1*flow_pkts+CPS_2*flow_pkts)

如果m设为1,总PPS是:102*2+50*20 = 1204 PPS.

BPS取决于数据包大小。您可以参考您的数据包大小并获得BPS = PPS*Packet_size。

4.11.3.模板分配和未来计划
  • 1) per-template 生成

可以定义多个生成器配置并将其分配给不同的pcap文件模板。 YAML的配置是这样的:

 generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.1.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.20.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 0
          udp_aging      : 0
          generator_clients :
            - name : "c1"
              distribution : "random"
              ip_start : "38.0.0.1"
              ip_end : "38.0.1.255"
              clients_per_gb : 201
              min_clients    : 101
              dual_port_mask : "1.0.0.0"
              tcp_aging      : 0
              udp_aging      : 0
          generator_servers :
             - name : "s1"
               distribution : "seq"
               ip_start : "58.0.0.1"
               ip_end : "58.0.1.255"
               dual_port_mask : "1.0.0.0"
 cap_info :
     - name: avl/delay_10_http_get_0.pcap
       cps : 404.52
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_http_post_0.pcap
       client_pool : "c1"
       server_pool : "s1"
       cps : 404.52
       ipg : 10000
       rtt : 10000
       w   : 1
  • 2) 未来将支持更多的ip分布方式(distribution)(比如正态分布)

目前只支持顺序和随机。

  • 3) 将支持元组池的柱状图

此特性将为用户在定义IP生成器时提供更大的灵活性。

generator :
          client_pools:
             - name         : "a"
              distribution : "seq"
              clients_start : "16.0.0.1"
              clients_end   : "16.0.1.255"
              tcp_aging      : 0
              udp_aging      : 0

             - name         : "b"
              distribution : "random"
              clients_start : 26.0.0.1"
              clients_end   : 26.0.1.255"
              tcp_aging      : 0
              udp_aging      : 0

             - name         : "c"
                 pools_list :
                    - name:"a"
                      probability: 0.8
                    - name:"b"
                      probability: 0.2

4.12.抖动和延迟测量

要使用独立流(SCTP或ICMP)测量抖动/延迟,请使用-l <Hz>,其中Hz定义每秒从每个端口发送的数据包数。此选项测量延迟和抖动。我们可以使用延迟测量--l-pkt-mode <0-3>选项定义流量的类型。

Option IDType

0

default, SCTP packets

1

ICMP echo request packets from both sides

2

从一端发送CMP请求,并匹配另一端的ICMP响应。 如果你的DUT从外部丢弃流量,并且您需要打开pin孔来使外部流量进入(例如在测试防火墙时),这一点特别有用。

3

Send ICMP request packets with a constant 0 sequence number from both sides.

 4.12.1.抖动和延迟输出解释

启用延迟统计的trex实用程序的命令输出如下所示:

 -Latency stats enabled
 Cpu Utilization : 0.2 %  1               5         6         7          8
 if|   tx_ok , rx_ok  , rx check ,error,      latency (usec) ,    Jitter       max window
   |         ,    2 ,     3  , 4 ,  average   ,   max  ,    (usec)
 ------------------------------------------------------------------------------------------------------
 0 |     1002,    1002,         0,    0,        51  ,      69,       3      |   0  69  67   ...
 1 |     1002,    1002,         0,    0,        53  ,     196,       2      |   0  196  53  ...
 2 |     1002,    1002,         0,    0,        54  ,      71,       5      |   0  71  69   ...
 3 |     1002,    1002,         0,    0,        53  ,     193,       2      |   0  193  52  ...

1 Rx检查和延迟线程CPU利用率。

2 端口0上的Tx_ok应该等于端口1上的rx_ok,反之亦然,对于所有成对的端口。

3 Rx检查率 --rx-check。有关Rx检查的更多信息,请参阅Flow order/latency verification

4 检测到的数据包错误数。(错误原因, see stateful_rx_core.cpp)

5 自启动以来所有样本的平均延迟(以微秒为单位)。

6 自启动以来所有样本的最大延迟(以微秒为单位)。

7 根据RC3550附录a .8的抖动计算结果。

8 500毫秒滑动窗口内的最大延迟。根据终端宽度,每个端口显示的值很少。最老的值在左边,最新的值(最近的500msec样本)在右边。这有助于在一段时间后识别高延迟清除的峰值。最大延迟(<6>)是整个测试持续时间内的最大值。为了更好地理解这一点,使用延迟选项(-l)运行TRex并观察结果。

5.高级特性

!注意:已弃用有状态模式支持。使用advance status (ASTF)代替。

5.1.VLAN (dot1q) 支持

为了向TRex生成的所有流量添加VLAN标签,请在平台配置文件的每个端口部分添加“VLAN”关键字,如Platform YAML 部分所述。

你可以为每个端口指定不同的VLAN标签,或者仅在某些端口上使用VLAN。

一个有用的应用场景可能是在实验室设置中,你有一个TRex和许多DUT,并且你希望在每次运行时测试不同的DUT,而不改变电缆连接。你可以将每个DUT放在自己的VLAN上,并在每次运行时使用具有不同VLAN的不同TRex平台配置文件。

5.2.在流量不对称的情况下,利用最大端口带宽

!注意:如果你想要简单的VLAN支持,这可能不是应该使用的特性。该特性用于负载均衡。要配置VLAN支持,请参见 Platform YAML 部分中的“VLAN”字段。

VLAN Trunk TRex特性的目的是解决非对称(example: Asymmetric EMIX profile)流量配置文件对路由器端口带宽的限制。

从端口的角度来看,该特性通过路由器子接口将非对称流量转换为对称流量。这需要TRex在两个vlan上发送流量,如下所述。

                            YAML format - This goes in the traffic YAML file.

 vlan       : { enable : 1  ,  vlan0 : 100 , vlan1 : 200 }

                                              Example

- duration : 0.1
  vlan       : { enable : 1  ,  vlan0 : 100 , vlan1 : 200 }   1

 1 启用负载均衡特性:vlan0==100, vlan1==200 完整文件示例请参见:scripts/cap2/ipv4_load_balance.yaml中的TRex源代码

问题定义:

       场景:具有两个端口和EMIX流量配置文件的TRex。

如果没有VLAN/子接口,所有客户端模拟流量都在端口0上发送,所有服务器端模拟流量(例如HTTP响应)都在端口1上发送。

TRex port 0 ( client) <-> [  DUT ] <-> TRex port 1 ( server)

没有VLAN的支持,流量是不对称的,10%的流量从端口0(client)发送,90%的流量从端口1(server)发送。port 1 达到带宽瓶颈了(10Gb/s限制)

                                     With VLAN/sub interfaces

TRex port 0 ( client VLAN0) <->  | DUT  | <-> TRex port 1 ( server-VLAN0)
TRex port 0 ( server VLAN1) <->  | DUT  | <-> TRex port 1 ( client-VLAN1)

在这种情况下,vlan0上的流量按照之前的顺序发送,而vlan1上的流量顺序相反(客户端流量在port1上发送,服务器流量在port0上发送)。TRex在vlan之间平均分配流。这将导致每个端口上的流量相等。

Router 配置:

   !
        interface TenGigabitEthernet1/0/0      1
         mac-address 0000.0001.0000
         mtu 4000
         no ip address
         load-interval 30
        !
        i
        interface TenGigabitEthernet1/0/0.100
         encapsulation dot1Q 100               2
         ip address 11.77.11.1 255.255.255.0
         ip nbar protocol-discovery
         ip policy route-map vlan_100_p1_to_p2 3
        !
        interface TenGigabitEthernet1/0/0.200
         encapsulation dot1Q 200               4
         ip address 11.88.11.1 255.255.255.0
         ip nbar protocol-discovery
         ip policy route-map vlan_200_p1_to_p2 5
        !
        interface TenGigabitEthernet1/1/0
         mac-address 0000.0001.0000
         mtu 4000
         no ip address
         load-interval 30
        !
        interface TenGigabitEthernet1/1/0.100
         encapsulation dot1Q 100
         ip address 22.77.11.1 255.255.255.0
         ip nbar protocol-discovery
         ip policy route-map vlan_100_p2_to_p1
        !
        interface TenGigabitEthernet1/1/0.200
         encapsulation dot1Q 200
         ip address 22.88.11.1 255.255.255.0
         ip nbar protocol-discovery
         ip policy route-map vlan_200_p2_to_p1
        !

        arp 11.77.11.12 0000.0001.0000 ARPA      6
        arp 22.77.11.12 0000.0001.0000 ARPA

        route-map vlan_100_p1_to_p2 permit 10    7
         set ip next-hop 22.77.11.12
        !
        route-map vlan_100_p2_to_p1 permit 10
         set ip next-hop 11.77.11.12
        !

        route-map vlan_200_p1_to_p2 permit 10
         set ip next-hop 22.88.11.12
        !
        route-map vlan_200_p2_to_p1 permit 10
         set ip next-hop 11.88.11.12
        !

1 主接口不能有IP地址

2 使能VLAN1

3 策略路由配置

4 使能VLAN2

5 策略路由配置

6 TRex目的端口MAC地址

7 策略路由规则

5.3.通过IP替换MAC地址

有了这个特性,TRex用IP地址替换MAC地址。

注意:此功能最初是由Cisco ISG组请求的。

                                                        Example

- duration: 0.1
  ...
  mac_override_by_ip: true

有几种模式:

  • 0,(传统值:false) -从端口配置/ARP查询中获取mac。这是默认模式。
  • 1,(传统值: true) -只替换客户端发送的报文中的源mac。
  • 2 -更换所有方向的mac。
5.3.1.v2.61及更早版本
  • 只接受布尔值(模式0和1)
  • MAC将由4个IP字节和TRex接口的MAC的最后2个字节组成。 例如,接口MAC为AA:BB:CC:DD:EE:FF, IP为1.2.3.4。 结果MAC = 01:02:03:04:EE:FF
 5.3.2.v2.62及更新版本
  • 增加模式2,替换所有方向的mac。
  • 为了向后兼容,接受布尔值。
  • MAC将由TRex接口的MAC的前2个字节组成,然后是4个IP字节。 例如,接口MAC为AA:BB:CC:DD:EE:FF, IP为1.2.3.4。 结果MAC = AA:BB:01:02:03:04

5.4.IPv6支持 

支持IPv6包括:

  1. 支持包含IPv6报文的pcap文件。
  2. 能够从包含IPv4数据包的pcap文件生成IPv6流量。 --ipv6命令行选项启用此特性。关键字src_ipv6和dst_ipv6指定IPv6地址的最高96位。例子:
 - duration : 10
    src_ipv6 : [0xFE80,0x0232,0x1002,0x0051,0x0000,0x0000]
    dst_ipv6 : [0x2001,0x0DB8,0x0003,0x0004,0x0000,0x0000]
    generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.1.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.255"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 1
          udp_aging      : 1

 !注意:src_ipv6和dst_ipv6应该在配置root范围,而不是在IP池中。

IPv6地址是通过将典型的IPv4地址放入最不重要的32位,并将src_ipv6/dst_ipv6关键字中提供的值复制到最重要的96位来形成的。如果不指定src_ipv6和dst_ipv6,则默认为形成ipv4兼容地址(最有效的96位为零)。

所有插件都支持IPv6。

Example:

[bash]>sudo ./t-rex-64 -f cap2l/sfr_delay_10_1g.yaml -c 4 -p -l 100 -d 100000 -m 30  --ipv6

限制:

  • TRex不能同时生成IPv4和IPv6流量。
  • 即使使用仅包含ipv6数据包的pcap文件,也必须指定--ipv6开关。

Router 配置:

interface TenGigabitEthernet1/0/0
 mac-address 0000.0001.0000
 mtu 4000
 ip address 11.11.11.11 255.255.255.0
 ip policy route-map p1_to_p2
 load-interval 30
 ipv6 enable   ==> IPv6                                 1
 ipv6 address 2001:DB8:1111:2222::1/64                  
 ipv6 policy route-map ipv6_p1_to_p2                    2
!


ipv6 unicast-routing                                    3

ipv6 neighbor 3001::2 TenGigabitEthernet0/1/0 0000.0002.0002   4
ipv6 neighbor 2001::2 TenGigabitEthernet0/0/0 0000.0003.0002

route-map ipv6_p1_to_p2 permit 10                              5
 set ipv6 next-hop 2001::2
!
route-map ipv6_p2_to_p1 permit 10
 set ipv6 next-hop 3001::2
!


asr1k(config)#ipv6 route 4000::/64 2001::2
asr1k(config)#ipv6 route 5000::/64 3001::2

1 使能IPv6

2 添加策略路由

3 使能IPv6路由

4 MAC地址设置。应该是对应TRex 接口MAC。

5 策略路由配置

5.5.Client集群配置

TRex支持使用多个DUT测试复杂拓扑,使用称为“客户端集群”的特性。这个特性允许指定TRex模拟客户端的分布。

考虑以下拓扑:

有两个DUT集群。使用配置文件,你可以将TRex模拟客户机划分为组,并定义它们如何在DUT集群之间分布。

组配置包括:

  • IP开始范围
  • IP结束范围
  • 发起端配置:影响从客户端发送的数据包的参数。
  • 响应端配置:影响从服务器端发送的数据包的参数。

!注意:重要的是要理解,这是对每个配置文件配置的客户端生成器的补充。它只定义客户端如何在集群之间分布。

在下面的示例中,配置文件定义了客户机生成器。

[bash]>cat cap2/dns.yaml
- duration : 10.0
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.255"
          dual_port_mask : "1.0.0.0"
  cap_info :
     - name: cap2/dns.pcap
       cps : 1.0
       ipg : 10000
       rtt : 10000
       w   : 1

目标:

  • 分别使用4台和3台设备创建两个集群。
  • 80%的流量发送到上面的集群,20%的流量发送到下面的集群。通过MAC地址或IP地址指定要发送数据包的DUT。(下面以MAC地址为例进行说明。示例后面的说明说明了如何更改为基于ip的。)

创建如下集群配置文件:

#
# Client configuration example file
# The file must contain the following fields
#
# 'vlan'   - if the entire configuration uses VLAN,
#            each client group must include vlan
#            configuration
#
# 'groups' - each client group must contain range of IPs
#            and initiator and responder section
#            'count' represents the number of different DUTs
#            in the group.
#

# 'true' means each group must contain VLAN configuration. 'false' means no VLAN config allowed.
vlan: true

groups:

-    ip_start  : 16.0.0.1
     ip_end    : 16.0.0.204
     initiator :
                 vlan    : 100
                 dst_mac : "00:00:00:01:00:00"
     responder :
                 vlan    : 200
                 dst_mac : "00:00:00:02:00:00"

     count     : 4

-    ip_start  : 16.0.0.205
     ip_end    : 16.0.0.255
     initiator :
                 vlan    : 101
                 dst_mac : "00:00:01:00:00:00"

     responder:
                 vlan    : 201
                 dst_mac : "00:00:02:00:00:00"

     count     : 3

上述配置将255个客户机的生成器范围划分为两个集群。客户端配置文件中所有组的ip范围必须覆盖流量配置文件中所有的客户端ip范围。

MAC地址将以递增方式分配,在“count”地址之后加上一个圈。 

示例:

Initiator side (packets with source in 16.x.x.x net):

  • 16.0.0.1 → 48.x.x.x - dst_mac: 00:00:00:01:00:00 vlan: 100

  • 16.0.0.2 → 48.x.x.x - dst_mac: 00:00:00:01:00:01 vlan: 100

  • 16.0.0.3 → 48.x.x.x - dst_mac: 00:00:00:01:00:02 vlan: 100

  • 16.0.0.4 → 48.x.x.x - dst_mac: 00:00:00:01:00:03 vlan: 100

  • 16.0.0.5 → 48.x.x.x - dst_mac: 00:00:00:01:00:00 vlan: 100

  • 16.0.0.6 → 48.x.x.x - dst_mac: 00:00:00:01:00:01 vlan: 100

Responder side (packets with source in 48.x.x.x net):

  • 48.x.x.x → 16.0.0.1 - dst_mac(from responder) : "00:00:00:02:00:00" , vlan:200

  • 48.x.x.x → 16.0.0.2 - dst_mac(from responder) : "00:00:00:02:00:01" , vlan:200

等等。

DUT设备的MAC地址必须递增。另一种选择是替换:

dst_mac : <ip-address>
with:
next_hop : <ip-address>

例如,配置文件中的第一个组是:

-    ip_start  : 16.0.0.1
     ip_end    : 16.0.0.204
     initiator :
                 vlan     : 100
                 next_hop : 1.1.1.1
                 src_ip   : 1.1.1.100
     responder :
                 vlan     : 200
                 next_hop : 2.2.2.1
                 src_ip   : 2.2.2.100

     count     : 4

在这种情况下,TRex尝试使用ARP解析以下地址:

1.1.1.1, 1.1.1.2, 1.1.1.3, 1.1.1.4 (and the range 2.2.2.1-2.2.2.4) 

如果不是所有的ip都被解析,TRex退出并显示一条错误消息。 

src_ip用于发送免费ARP(gratuitous ARP),并在ARP请求中填写相关字段。如果没有src_ip, TRex将在平台配置文件(/etc/trex_cfg.yaml)的相关端口部分中查找源IP。如果没有找到,则TRex退出并显示错误消息。

如果提供了客户端配置文件,TRex将忽略平台配置文件中的dest_mac和default_gw参数。

现在,流看起来像这样:

Initiator side (packets with source in 16.x.x.x net):

  • 16.0.0.1 → 48.x.x.x - dst_mac: MAC of 1.1.1.1 vlan: 100

  • 16.0.0.2 → 48.x.x.x - dst_mac: MAC of 1.1.1.2 vlan: 100

  • 16.0.0.3 → 48.x.x.x - dst_mac: MAC of 1.1.1.3 vlan: 100

  • 16.0.0.4 → 48.x.x.x - dst_mac: MAC of 1.1.1.4 vlan: 100

  • 16.0.0.5 → 48.x.x.x - dst_mac: MAC of 1.1.1.1 vlan: 100

  • 16.0.0.6 → 48.x.x.x - dst_mac: MAC of 1.1.1.2 vlan: 100

Responder side (packets with source in 48.x.x.x net):

  • 48.x.x.x → 16.0.0.1 - dst_mac: MAC of 2.2.2.1 , vlan:200

  • 48.x.x.x → 16.0.0.2 - dst_mac: MAC of 2.2.2.2 , vlan:200

!注意:重要的是要理解IP到MAC的联系(基于MAC或基于IP的配置)是在开始时完成的,并且永远不会更改。例如,基于mac的配置:

  • 源IP地址为16.0.0.2的报文VLAN 总是100和dst 总是MAC 00:00:00:01:00:01。
  • 目的IP地址为16.0.0.2的数据包VLAN 始终是200和dst MAC 00:00:00:02:00:01。

因此,您可以准确地预测哪个数据包(以及有多少数据包)将进入哪个DUT。

Usage:

[bash]>sudo ./t-rex-64 -f cap2/dns.yaml --client_cfg my_cfg.yaml
5.5.1.集群模式下的延迟

延迟流客户端IP取自默认客户端池中的第一个IP。每个双端口将有一个客户端IP。在集群配置的情况下,这是一个限制,因为你可以使用具有许多路径的拓扑结构。

                                                               Traffic profile

- duration : 10.0
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.255"
          dual_port_mask : "1.0.0.0"
  cap_info :
     - name: cap2/dns.pcap
       cps : 1.0
       ipg : 10000
       rtt : 10000
       w   : 1

                                                               Cluster profile

vlan: true

groups:

-    ip_start  : 16.0.0.1
     ip_end    : 16.0.0.204
     initiator :
                 vlan    : 100
                 dst_mac : "00:00:00:01:00:00"
     responder :
                 vlan    : 200
                 dst_mac : "00:00:00:02:00:00"

     count     : 4

 例如,在本例中,16.0.0.1→48.0.0.1 ICMP将是延迟流。此流的集群配置将取自集群文件(VLAN=100, dst_mac: "00:00:00:01:00:00")。

5.5.2.集群示例

在本例中,我们有一个带有四个10gb接口的DUT和一个带有两个40Gb/秒接口的TRex,我们希望将流量从2个TRex接口转换为4个DUT接口。拓扑结构如下图所示

 对于这种拓扑,创建了以下流量和集群配置文件

                                                      Traffic profile


- duration : 10.0
  generator :
          distribution : "seq"
          clients_start : "12.1.1.1"      1
          clients_end   : "12.1.1.1"
          servers_start : "13.1.1.1"
          servers_end   : "13.1.1.1"
          dual_port_mask : "0.1.0.0"
          generator_clients :
            - name : "c1"                   2
              distribution : "seq"
              ip_start : "12.1.1.2"
              ip_end :   "12.1.1.255"
            - name : "c2"
              distribution : "seq"          3
              ip_start : "12.1.2.1"
              ip_end :   "12.1.2.255"
          generator_servers :
             - name : "s1"
               distribution : "seq"
               ip_start : "13.1.1.2"
               ip_end :   "13.1.1.255"
             - name : "s2"
               distribution : "seq"
               ip_start : "13.1.2.1"
               ip_end :   "13.1.2.255"
  cap_ipg : true
  cap_info :
    - name: file10k.pcap
      client_pool : "c2"
      server_pool : "s2"
      cps : 1
      ipg : 20000
      rtt : 20000
      w   : 1
    - name: file10k.pcap
      client_pool : "c1"
      server_pool : "s1"
      cps : 1
      ipg : 20000
      rtt:  20000
      w   : 1

1 延时流为IP 12.1.1.1<→13.1.1.1/vlan=4050/next-hop=11.10.0.1

2 第一个client 池

3 第二个client池

                                                            Cluster profile


lan: true

groups:

-    ip_start  : 12.1.1.1         1
     ip_end    : 12.1.1.255
     initiator :
                 vlan     : 4050
                 next_hop : 11.10.0.1
                 src_ip   : 11.10.0.11
     responder :
                 vlan     : 4054
                 next_hop : 10.10.0.1
                 src_ip   : 10.10.0.11
     count     : 1

-    ip_start  : 12.1.2.1
     ip_end    : 12.1.2.255
     initiator :
                 vlan     : 4051
                 next_hop : 11.10.0.2
                 src_ip   : 11.10.0.11
     responder :
                 vlan     : 4055
                 next_hop : 10.10.0.2
                 src_ip   : 10.10.0.11
     count     : 1

1 所有来自客户端池和默认池的ip都应该映射到这个文件中,可以在集群文件中有更大的范围

下图显示了如何使用集群文件选择新的流src_ip/dest_ip/next-hop/vlan

 !注意:延迟流将只检查12.1.1.1/4050路径(一个被测设备接口),没有办法检查当前版本中所有端口的延迟

!注意:DUT应该有一条静态路由来将数据包从客户机转发到服务器,反之亦然,因为流量不在端口的同一子网中

一个流生成的例子

  1. 下一跳解析。TRex解析所有的下一跳选项,例如11.10.0.1/4050 11.11.0.1/4051
  2. 按CPS选择模板,每个模板的概率为50%。
  3. SRC_IP=12.1.1.2, DEST_IP=13.1.1.2。

  4. 为12.1.1.2分配src_port =⇒src_port=1025为client=12.1.1.2的第一个流。

  5. 关联集群池的下一跳。在本例中,12.1.1.2中包含如下信息:5.1客户端:VLAN=4050, MAC为11.10.0.1(发起者);5.2服务器端:VLAN=4054, MAC为10.10.0.1(响应者)

运行时使用这些-FirePower ,NAT学习,数据包校验

[bash]>sudo ./t-rex-64 -f profile.yaml --client_cfg cluster.yaml -m 10 -d 1000 -l 1000 --l-pkt-mode 2 --learn-mode 1 --checksum-offload

5.5.3.集群示例—四个端口

在这个例子中,TRex有两个双端口。我们可以使用流量掩码来区分ip范围。

                                  Cluster example with four ports

 概要文件与前一个类似,不同之处在于我们需要在集群文件中添加更多映射。可以在配置中的另一条路径上测试延迟。

                                                         Traffic profile


- duration : 10.0
  generator :
          distribution : "seq"
          clients_start : "12.1.1.1"
          clients_end   : "12.1.1.1"
          servers_start : "13.1.1.1"
          servers_end   : "13.1.1.1"
          dual_port_mask : "0.1.0.0"       1
          generator_clients :
            - name : "c1"
              distribution : "seq"
              ip_start : "12.1.1.2"
              ip_end :   "12.1.1.255"
            - name : "c2"
              distribution : "seq"
              ip_start : "12.1.2.1"
              ip_end :   "12.1.2.255"
          generator_servers :
             - name : "s1"
               distribution : "seq"
               ip_start : "13.1.1.2"
               ip_end :   "13.1.1.255"
             - name : "s2"
               distribution : "seq"
               ip_start : "13.1.2.1"
               ip_end :   "13.1.2.255"
  cap_ipg : true
  cap_info :
    - name: file10k.pcap
      client_pool : "c2"
      server_pool : "s2"
      cps : 1
      ipg : 20000
      rtt : 20000
      w   : 1
    - name: file10k.pcap
      client_pool : "c1"
      server_pool : "s1"
      cps : 1
      ipg : 20000
      rtt:  20000
      w   : 1

1 掩码是0.1.0.0

                                                               Cluster profile


lan: true

groups:

-    ip_start  : 12.1.1.1
     ip_end    : 12.1.1.255
     initiator :
                 vlan     : 4050
                 next_hop : 11.10.0.1
                 src_ip   : 11.10.0.11
     responder :
                 vlan     : 4054
                 next_hop : 10.10.0.1
                 src_ip   : 10.10.0.11
     count     : 1

-    ip_start  : 12.1.2.1
     ip_end    : 12.1.2.255
     initiator :
                 vlan     : 4051
                 next_hop : 11.10.0.2
                 src_ip   : 11.10.0.11
     responder :
                 vlan     : 4055
                 next_hop : 10.10.0.2
                 src_ip   : 10.10.0.11
     count     : 1

-    ip_start  : 12.2.1.1            1
     ip_end    : 12.2.1.255
     initiator :
                 vlan     : 4060
                 next_hop : 11.10.0.3
                 src_ip   : 11.10.0.11
     responder :
                 vlan     : 4064
                 next_hop : 10.10.0.3
                 src_ip   : 10.10.0.11
     count     : 1


-    ip_start  : 12.2.2.1
     ip_end    : 12.2.2.255
     initiator :
                 vlan     : 4061
                 next_hop : 11.10.0.4
                 src_ip   : 11.10.0.11
     responder :
                 vlan     : 4065
                 next_hop : 10.10.0.4
                 src_ip   : 10.10.0.11
     count     : 1

 1 我们添加了更多的集群,因为将生成更多的ip(+mask)

5.6.NAT支持

!注意:不支持有状态模式下的NAT。使用advance status (ASTF)代替。

TRex可以学习动态NAT/PAT转换。要启用此特性,请使用 --learn-mode <mode>

在命令行切换。为了学习NAT转换,TRex必须在每个流的第一个包中嵌入描述数据包属于哪个流的信息。TRex可以根据选择<mode>使用几种方法之一来完成此操作。

Mode 1:

        --learn-mode 1

        TCP flow:流信息嵌入在第一个TCP SYN的ACK中。

        UDP flow:流信息嵌入在流中的第一个数据包的IP标识字段中。

        这种模式是为使用防火墙测试NAT而开发的(通常不能与模式2一起工作)。在这种模式下,TRex还学习并补偿可能由DUT完成的TCP序列号随机化。TRex可以在连接的两个方向上学习和补偿seq num随机化。

Mode 2:

        --learn-mode 2

        流信息添加在一个特殊的IPv4选项头(8字节长0x10 id)中。此选项头仅添加到流中的第一个数据包。此模式不适用于带有IP选项的DUT(例如Cisco ASA防火墙)。

Mode 3:

        --learn-mode 3

        类似于模式1,但TRex不学习服务器→客户端方向的seq num随机化。这种模式可以提供比模式1更好的每秒连接数性能。但是对于所有现有的防火墙,模式1的cps速率是足够的。

5.6.1.示例

简单得HTTP流量

[bash]>sudo ./t-rex-64 -f cap2/http_simple.yaml -c 4  -l 1000 -d 100000 -m 30  --learn-mode 1

没有捆绑/ALG支持的EMIX流量

[bash]>sudo ./t-rex-64 -f avl/sfr_delay_10_1g_no_bundling.yaml -c 4  -l 1000 -d 100000 -m 10  --learn-mode 2

NAT终端计数:

-Global stats enabled
 Cpu Utilization : 0.6  %  33.4 Gb/core
 Platform_factor : 1.0
 Total-Tx        :       3.77 Gbps   NAT time out    :      917 1 (0 in wait for syn+ack) 5
 Total-Rx        :       3.77 Gbps   NAT aged flow id:        0 2
 Total-PPS       :     505.72 Kpps   Total NAT active:      163 3 (12 waiting for syn) 6
 Total-CPS       :      13.43 Kcps   Total NAT opened:    82677 4

1 TRex必须在流中发送下一个数据包,但尚未学习NAT转换的连接数。应该是0。通常,如果DUT丢弃流(可能是因为它无法处理连接的数量),则会看到一个不同于0的值。

2 到TRex接收到转换信息时,已经老化的流数量。除了0之外的值很少见。只有在DUT输入/输出队列中存在非常高的延迟时才会发生。

3 TRex在学习NAT转换前发送第一个报文的流个数。该值取决于每秒连接速率和往返时间。

4 TRex实例生命周期内的转换总数。如果模板是单向的,则可能与流的总数不同(因此不需要转换)。

5 在超时流之外,等待从SYN+ACK数据包学习TCP序列号随机化超时的数目,server→client。仅在--learn-mode 1可见。

6 在active nat会话之外,等待从SYN报文中学习转换的数目,client→server。仅在--learn-mode 1可见。

Cisco ASR1000系列配置:

       使用以下配置和 sfr_delay_10_1g_no_bundling.yaml 流量摘要进行功能测试。客户端地址范围为16.0.0.1 ~ 16.0.0.255

interface TenGigabitEthernet1/0/0            1
 mac-address 0000.0001.0000
 mtu 4000
 ip address 11.11.11.11 255.255.255.0
 ip policy route-map p1_to_p2
 ip nat inside                               2
 load-interval 30
!

interface TenGigabitEthernet1/1/0
 mac-address 0000.0001.0000
 mtu 4000
 ip address 11.11.11.11 255.255.255.0
 ip policy route-map p1_to_p2
 ip nat outside                              3
 load-interval 30

ip  nat pool my 200.0.0.0 200.0.0.255 netmask 255.255.255.0  4

ip nat inside source list 7 pool my overload
access-list 7 permit 16.0.0.0 0.0.0.255                      5

ip nat inside source list 8 pool my overload                 6
access-list 8 permit 17.0.0.0 0.0.0.255

1 必须连接到TRex客户端端口(路由器内部端口)

2 NAT inside

3 NAT outside

4 外部地址池

5 匹配TRex YAML客户端范围

6 在双端口TRex的情况下

限制:

  1. 路由器上没有IPv6-IPv6 NAT特性,因此该特性只对IPv4有效。
  2. 不支持NAT64。
  3. 不完全支持捆绑/插件。因此,sfr_delay_10.yaml 不能工作。使用sfr_delay_10_no_bundling.yaml。

   !注意:

  • --learn-verify是一个用于测试TRex学习机制的TRex调试机制。
  • 需要在DUT未配置NAT的情况下运行。检查inside_ip==outside_ip和inside_port==outside_port。

5.7.流顺序,时延校验

在正常模式下(未启用该功能),软件不检查接收到的流量。硬件(英特尔网卡)测试丢包发生在测试的最后。唯一的例外是延迟/抖动数据包。这就是TRex无法检查终止流量的特性(例如TCP Proxy)的原因之一。

要启用该特性,请在命令行选项中添加--rx-check <sample> ,<sample>其中是采样率。将被发送到软件进行校验的流的数量是(1/(sample_rate)。对于40Gb/秒的流量,你可以使用1/128的采样率。观察RX cpu利用率。

!注意:该特性将采样流的TTL更改为255,并期望接收TTL为254或255(一个路由跳)的数据包。如果你的设置中有多跳,请使用--hops将其更改为更高的值。如果在TRex客户端和TRex服务器端之间有多个路由器,则可能有多跳。

此功能能保证:

  • 数据包按顺序(从每个流的角度)离开DUT。
  • 没有丢包(不需要等待测试结束)。如果没有这个标志,你必须等待测试结束才能识别丢包,因为由于RTT的原因,TX和Rx之间总是存在差异。

                                                         Full example

[bash]>sudo ./t-rex-64 -f avl/sfr_delay_10_1g.yaml -c 4 -p -l 100 -d 100000 -m 30  --rx-check 128
Cpu Utilization : 0.1 %                                                                       1
 if|   tx_ok , rx_ok  , rx   ,error,    average   ,   max         , Jitter ,  max window
   |         ,        , check,     , latency(usec),latency (usec) ,(usec)  ,                  2
 --------------------------------------------------------------------------------
 0 |     1002,    1002,      2501,   0,         61  ,      70,       3      |  60
 1 |     1002,    1002,      2012,   0,         56  ,      63,       2      |  50
 2 |     1002,    1002,      2322,   0,         66  ,      74,       5      |  68
 3 |     1002,    1002,      1727,   0,         58  ,      68,       2      |  52

 Rx Check stats enabled                                                                       3
 -------------------------------------------------------------------------------------------
 rx check:  avg/max/jitter latency,       94  ,     744,       49      |  252  287  309       4

 active flows: 7      10, fif: 6     308,  drop:        0, errors:        0                5
 -------------------------------------------------------------------------------------------

1 RX线程CPU使用率,如果采样率过高,请提高采样率。

2 特定延迟的数据包测量部分。详细参考Measuring Jittery/Latency

3 Rx检查部分。在测试过程中或测试结束时按“r”键,可以获得更详细的信息。

4 模板流的平均延迟、最大延迟、抖动(以微秒为单位)。这通常比延迟检查包高,因为该功能对该包的作用更大。

5 Drop计数和错误计数应该为零。如果不是,请按r键查看完整的报告或在测试结束时查看报告。

6 fif - 流的第一个。Rx线程处理的新流的数量。

7 active流- rx线程处理的活动流的数量。

                                              Press R to Display Full Report

 m_total_rx                              : 2
 m_lookup                                : 2
 m_found                                 : 1
 m_fif                                   : 1
 m_add                                   : 1
 m_remove                                : 1
 m_active                                : 0
                                                        1
 0  0  0  0  1041  0  0  0  0  0  0  0  0  min_delta  : 10 usec
 cnt        : 2
 high_cnt   : 2
 max_d_time : 1041 usec
 sliding_average    : 1 usec                            2
 precent    : 100.0 %
 histogram
 -----------
 h[1000]  :  2
 tempate_id_ 0 , errors:       0,  jitter: 61           3
 tempate_id_ 1 , errors:       0,  jitter: 0
 tempate_id_ 2 , errors:       0,  jitter: 0
 tempate_id_ 3 , errors:       0,  jitter: 0
 tempate_id_ 4 , errors:       0,  jitter: 0
 tempate_id_ 5 , errors:       0,  jitter: 0
 tempate_id_ 6 , errors:       0,  jitter: 0
 tempate_id_ 7 , errors:       0,  jitter: 0
 tempate_id_ 8 , errors:       0,  jitter: 0
 tempate_id_ 9 , errors:       0,  jitter: 0
 tempate_id_10 , errors:       0,  jitter: 0
 tempate_id_11 , errors:       0,  jitter: 0
 tempate_id_12 , errors:       0,  jitter: 0
 tempate_id_13 , errors:       0,  jitter: 0
 tempate_id_14 , errors:       0,  jitter: 0
 tempate_id_15 , errors:       0,  jitter: 0
 ager :
 m_st_alloc                                 : 1
 m_st_free                                  : 0
 m_st_start                                 : 2
 m_st_stop                                  : 1
 m_st_handle                                : 0

1 Errors,如果有,显示在这里

2 延迟事件的活动平均值的低通滤波器

3 每个模板信息错误

备注和限制:

为了接收数据包,TRex执行以下操作:

  • 将TTL更改为0xff,期望是0xff(环回)或oxFE(路由)。(使用--hop来配置这个值。)
  • 添加24字节的元数据作为ipv4/ipv6选项头。

6.参考

6.1.Traffic YAML (-f argument of stateful)

6.1.1.全局流量YAML部分
- duration : 10.0                          1
  generator :                              2
          distribution : "seq"
          clients_start : "16.0.0.1"       8
          clients_end   : "16.0.0.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.0.255"
          clients_per_gb : 201             9
          min_clients    : 101             10
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 1               11
          udp_aging      : 1               12
  cap_ipg    : true                            3
  cap_ipg_min    : 30                          4
  cap_override_ipg    : 200                    5
  vlan       : { enable : 1  ,  vlan0 : 100 , vlan1 : 200 } 6
  mac_override_by_ip : true  7

1 持续测试时间(秒)。可以使用-d选项覆盖。

2 在here查看生成器部分的完整解释。

3 true(默认值)表示从cap文件中获取IPG(如果存在cap_ipg_min和cap_override_ipg,也会考虑到它们)。false表示从每个模板段取IPG。

4 以下两个选项可以设置以微秒为单位的最小ipg:(if (pkt_ipg<cap_ipg_min) { pkt_ipg=cap_override_ipg} )

5 用来覆盖的值(微秒),如上所述。

6 启用负载平衡功能,详细参考trex load balance section

7 启用基于IP的MAC地址替换功能,Full explanation.

8 参考生成器元数据解释

9 弃用

10 弃用

11 以秒为单位TCP流的老化时间(特别是将src_port返回到池)。适用于套接字利用率非常高(>50%)并且需要验证套接字源端口是否未封装和重用的情况。默认值为零。从性能的角度来看,最好保持这样。更大的值可能造成性能损失。

12 same as #11 for UDP flows

6.1.2.Timer Wheel配置

(from v2.13) see Timer Wheel section

6.1.3.每个模板部分
   - name: cap2/dns.pcap          1
       cps : 10.0                   2
       ipg : 10000                  3
       rtt : 10000                  4
       w   : 1                      5
       server_addr : "48.0.0.7"     6
       one_app_server : true        7
       multi_flow_enabled: true     8
       flows_dirs: [0, 1]           9
       keep_src_port: true          10
       ip_header_offset: 50         11
       max_ip_tunnels: 1000         12

1 模板pcap文件的名称。可以是t-rex-64映像目录中的相对路径,也可以是绝对路径。pcap文件应该只包含一个流。(例外:在plug-ins情况下)。

2 每秒连接数。这是在命令行指定-m1时将使用的值(给出-m x将乘以这个值).

3 如果YAML文件的global部分包含cap_ipg: false,这一行将以微秒为单位设置包间间隔。

4 应该设置为与ipg(微秒)相同的值。

5 缺省值:w=1。这向IP生成器指示如何生成流。如果w=2,来自同一模板的两个流将在一个突发中生成(对于具有突发流的HTTP来说更多)。 

6 如果one_app_server设置为true,那么该模板的所有流都将使用相同的服务器。

7 如果需要相同的服务器地址,则将此值设置为true。(默认为false)

8 v2.62新版功能。设置后,允许在模板中显示多个流。要求配置flows_dirs以指定每个流的方向。 注意:来自池和源端口的IP值对于pcap中的所有流都是相同的。

9 v2.62新版功能。设置流量方向。如果设置为0,则没有效果。如果设置为1,服务器将发起流(带其IP)到具有原始dest端口的客户端。 注意:不适用于--learn模式。

10 v2.66新版功能。保持pcap的原始TCP/UDP源端口。

11 以字节为单位的新客户端IP头偏移量。当捕获中存在多个IP头(例如隧道流量)时有用。覆盖解析找到的第一个IP头的默认行为。

12 新增(如果模板中存在IP隧道),则配置隧道的最大数目。外部ip通过增加来调整(inner src IP % max_ip_tunnels)。

6.2.Platform YAML (--cfg argument)

YAML格式的配置文件配置TRex行为,包括:

  • 每个端口(源和目的)的IP地址或MAC地址。
  • 屏蔽接口,以确保TRex不会试图使用管理端口作为流量端口。
  • 修改zmq/telnet TCP端口。

你可以通过在命令行参数中添加--cfg <文件名>来指定要使用的配置文件。

如果没有给出--cfg,则默认使用/etc/trex_cfg.Yaml。

配置文件示例可以在$TREX_ROOT/scripts/cfg文件夹中找到。

6.2.1.基础配置
    - port_limit    : 2    #mandatory 1
       version       : 2    #mandatory 2
       interfaces    : ['03:00.0', '03:00.1']   #mandatory 3
       #dpdk_devargs : ['txq_inline_min=1','txq_inline_max=700'] # optional devargs 20
       #ext_dpdk_opt: ['--vdev=net_vdev_netvsc0,iface=eth1', '--vdev=net_vdev_netvsc1,iface=eth2'] # ask DPDK for failsafe # 18
       #interfaces_vdevs : ['net_failsafe_vsc0','net_failsafe_vsc1'] # use failsafe  # 19
       #enable_zmq_pub  : true # optional 4
       #zmq_pub_port    : 4500 # optional 5
       #zmq_rpc_port    : 4501 # optional 16
       #prefix          : setup1 # optional 6
       #limit_memory    : 1024 # optional 7
       #rx_desc         : 1024 # optional 17
       #tx_desc         : 1024 # optional 17
       c               : 4 # optional 8
       port_bandwidth_gb : 10 # optional 9
       services_core     : 0 # optional 10
       port_info       :  # set eh mac addr  mandatory
            - default_gw : 1.1.1.1   # port 0 11
              dest_mac   : '00:00:00:01:00:00' # Either default_gw or dest_mac is mandatory 11
              src_mac    : '00:00:00:02:00:00' # optional 12
              ip         : 2.2.2.2 # optional 13
              vlan       : 15 # optional 14
            - dest_mac   : '00:00:00:03:00:00'  # port 1
              src_mac    : '00:00:00:04:00:00'
            - dest_mac   : '00:00:00:05:00:00'  # port 2
              src_mac    : '00:00:00:06:00:00'
            - dest_mac   :   [0x0,0x0,0x0,0x7,0x0,0x01] # port 3 15
              src_mac    :   [0x0,0x0,0x0,0x8,0x0,0x02]

1 端口数。应等于3中列出的接口数。-强制

2 必须设置为2。-强制

3 要使用的接口列表。运行sudo ./dpdk_setup_ports.py --show查看可供选择的列表。—强制性的。在某些情况下,一个PCI可以有多个端口(例如MLX4驱动程序),为此您可以使用dd:dd.d/d格式。例如03:00.0/1,表示设备的第二个端口。列表的顺序很重要,首先是虚拟端口0。

4 为统计数据启用ZMQ发布者,默认为true.

5 ZMQ端口号。默认值为4500。如果在同一台机器上运行两个TRex实例,则应该为每个实例分配不同的编号。否则,可以删除此行。

6 如果在同一台机器上运行两个TRex实例,则应该为每个实例赋予不同的名称。否则,可以删除此行。(作为--file-prefix参数传递给DPDK)

7 限制所使用的内存量。(作为-m参数传递给dpdk)

8 TRex将使用每个接口对的线程数(cpu数)(可以用-c命令行选项覆盖).

9 每个接口的带宽,以Gb/s为单位。在本例中,我们有10gb的接口。VM设置为1。用于调优TRex分配的内存量。

10 运行服务的cpu(Scapy, PyBird和Emu)。如果没有给出并且启用了low_end,它将使用low_end_core;如果没有给出,它将使用0。当“low_end”不启用时,它将使用master_thread_id,如果没有提供,它将使用core 0。

11 TRex需要知道在每个端口上使用的目的MAC地址。你可以用以下两种方式指定: 直接指定dest_mac。 指定default_gw(自2.10版本起)。在这种情况下(只有在没有给出dest_mac的情况下),TRex将向这个IP发出ARP请求,并将结果用作dest MAC。如果没有给出dest_mac,也没有收到ARP响应,TRex将退出。

12 从该接口发送数据包时使用的源MAC。如果没有给出(自2.10版本起),则使用端口的MAC地址。

13 如果设置了(自2.10版本起),TRex将会在合适的端口上发送免费ARP(包含自己的ip和mac)。在有状态模式下,每120秒为每个ip发送免费ARP(可以使用--arp-refresh-period参数进行修改)。

14 如果设置了(自版本2.18起),端口上的所有流量将带此VLAN标签发送。

15 旧的MAC地址格式。v2.09版开始支持新格式。

16 无状态ZMQ RPC端口号。默认值为4501。如果在同一台机器上运行两个TRex实例,则应该为每个实例分配不同的编号。否则,可以删除此行。

17 覆盖Rx/TX dpdk驱动描述符的默认数量。为了在虚拟接口上获得更好的性能,最好将这些数字扩大到Rx=4096

18 高级DPDK选项,由Azure/failsafe驱动程序使用

19 在故障安全的情况下,选择正确的驱动程序

20 指定DPDK驱动程序选项为devargs

!注意:如果你使用早于2.10的版本,或者选择省略“ip”并使用基于mac的配置,请注意TRex将不会发送任何免费ARP,也不会响应ARP请求。在这种情况下,你必须配置静态ARP表项,指向DUT上的TRex端口。你可以查看here的配置示例。

!注意:带有虚拟接口的设置(SR-IOV/VMXNET3/virtio)默认情况下每个队列只有512个ex描述符,对于多队列/高性能设置,最好改大它。

为了能够找出哪些接口可以被使用,参考如下:

[bash]>>sudo ./dpdk_setup_ports.py --show

 Network devices using DPDK-compatible driver
 ============================================

 Network devices using kernel driver
 ===================================
 0000:02:00.0 '82545EM Gigabit Ethernet Controller' if=eth2 drv=e1000 unused=igb_uio *Active* #1
 0000:03:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb #2
 0000:03:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
 0000:13:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
 0000:13:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb

 Other network devices
 =====================
 <none>

1 我们看到02:00.0处于active状态(我们的管理端口)。

2 所有其他网卡端口(03:00.0,03:00.1,13:00.0,13:00.1)都可以使用。

最小配置文件为:

<none>
- port_limit    : 4
  version       : 2
  interfaces    : ["03:00.0","03:00.1","13:00.1","13:00.0"]

待续。。。。。。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TREX说明书: 命令名称: Z1 简便找盘 XINXI 查看硬盘信息 chkresfall检测固件 smt 查看SMART表 csmt 清SMART表 svmod 0x.. 单个备份模块 wrmod 0x.. 写入备份好的单个模块 pg 合并GP pgn 立即合并pg CGLIST 清G CFILE 0X33 清P Depophd 1,X关头 DM 内部低格 rdfl 2;edit 编辑ID wrdir 写01扇区 GSGJQ 格式化固件区 QLGJQ固件区清零 clribilog 清E0-E6 F0-F1的LOG HEADTEST 自动测试当前所有磁头好坏,好的返回OK,坏的返回BAD。 getPEDATA 自动获取PE bin 读E8 E9 E10 tp 校准指针 sf1 从0x01自动开自校准(范围S53. S58) 处理完后,出现COMPLETELY(完成)此时需要手工断电通电一次,校准即开启。校准时候用 POLL 0 命令实时查看进程。 sf2 从0x0e自动开自校准(若sf失败,则用这个跑(范围S53. S58)) 处理完后,出现COMPLETELY(完成)此时需要手工断电通电一次, 校准即开启。校准时候用POLL 0命令实时查看进程。 stop 强制停校准(盘在IDE 1,不是IDE0) rdTRK 自动备份全固件磁道 (范围S53. S58) wrTRKa 自动写全固件磁道 (范围S53. S58) swap58 自动全换SABRE58系列固件(范围S53. S58) swap53 自动全换SABRE53系列固件(范围S53. S58) wr58 自动全写S58系列固件(范围S53. S58) wr53 自动全写S53系列固件(范围S53. S58) sv58 自动全备份S58系列固件(范围S53. S58) sv53 自动全备份S53系列固件(范围S53. S58) wrdir 写dir wrrplist 写35模块 re47 自动配47适配器模块(范围S53. S58) re40 自动配40适配器模块(范围S53. S58) SVLROM 保存128K ROM WRROML 写128K ROM CLRCOLOR 修护色块和坏道的命令 CLR0 清零 CLRPW 解密 setPWD 加密 disablePWD 禁用密码 unlockUnit SECURITY UNLOCK Macro erasePrep SECURITY ERASE PREPARE Macro eraseUnit SECURITY ERASE UNIT Macro SMARTSTAT SMART归位 smtRdData SMART数据读取 htl L板测磁头 hlr换L板ROM AdpL自适配L板47 KadpL headnum 砍L板所选磁头适配 svtl uhead 保存L板所选磁头磁道 wrtl uhead 写所选磁头磁道 SVALL 存全固件RPM wrall 写全固件RPM svhawk保存HAWK全固件 wrhawk写HAWK全固件 svthawk保存HAWK磁道 wrthawk写HAWK磁道 initall初始化三项 getadpfrom40 从40拷贝MR适配进47 getadpfrom41 从41拷贝MR适配进47 raidergetadpfrom40 raider系列从40拷贝MR适配进47 raidergetadpfrom41 raider系列从41拷贝MR适配进47 svseqfull SEQ保存全固件 wrseqfull SEQ写全固件 SVBUC BUC保存全固件 WRBUC BUC写全固件 SVRAIDER RAIDER保存全固件 WRRAIDER RAIDER写全固件 kill headnum 这几个系列的砍头 adujst40 调整40模块 fmtcover 格式覆盖 SVORION ORION保存全固件 WRORION ORION写全固件 ORIONadp47 ORION配47 ROYL tp32 32位校准指针 ROYSF 自动开ROYL系列校准(从01开始跑,即第一个DC)处理完后,出现COMPLETELY(完成)此时需要手工断电通电一次,校准即开启。 校准时候用POLL 0命令实时查看进程。 STOPROY 强制停ROY校准 ROYHEADTEST ROY测试磁头 ROYRE47 ROY配ROM ROYMAKEROM ROY配ROM BAKpermovl 备份11号ATA模块 新命令: SF、SFP校准 LDR自动加载11 tpseq 设置校准起始指针 Get_adp_info 获取适配信息 Get_adp_new_info 获取适配信息(新) displayheadmap、hdmap 显示磁头映射 AAJSre40 AAJS盘从47拷贝MR到40 AAJSre47 AAJS盘从40拷贝MR到47 adjust_40(微代码,调用时加.)适配40 adjust_47(微代码,调用时加.)适配47 Adpzeus自适配ZEUS系列47 AdpR R系自适配47 K47 umaxhead UHEAD 砍头且设置47 kadpzeus headnum砍ZEUS所选磁头适配 cutmap uhead 关要砍的头的映射 SETPARM uhead设置所需磁头数的TPI和CAP getflash读取ROY备份ROM SA并保存 peirom配ROM svall 存全固件RPM,并存ROM.BIN, 11 PERMOVL.BIN, 35 RPLIST.BIN SVFW 保存全固件 SVBASE 存33 40 41 SVROM 保存192K ROM SV2ROM 保存256K ROM SVROMMOD 保存A 47 SVT UHEAD 保存所选磁头磁道 SVMOD OverlayNum 保存单个模块 WRBASE 写33 40 41 WRROMMOD 写A 47 WRROM 写192K ROM WR2ROM 写256K ROM WRALL 全写固件RPM RWRFW 自读自写全固件RPM wrFW 全写固件RPM WRT UHEAD 写入所选磁头磁道 WRTL UHEAD 写入所选磁头磁道 WrMOD BinFileNum 写入单个模块 SETHQ ULCAP设置HQ自定义CAP SETTAG ULCAP设置TAG自定义CAP scap显示CAP STPI显示TPI dpst、dpst1显示流程 EMDL编辑磁盘型号 HT测试头 HDT UHEAD测试所选头 SETLBA ULBA设置自定义LBA setdcm udcm设置自定义DCM setTPI为全部磁头设置TPI setCap为全部磁头设置CAP ST0 UTPI为0头设置TPI ST1 UTPI为1头设置TPI ST2 UTPI为2头设置TPI ST3 UTPI为3头设置TPI ST4 UTPI为4头设置TPI ST5 UTPI为5头设置TPI ST6 UTPI为6头设置TPI ST7 UTPI为7头设置TPI SC0 UCAP为0头设置CAP SC1 UCAP为1头设置CAP SC2 UCAP为2头设置CAP SC3 UCAP为3头设置CAP SC4 UCAP为4头设置CAP SC5 UCAP为5头设置CAP SC6 UCAP为6头设置CAP SC7 UCAP为7头设置CAP RADP读103并重新适配47 REPAIR重建DIR SFLOG查校准LOG CM对比47和103 ClrRES prmFileID、ClrR prmFileID、Clrbinfile binfile清空所选模块 CLEARFILE UFILEID清空所选ID模块 CLRPSTLOG清除SPTLOG CLRLIST清除所有缺陷表 kadp3 headnum、kadp2 headnum、kNEW2ROM headnum、knew3 headnum砍所选磁头适配 k0 headnum、k1 headnum、k3 headnum砍头 vp1、vp显示P表 VG显示G表 c4改28走C4 FmtR格式化固件区 cf清空缺陷 sz显示ZONE kz uznum ulba砍所选段位LBA SHOWZONE显示ZONE kZONE uzone砍所选段位 hr换ROM gb搞0B模块 h40换40 固件区 允许输入拉丁字符的拼音 Firmware District 常用指令 1、 关头 Depophd 1,X 2、 配47 Re47 3、 格式化 Fmtunit 4、 启动自校 Sf 5、 备份固件 Sv53,sv58 6、 写全部固件 Wr53,wr58 7、 自动更换替换固件 Swap53,swap58 8、 写01扇区 wrdir 9、 格式化固件区 fmtrsvd 10、 固件区清零 zrcyls 11、 清LOG clribilog sv109t wr109t wr083j sv083j sv218b wr218b adp0 adp1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值