Ссылки:
https://habr.com/ru/post/306060/
https://github.com/cisco-system-traffic-generator/trex-stateless-gui
https://github.com/cisco-system-traffic-generator/trex-core
https://trex-tgn.cisco.com/trex/release/
https://trex-tgn.cisco.com/trex/doc/trex_manual.html#_download_and_installation
https://askubuntu.com/questions/1239829/modulenotfounderror-no-module-named-distutils-util
https://trex-tgn.cisco.com/trex/doc/trex_vm_manual.html
http://core.dpdk.org/doc/quick-start/
Cisco TRex on Ubuntu Server 18.04
https://www.mail-archive.com/users@dpdk.org/msg04798.html # решение ошибки "eth_i40e_dev_init(): Failed to init adminq: -66"
https://github.com/s5uishida/install_trex?ysclid=mc0h3m8kju972217675
Установка:
apt update
apt install lshw vim wget git make gcc linux-libc-dev linux-headers-amd64 pkg-config libncurses-dev flex bison libssl-dev libelf-dev dwarves rsync bc fakeroot build-essential xz-utils libncurses5-dev lz4 debianutils
apt install python3 python3-distutils python3-apt
update-alternatives --install /usr/bin/python python /usr/bin/python3 1
apt install dpdk
Настраиваем локаль:
vim /etc/locale.gen
-------------------
en_US.UTF-8 <---------- найти и раскоментить
------------------
Перечитать local:
locale-gen
На этом все, теперь у вас должна появится local en_US.UTF-8
cd /opt
wget https://trex-tgn.cisco.com/trex/release/v2.99.tar.gz
wget --no-check-certificate https://trex-tgn.cisco.com/trex/release/v3.00.tar.gz
tar -xpvf v2.99.tar.gz
cd v2.99
cd ko/src
make
make install
Каталоги trex:
/ t-rex-64/dpdk_set_ports/stl-sim
/astf test astf
/stl Stateless native (py) profiles
/stl/hlt Stateless HLT profiles
/ko Kernel modules for DPDK
/external_libs Python external libs used by server/clients
/exp Golden PCAP file for unit-tests
/cfg Examples of config files
/cap2 Stateful profiles
/avl Stateful profiles - SFR profile
/automation Python client/server code for both Stateful and Stateless
/automation/regression Regression for Stateless and Stateful
/automation/config Regression setups config files
/automation/trex_control_plane/interactive/trex Stateless lib and Console
/automation/trex_control_plane/interactive/trex/stl Stateless lib
/automation/trex_control_plane/interactive/trex/examples/stl Stateless examples
Команды:
cd /opt/v2.99
0. Смотрим соответствие сетевой шины
lshw -c network -businfo
1. Показывает информацию об интерфейсах
./dpdk_setup_ports.py -s
2. Чтобы создать конфигурационный файл по умолчанию (пример)
./dpdk_setup_ports.py -c 02:00.0 02:00.1 -o /etc/trex_cfg.yaml
3. Чтобы потом вернуть интерфейс обратно из под управления DPDK пригодится команда:
./dpdk_nic_bind.py -b
4. Пример
!!! Настройки интерфейса берутся из фала конфигурации /etc/trex_cfg.yaml
./t-rex-64 -f cap2/dns.yaml -c 4 -m 1 -d 100 -l 1000
-c — число ядер процессора.
-m — множитель cps каждого шаблона пакетов.
-d — время теста.
-l — частота (в Hz) latency пакетов, много параметров считается без их учета
5. Пример
./t-rex-64 -f cap2/dns.yaml -c 4 -m 9000 -d 100 -l 1000 -p
./t-rex-64 -i -c 6 --astf
6. Пример
./t-rex-64 -f cap2/http_simple.yaml -c 4 -l 1000 -d 100000 -m 30 --learn-mode 1
./t-rex-64 -i -c 6 --astf
7.
./bp-sim-64-debug --ut
./run_regression --func
Инфа по выводу:
Cpu Utilization — среднее значение нагрузки на CPU передающими тредами. Для налучшей производительности рекомендуется держать меньше 80%.
Total-Tx — суммарная скорость на передающем интерфейсе (в данном случае port 0)
Total-Rx — суммарная скорость на принимающем интерфейсе (в данном случае port 1)
Total-PPS — packets per second число пакетов на интерфейсах
Total-CPS — connections per second по сути этот параметр означает число запуска шаблонов, которые указаны в конфигурационном файле в секунду.
Expected-PPS — Ожидаемое число пакетов в секунду, в теории стремится к cps*число пакетов шаблона.
Expected-CPS — cps указанный в yaml файле теста.
Expected-BPS — суммарный трафик, объем шаблона * cps.
Active-flows — число внутренних потоков t-rex. По сути этот параметр является числом сессий, за которыми следит t-rex. например,
если вы запустите тест с pcap длительность сессии в котором равна 30 сек, то это показатель должен стремится к 30*Expected-CPS
Nat_time_out — должно быть ноль, число потоков, за которыми тирекс по каким-то причинам не смог уследить, обычно происходит если пакеты где-то дропают.
Nat_no_fid — должно быть ноль, обычно происходит при слишом больших таймаутах внутри тестируемого оборудования.
Total_nat_active: активное число потоков, должно быть низким при низком rtt.
Total_nat_open: общее число потоков, может отличаться пр однонаправленном (uni-directional) шаблоне.
grub порядок загрузки
grep menuentry /boot/grub/grub.cfg
vim /etc/default/grub
------------------------
GRUB_DEFAULT="Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 5.10.162"
------------------------
update-grub
Установка trex на 09.01.2023 debian 11
0. Устанавливаем доп по
apt install python python3-distutils python3-apt python3-pyelftools
update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1
1. Скачиваем дистрибутив trex
cd opt
wget --no-check-certificate --no-cache https://trex-tgn.cisco.com/trex/release/latest
tar -xzvf latest
2. Устанавливаем модуль ядра
cd /opt/v3.00/ko/src
make
make install
3. Создаем конфиг
./dpdk_setup_ports.py -s - смотрим что там у нас за интерфейсы
cd /opt/v3.0 - переходим в каталог trex
./dpdk_setup_ports.py - выполнив без параметров будет создан конфиг (тоесть: "cp cfg/simple_cfg.yaml /etc/trex_cfg.yaml")
./dpdk_setup_ports.py -c 02:00.0 02:00.1 -o /etc/trex_cfg.yaml - перенастраиваем конфиг (где 02:00.0 и 02:00.1 сетевые карты)
4. Проверяем проверяем успешность добавления интерфейсов
/opt/v3.0
./dpdk_setup_ports.py -s
5. Дополнительно
Запуск в режиме сервера astf и stl
./t-rex-64 -i --astf
./t-rex-64 -i --stl
./t-rex-64 -i -c 6 --astf
./trex_daemon_server start
консоль TRex (Выполняет роль клиента для подключения к серверу trex и генерации трафика)
./trex-console
./trex-console -s 192.168.55.61
6. Запуск теста в trex
start -f astf/http_simple.py -m 1
start -f astf/udp_sip.py -d 5000 -m 500000 -l 5
start -f astf/sfr_full.py -m 50 -l 50
start -f astf/video_stream.py -m 25
-d - время теста
-m - множитель пакетов
-l - запускать потоки с задержкой
Ошибка trex-console (FileNotFoundError: [Errno 2] No such file or directory: b'liblibc.a')
cd /usr/lib/x86_64-linux-gnu/
ln -s -f libc.a liblibc.a
DUT - клиент через который гоним трафик
DUT - device under test
16.0.0.0/8 - сеть клиентов trex
48.0.0.0/8 - сеть клиентов trex
apt install openvswitch-switch
apt install netsniff-ng netdiag iptraf bmon iftop glances
ovs-vsctl add-br ovsbr0
ovs-vsctl add-port enp1s0f0 ovsbr0
ovs-vsctl add-port ovsbr0 enp1s0f0
ovs-vsctl add-port ovsbr0 enp1s0f1
ovs-vsctl add-port ovsbr0 enp1s0f2
ovs-vsctl add-port ovsbr0 enp1s0f3
vim /etc/network/interfaces
---------------------------
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
#source-directory /etc/network/interfaces.d
auto enp5s0
iface enp5s0 inet dhcp
auto enp1s0f0
iface enp1s0f0 inet manual
auto enp1s0f1
iface enp1s0f1 inet manual
auto enp1s0f2
iface enp1s0f2 inet manual
auto enp1s0f3
iface enp1s0f3 inet manual
auto ovsbr0
iface ovsbr0 inet static
address 10.0.0.2/24
up ip route add 16.0.0.0/8 via 10.0.0.1
down ip route del 16.0.0.0/8
auto ovsbr0:0
iface ovsbr0:0 inet static
address 10.0.1.2/24
up ip route add 48.0.0.0/8 via 10.0.1.1
down ip route del 48.0.0.0/8
---------------------------
ovs-appctl dpctl/show -s - показать статистику
ifpps - показать статистику в реальном времени
ovs-appctl fdb/stats-clear - очистить статистику
trex server no mirror
vim /etc/trex_cfg.yaml
----------------------
### Config file generated by dpdk_setup_ports.py ###
- version: 2
interfaces: ['02:00.0', '02:00.1']
port_info:
- ip: 10.0.0.1
default_gw: 10.0.0.2
- ip: 10.0.1.1
default_gw: 10.0.1.2
platform:
master_thread_id: 0
latency_thread_id: 1
dual_if:
- socket: 0
threads: [2,3,4,5,6,7]
----------------------
Tuning
ulimit -n 30000
net.ipv4.tcp_max_tw_buckets = 65536
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_max_syn_backlog = 131072
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 8
net.ipv4.tcp_rmem = 16384 174760 349520
net.ipv4.tcp_wmem = 16384 131072 262144
net.ipv4.tcp_mem = 262144 524288 1048576
net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_low_latency = 1
net.ipv4.tcp_syncookies = 0
net.netfilter.nf_conntrack_max = 1048576
Может пригодится:
sudo ip netns show
sudo ip netns exec trex-a-0-1 ifconfig
trex>portattr -a
trex>portattr --mul on
trex>portattr --prom on
trex>service
trex(service)>l3 -p 1 --src 1.1.1.2 --dst 1.1.1.3
trex(service)>ping -p 1 -d 1.1.1.3
Ошибка "eth_i40e_dev_init(): Failed to init adminq: -66" на "Intel 13th Gen Core i7-13700K" debian 11
0. Редактируем
vim /etc/default/grub
---------------------
GRUB_CMDLINE_LINUX="iommu=pt, intel_iommu=on"
---------------------
1. Применяем изменения для grub
update-grub
2. Перезагружаемся
reboot
trex_port0+mikrotik+sw+mikrotik+trex_port1
mikrotik 1
---------------------
/ip address
add address=192.168.100.101/24 interface=bonding1 network=192.168.100.0
add address=10.12.136.1/24 interface=sfp-sfpplus1 network=10.12.136.0
/ip route
add disabled=no distance=1 dst-address=48.0.0.0/8 gateway=10.12.136.5 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
add disabled=no distance=1 dst-address=16.0.0.0/8 gateway=192.168.100.100 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
add disabled=no dst-address=0.0.0.0/0 gateway=192.168.100.100 routing-table=main suppress-hw-offload=no
add disabled=no dst-address=10.12.135.0/24 gateway=192.168.100.100 routing-table=main suppress-hw-offload=no
------------------------
mikrotik 2
---------------------
/ip address
add address=192.168.100.100/24 interface=bonding1 network=192.168.100.0
add address=10.12.135.1/24 interface=sfp-sfpplus1 network=10.12.135.0
/ip route
add disabled=no distance=1 dst-address=10.12.136.0/24 gateway=192.168.100.101 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.100.101 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
add disabled=no distance=1 dst-address=48.0.0.0/8 gateway=192.168.100.101 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
add disabled=no distance=1 dst-address=16.0.0.0/8 gateway=10.12.135.5 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
------------------------
trex
-------------------------
cat /etc/trex_cfg.yaml
### Config file generated by dpdk_setup_ports.py ###
- version: 2
interfaces: ['02:00.0', '02:00.1']
port_info:
- ip: 10.12.135.5
default_gw: 10.12.135.1
- ip: 10.12.136.5
default_gw: 10.12.136.1
platform:
master_thread_id: 0
latency_thread_id: 1
dual_if:
- socket: 0
threads: [2,3,4,5,6,7]
-------------------------
Решение косяков:
./trex-console
arp
ping -p 0 10.12.135.1
ping -p 0 10.12.136.1
ping -p 1 10.12.135.1
ping -p 1 10.12.136.1
FAILED быть не должно
error module 'collections' has no attribute 'Hashable'
версия trex 3.04 debian 12
ядро Linux 5.15.148
Python 3.12.2
https://stackoverflow.com/questions/72659999/chatterbot-module-error-attributeerror-module-collections-has-no-attribute
Начиная с Python3.3, Hashable был перенесен в модуль Collections.abc,
поэтому в качестве обходного пути вы можете принудительно обеспечить совместимость, добавив следующие строки вверху после других import-ов:
Временное решение:
vim /opt/v3.04/./dpdk_setup_ports.py
------------------------------------
#много всего
import subprocess
import platform
import stat
import time
import shutil
import signal
import glob
# вот после импортов сюда
import collections.abc
collections.Hashable = collections.abc.Hashable
# много всего
------------------------------------
UP20250220 / Ставим Trex с git / debian 12
apt update
apt install -y build-essential cmake python3-dev libnuma-dev zlib1g-dev libpcap-dev linux-headers-$(uname -r) git
apt install -y meson ninja-build
Качаем trex
git clone --recursive https://github.com/cisco-system-traffic-generator/trex-core.git
cd trex-core
Cisco T-Rex использует DPDK (Data Plane Development Kit) соберём его:
cd linux_dpdk
./b configure
./b build
После сборки DPDK возвращаемся в корень репозитория и компилируем сам T-Rex:
cd ..
./b configure
./b build
dump
./trex-console
capture monitor start --tx 0 1 --rx 0 1