Trex安装及DPDK、igb_uio驱动安装编译教程

Trex安装及DPDK、igb_uio驱动安装编译教程

Ubuntu版本:22.04.6

DPDK版本:22.07

Trex版本:v2.87(for stateless gui) v3.04(for automation stateless mode)

Ubuntu版本:

root@bruce:/home/bruce# uname -a
Linux bruce 5.15.0-105-generic #115~20.04.1-Ubuntu SMP Mon Apr 15 17:33:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
root@bruce:/home/bruce# cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
root@bruce:/home/bruce# 
  • 依赖及工具安装
apt-get install meson
apt-get install python3-pyelftools
apt-get install python3-pip
apt-get install pkg-config
apt-get install gcc
apt-get install vim
apt-get install net-tools
  • 安装DPDK并编译igb_uio驱动
wget https://fast.dpdk.org/rel/dpdk-22.07.tar.xz
tar xf dpdk-22.07.tar.xz
cd dpdk-22.07
-----------------------
meson build
# build文件夹中会新增build.ninja等文件用于安装各种库和可执行脚本
app          buildtools             config  drivers   lib         meson-logs     rte_build_config.h
build.ninja  compile_commands.json  doc     examples  meson-info  meson-private  usertools
-----------------------
cd build
ninja
ninja install
----------------
root@bruce:/home/bruce/dpdk-22.07/build# ls /usr/local/bin/
dpdk-devbind.py    dpdk-pmdinfo.py    dpdk-test        dpdk-test-cmdline        dpdk-test-eventdev   dpdk-test-gpudev    dpdk-test-regex
dpdk-hugepages.py  dpdk-proc-info     dpdk-test-acl    dpdk-test-compress-perf  dpdk-test-fib        dpdk-test-pipeline  dpdk-test-sad
dpdk-pdump         dpdk-telemetry.py  dpdk-test-bbdev  dpdk-test-crypto-perf    dpdk-test-flow-perf  dpdk-testpmd

# 库和脚本及可执行程序保存路径如下:
/usr/local/lib/x86_64-linux-gnu/
/usr/local/bin/
# 卸载请执行 ninja uninstall 命令即可

注:(可选操作)

如果是在虚拟机中进行编译,可执行如下操作进行快速编译,以下操作应在执行meson build命令之前。

vi drivers/meson.build         # subdirs只保留bus mempool net
vi drivers/bus/meson.build     # drivers只保留pci vdev
vi drivers/mempool/meson.build # drivers只保留ring stack
vi drivers/net/meson.build     # drivers只保留e1000

然后执行meson build命令,大致会输出如下内容则表示正常:

Message: 
===============
Drivers Enabled
===============

bus:
        pci, vdev, 
mempool:
        ring, stack, 
  • 编译dpdk-kmods,安装igb_uio驱动
# 下载dpdk-kmods文件
git clone http://dpdk.org/git/dpdk-kmods

root@bruce:/home/bruce# cd dpdk-kmods/
root@bruce:/home/bruce/dpdk-kmods# cd linux/
root@bruce:/home/bruce/dpdk-kmods/linux# cd igb_uio/
root@bruce:/home/bruce/dpdk-kmods/linux/igb_uio# make
make -C /lib/modules/5.15.0-105-generic/build/ M=/home/bruce/dpdk-kmods/linux/igb_uio
make[1]: Entering directory '/usr/src/linux-headers-5.15.0-105-generic'
  CC [M]  /home/bruce/dpdk-kmods/linux/igb_uio/igb_uio.o
  MODPOST /home/bruce/dpdk-kmods/linux/igb_uio/Module.symvers
  CC [M]  /home/bruce/dpdk-kmods/linux/igb_uio/igb_uio.mod.o
  LD [M]  /home/bruce/dpdk-kmods/linux/igb_uio/igb_uio.ko
  BTF [M] /home/bruce/dpdk-kmods/linux/igb_uio/igb_uio.ko
Skipping BTF generation for /home/bruce/dpdk-kmods/linux/igb_uio/igb_uio.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-5.15.0-105-generic'
root@bruce:/home/bruce/dpdk-kmods/linux/igb_uio# ls
compat.h  igb_uio.c  igb_uio.ko  igb_uio.mod  igb_uio.mod.c  igb_uio.mod.o  igb_uio.o  Kbuild  Makefile  modules.order  Module.symvers
root@bruce:/home/bruce/dpdk-kmods/linux/igb_uio# modprobe uio
root@bruce:/home/bruce/dpdk-kmods/linux/igb_uio# insmod igb_uio.ko intr_mode=legacy

# 分配内存
echo 512 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

# 查看当前网卡类型
root@bruce:/home/bruce# lspci | grep Ethernet
02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:05.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:06.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)

# 进入dpdk目录,查看当前网卡是否能够选择igb_uio驱动
root@bruce:/home/bruce# cd dpdk-22.07
root@bruce:/home/bruce/dpdk-22.07# cd usertools/
root@bruce:/home/bruce/dpdk-22.07/usertools# ./dpdk-devbind.py -s

Network devices using kernel driver
===================================
0000:02:01.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=eth0 drv=e1000 unused=igb_uio,vfio-pci *Active*
0000:02:05.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=eth1 drv=e1000 unused=igb_uio,vfio-pci 
0000:02:06.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' if=eth2 drv=e1000 unused=igb_uio,vfio-pci 

# 绑定网卡到igb_uio驱动
root@bruce:/home/bruce/dpdk-22.07/usertools# sudo ./dpdk-devbind.py -b igb_uio 0000:02:05.0
root@bruce:/home/bruce/dpdk-22.07/usertools# sudo ./dpdk-devbind.py -b igb_uio 0000:02:06.0
root@bruce:/home/bruce/dpdk-22.07/usertools# 
# 解绑请使用./dpdk-devbind.py -u 0000:02:05.0 命令

# 检查是否绑定成功,绑定成功后ifconfig命令无法管理该网卡
root@bruce:/home/bruce/dpdk-22.07/usertools# ./dpdk-devbind.py -s

Network devices using DPDK-compatible driver
============================================
0000:02:05.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' drv=igb_uio unused=e1000,vfio-pci
0000:02:06.0 '82545EM Gigabit Ethernet Controller (Copper) 100f' drv=igb_uio unused=e1000,vfio-pci

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

No 'Baseband' devices detected
  • 安装Trex并开启Trex Server
# 下载wget --no-check-certificate https://trex-tgn.cisco.com/trex/release/v2.87.tar.gz
pip install disutils

tar -xf v2.87.tar.gz

# 更新trex_cfg.yaml文件,把网卡的序列号及对端MAC地址配置上
root@bruce:/home/bruce/v2.87# 
root@bruce:/home/bruce# cd v2.87
root@bruce:/home/bruce/v2.87# cp ./cfg/simple_cfg.yaml /etc/trex_cfg.yaml^C
root@bruce:/home/bruce/v2.87# cp cfg/simple_cfg.yaml  /etc/trex_cfg.yaml
root@bruce:/home/bruce/v2.87# vim /etc/trex_cfg.yaml
root@bruce:/home/bruce/v2.87# vim /etc/trex_cfg.yaml
root@bruce:/home/bruce/v2.87# cat /etc/trex_cfg.yaml 
- port_limit    : 2         
  version       : 2
  zmq_pub_port  : 4500
  zmq_rpc_port  : 4501
  c             : 4
  interfaces    : ["02:05.0", "02:06.0"]   # list of the interfaces to bind run ./dpdk_nic_bind.py --status 
  port_info     :  # set eh mac addr 
                 - dest_mac    : '00:0c:29:62:6e:ca'
                 - dest_mac    : '00:0c:29:62:6e:c0'

# 启动Trex Daemon Server进程
root@bruce:/home/bruce/v2.87# ./daemon_server 
usage: daemon_server [-h] [-v] [-p PORT] [-z PORT] [-t PATH] [-f PATH] [--trex-host HOST] [-n NICE]
                     {
    
    start,show,stop,restart,start-live}
daemon_server: error: the following arguments are required: action
root@bruce:/home/bruce/v2.87# ./daemon_server start
Firing up TRex REST daemon @ port 8090 ...

TRex server daemon is started
root@bruce:/home/bruce/v2.87# 

# 执行启动Stateless模式的命令  使用1个内核
root@bruce:/home/bruce/v2.87# ./t-rex-64 -i -c 1
  • 安装Stateless GUI并连接Server

https://github.com/cisco-system-traffic-generator/trex-stateless-gui/releases

导入的配置应该通/etc/trex_cfg.yaml中所配置的内容一致:

img

img

猜你喜欢

转载自blog.csdn.net/taxuebufeng/article/details/138607091