Ссылки:
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.04https://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
Железо:
intel чипы проверено: Intel 82599 Intel X710 Intel XL710 Intel XXV710 Конкретные сетевые карты: X520-DA2 (тут чип встречается 82599) X710-DA2 mellanox должно работать (работает но есть нюансы): Mellanox ConnectX-4/Lx Mellanox ConnectX-5/6 intel chatgpt сказал: i40e: X710, XL710, X722, XXV710. ice: E810, E822, E823. igb: I210, I350, I354. ixgbe: X520, X540, X550.
Установка:
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 -b4. Пример !!! Настройки интерфейса берутся из фала конфигурации /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