Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

安装运行Trex Server及绑定网卡

https://blog.csdn.net/yb890102/article/details/127587910

安装运行Trex

TRex 安装

先登录虚拟机,查看一下虚拟机的ip地址,以便远程连接Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

mkdir trex
cd trex
wget --no-check-certificate https://trex-tgn.cisco.com/trex/release/latest
tar -zxvf latest

下载特别慢,可以在window上下载,然后上传到虚拟机上面Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

查看网卡

hl@ubuntu:~/trex$ ll
total 670888
drwxrwxr-x 3 hl hl 4096 Jul 25 11:27 ./
drwxr-xr-x 4 hl hl 4096 Jul 25 11:17 ../
-rw-rw-r-- 1 hl hl 686970880 Jul 25 11:26 latest
drwxr-xr-x 17 hl hl 4096 May 8 00:17 v2.81/
hl@ubuntu:~/trex$ cd v2.81/
hl@ubuntu:~/trex/v2.81$ sudo ./dpdk_setup_ports.py -s
[sudo] password for hl:

Network devices using DPDK-compatible driver
============================================
<none>

Network devices using kernel driver
===================================
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper)' if=ens33 drv=e1000 unused=igb_uio,vfio-pci,uio_pci_generic *Active*

Other network devices
=====================
<none>
hl@ubuntu:~/trex/v2.81$

添加网卡

右键虚拟机 -> 设置;添加 -> 网络适配器(NAT);确定即可

再次查看网卡,就有了刚才添加的两个网卡

hl@ubuntu:~/trex/v2.81$ sudo ./dpdk_setup_ports.py -s

Network devices using DPDK-compatible driver
============================================
<none>

Network devices using kernel driver
===================================
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper)' if=ens33 drv=e1000 unused=igb_uio,vfio-pci,uio_pci_generic *Active*
0000:02:06.0 '82545EM Gigabit Ethernet Controller (Copper)' if=ens38 drv=e1000 unused=igb_uio,vfio-pci,uio_pci_generic
0000:02:07.0 '82545EM Gigabit Ethernet Controller (Copper)' if=ens39 drv=e1000 unused=igb_uio,vfio-pci,uio_pci_generic

Other network devices
=====================
<none>
hl@ubuntu:~/trex/v2.81$

换国内源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list

# 添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

sudo apt update
sudo apt upgrade

安装dpdk相关插件

# gcc
sudo apt install build-essential
sudo apt install make
sudo apt-get install libnuma-dev

dpdk 安装

wget http://fast.dpdk.org/rel/dpdk-18.11.9.tar.xz
tar xvJf dpdk-18.11.9.tar.xz
cd dpdk-stable-18.11.9/

# 加载uio驱动
modprobe uio

# 配置dpdk
sudo ./usertools/dpdk-setup.sh

选择 x86_64-native-linuxapp-gcc
Insert IGB UIO module
Insert VFIO module
Insert KNI module

运行测试

在上面的三个网卡中, Active 端口作为管理端口,管理端口不能被绑定到trex,否则不能管理linx, 其它三个网卡可以绑定 trex默认端口起动配置文件是 /etc/trex_cfg.yaml

sudo cp cfg/simple_cfg.yaml  /etc/trex_cfg.yaml
sudo vim /etc/trex_cfg.yaml

- port_limit : 2 #端口数量限制
version : 2 #trex 版本
#List of interfaces. Change to suit your setup. Use ./dpdk_setup_ports.py -s to see available options
interfaces : ["03:00.0","03:00.1"] #对应绑定网卡的pci号
port_info : # Port IPs. Change to suit your needs. In case of loopback, you can leave as is.
- ip : 1.1.1.1 #本端eth1的虚接口地址
default_gw : 2.2.2.2 #对端DUT接口地址
- ip : 2.2.2.2 #本端eth2的虚接口地址
default_gw : 1.1.1.1 #对端DUT接口地址

启动stateless服务器

~/trex/v2.81$ sudo ./t-rex-64 -i

另外在起一个窗口

~/trex/v2.81$ sudo ./trex-console

参考:

mkdir trex
cd trex
wget --no-check-certificate https://trex-tgn.cisco.com/trex/release/latest
tar -zxvf latest


# 更新/etc/trex_cfg.yaml中的配置
cp  cfg/simple_cfg.yaml /etc/trex_cfg.yaml
root@bruce:/home/bruce/Downloads/Trex/v2.87# ./trex-cfg 
The ports are bound/configured.

# 启动TREX Server
root@bruce:/home/bruce/Downloads/Trex/v2.87# ./trex_daemon_server restart
TRex server daemon is killed
Firing up TRex REST daemon @ port 8090 ...

TRex server daemon is started

# 启动测试仪
root@bruce:/home/bruce/Downloads/Trex/v2.87# sudo ./t-rex-64 -i
ZMQ port is used by the following process:
pid: 20994, cmd: ./_t-rex-64 --iom 0 --cfg /tmp/trex_files/PA03 -i --no-key 
ERROR encountered while configuring TRex system

# 进入TREX console
root@bruce:/home/bruce/Downloads/Trex/v2.87# ./trex-console 

Using 'python' as Python interpeter


Connecting to RPC server on localhost:4501                   [SUCCESS]


Connecting to publisher server on localhost:4500             [SUCCESS]


Acquiring ports [01]:                                      [SUCCESS]

*** Warning - Port 0 destination is unresolved ***
*** Warning - Port 1 destination is unresolved ***

Server Info:

Server version:   v2.87 @ STL
Server mode:      Stateless
Server CPU:       1 x 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
Ports count:      2 x 1Gbps @ 82545EM Gigabit Ethernet Controller (Copper)

-=TRex Console v3.0=-

Type 'help' or '?' for supported actions

trex>service 

Enabling service mode on port(s): [01]                     [SUCCESS]

8.29 [ms]

trex(service)>arp -a

Resolving destination on port(s) [01]:  

/dpdk_setup_ports.py -t 确定一下要划入测试仪的接口pci号

无状态方式发包,可以使用两种客户端:trex-stateless-gui (图形界面)和trex-console(交互式命令行)。无论使用哪一种,都需要先启动测试仪,开启服务:sudo ./t-rex-64 -i

绑定网卡

# 解绑网卡
./dpdk_nic_bind.py -u 0000:02:05.0
# 绑定网卡为原来驱动 e1000
ethtool -i eth1  # 查看网卡驱动相关信息
./dpdk_nic_bind.py --bind=e1000 0000:02:06.0
./dpdk_nic_bind.py --bind=e1000 0000:02:05.0

# 查看网卡端口状态
./dpdk_setup_ports.py -s

# *********************************** #
#查看网卡原始驱动类型
[root@localhost ~]# ethtool -i ens37 | grep driver
driver: e1000

#查看网卡对应的bus-info值
[root@localhost ~]# ethtool -i ens37 | grep bus-info
bus-info: 0000:02:05.0

#查看网卡对应的传输速率(千兆or万兆)
[root@localhost ~]# ethtool ens37 | grep Speed
 Speed: 1000Mb/s

[root@localhost ~]# ethtool en5s0 | grep Speed
 Speed: 10000Mb/s

#查看网卡对应的NUMA节点
[root@localhost ~]# ethtool -i ens37 | grep bus-info
bus-info: 0000:02:05.0
[root@localhost ~]# cat /sys/bus/pci/devices/0000:02:05.0/numa_node 
0
Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

dpdk及igb_uio驱动安装

http://core.dpdk.org/download/

编译dpdk并安装

cd dpdk-<version>
meson build -Dexamples=all --wipe
cd build
ninja
sudo su 
ninja install
ldconfig

下载安装igb_uio内核驱动

sudo apt-get install linux-headers-$(uname -r)
sudo apt install dpdk-igb-uio-dkms


sudo modprobe uio
sudo modprobe igb_uio


immortal@Ubuntu22:~/dpdk-21.11.1/examples/helloworld/build$ lsmod | grep uio
igb_uio                24576  0
uio                    20480  1 igb_uio


# hugepage
sudo su
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
mkdir -p /mnt/huge
mount -t hugetlbfs pagesize=2MB /mnt/huge


# 网卡驱动切换igb_uio
./usertools/dpdk-devbind.py --status //查看网卡
ifconfig 
sudo ifconfig ens33 down //down掉当前网卡
./usertools/dpdk-devbind.py -b igb_uio 02:01.0 //绑定igb_uio为当前网卡驱动
# ./usertools/dpdk-devbind.py -b e1000 02:01.0  //切换为原网卡驱动
./usertools/dpdk-devbind.py --status-dev net

# 效果
immortal@Ubuntu22:~/dpdk-21.11.1/examples/helloworld/build$ dpdk-devbind.py --status-dev net

Network devices using DPDK-compatible driver
============================================
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' drv=igb_uio unused=e1000,vfio-pci
Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

Python API for TREX

pyATS Compatibility

TRex supports both Python2 and Python3 pyATS.

  • Install python2/python3 pyats/auto/pyats/bin/pyats-install –python2 /auto/pyats/bin/pyats-install –python3
  • Update the path
- Option 1 (better)
    export PYTHONPATH=[your path]/automation/trex_control_plane/interactive or in case of a client lib export PYTHONPATH=[your path]trex_client_v2xx/interactive
    $PYTHON -m [your main] -p $PWD $INPUT_ARGS

- Option 2
    setenv TREX_PATH to the trex stateless lib path setenv TREX_PATH <your path>/automation/trex_control_plane/interactive/ or in case of a client lib setenv TREX_PATH <your path>/trex_client_v2xx/interactive
    In the script or job file, add the TREX_PATH to sys.path:

一、什么是 PYTHONPATH?

PYTHONPATH 是一个环境变量,用于指定 Python 查找模块和包的附加路径。当你尝试导入一个 Python 模块或包时,Python 解释器会在 PYTHONPATH 中列出的目录里寻找。

# 临时设置
export PYTHONPATH=$PYTHONPATH:~/


# 永久设置
vim ~/.bashrc
# 末尾添加PATHONPATH的值
export PYTHONPATH=$PYTHONPATH:~/
# 使命令立即生效
source ~/.bashrc

# *******************************8
方法一:用于当前终端
export PATH=$PATH:<你的要加入的路径>
上面的方法只适用于当前终端,一旦当前终端关闭或在另一个终端中,则无效;

方法二:用于当前用户
在用户主目录下有一个 .bashrc 隐藏文件,可以在此文件中加入 PATH 的设置如下:
1)gedit ~/.bashrc
2)export PATH=<你的要加入的路径>:$PATH
3)加入多个路径:export PATH=<你要加入的路径1>:<你要加入的路径2>: … :$PATH
当中每个路径要以冒号分隔,这样每次登录都会生效。
添加PYTHONPATH的方法也是这样,在.bashrc中添加:

export PYTHONPATH=/home/zhaoying/anaconda3/envs/oneflow/bin:/home/zhaoying/anaconda3/bin:$PYTHONPATH
PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。保存后在终端输入 source ~/.bashrc 使环境变量立即生效.

方法三:用于所有用户
sudo gedit /etc/profile
加入:
export PATH=<你要加入的路径>:$PATH
终端输入:echo $PATH 可以查看环境变量
例:
export PYTHONPATH=$PYTHONPATH:/home/usrname/models:/home/usrname/models/one
1
意思是将models以及其目录下的one文件夹加入系统环境中。
import sys, os; sys.path.append(os.environ['TREX_PATH'])
  • Source trex stateless libs in scripts:
from trex.stl.api import *
from scapy.contrib.mpls import *
from trex.stl.trex_stl_hltapi import *

Python API文档:

https://trex-tgn.cisco.com/trex/doc/cp_stl_docs/index.html#

https://trex-tgn.cisco.com/trex/doc/cp_stl_docs/api/client_code.html

衡量网络的性能指标

性能指标有哪些?

通常是以 4 个指标来衡量网络的性能,分别是带宽、延时、吞吐率、PPS(Packet Per Second),它们表示的意义如下:

  • 带宽,表示链路的最大传输速率,单位是 b/s (比特 / 秒),带宽越大,其传输能力就越强。
  • 延时,表示请求数据包发送后,收到对端响应,所需要的时间延迟。不同的场景有着不同的含义,比如可以表示建立 TCP 连接所需的时间延迟,或一个数据包往返所需的时间延迟。
  • 吞吐率,表示单位时间内成功传输的数据量,单位是 b/s(比特 / 秒)或者 B/s(字节 / 秒),吞吐受带宽限制,带宽越大,吞吐率的上限才可能越高。
  • PPS,全称是 Packet Per Second(包 / 秒),表示以网络包为单位的传输速率,一般用来评估系统对于网络的转发能力。

当然,除了以上这四种基本的指标,还有一些其他常用的性能指标,比如:

  • 网络的可用性,表示网络能否正常通信;
  • 并发连接数,表示 TCP 连接数量;
  • 丢包率,表示所丢失数据包数量占所发送数据组的比率;
  • 重传率,表示重传网络包的比例;

socket 信息如何查看?

我们可以使用 netstat 或者 ss,这两个命令查看 socket、网络协议栈、网口以及路由表的信息。

虽然 netstat 与 ss 命令查看的信息都差不多,但是如果在生产环境中要查看这类信息的时候,尽量不要使用 netstat 命令,因为它的性能不好,在系统比较繁忙的情况下,如果频繁使用 netstat 命令则会对性能的开销雪上加霜,所以更推荐你使用性能更好的 ss 命令。

Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组
img

socket 的状态(State)、接收队列(Recv-Q)、发送队列(Send-Q)、本地地址(Local Address)、远端地址(Foreign Address)、进程 PID 和进程名称(PID/Program name)等。

接收队列(Recv-Q)和发送队列(Send-Q)比较特殊,在不同的 socket 状态。它们表示的含义是不同的。

当 socket 状态处于 Established时:

  • Recv-Q 表示 socket 缓冲区中还没有被应用程序读取的字节数;
  • Send-Q 表示 socket 缓冲区中还没有被远端主机确认的字节数;

而当 socket 状态处于 Listen 时:

  • Recv-Q 表示全连接队列的长度;
  • Send-Q 表示全连接队列的最大长度;

bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算

https://blog.csdn.net/a9254778/article/details/8513086

scapy封装数据包

基本介绍及示例:https://zhuanlan.zhihu.com/p/51002301

Trex中,使用dpdk操作网卡,使用scapy构造数据包。


获取Linux系统版本信息

cat /proc/version
    - 获取内核信息

uname -a
    - 获取内核信息

lsb_release -a
    - 获取系统信息

cat /etc/os-release
    - 获取系统信息

hostnamectl
    - 获取系统信息

linux 添加当前用户到docker组

在Linux中,要将当前用户添加到docker组,你可以使用以下命令:

sudo usermod -aG docker $USER

这里的-aG参数表示添加用户到一个额外的组,$USER环境变量表示当前用户。

执行这条命令后,你需要注销并重新登录,或者重启系统,以便更改生效。

如果你想要立即不用重启就应用这个更改,可以使用以下命令登录当前会话:

newgrp docker

请注意,添加用户到docker组会让该用户拥有执行docker命令的权限,这可能会带来安全风险。确保你信任该用户,并且了解这样做的后果。


原文始发于微信公众号(不知名菜鸟):Cisco Trex开源打流工具基本配置及Linux添加用户到Docker组

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/240686.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!