Ссылки:
1 2 3 4 5 6 7 8 9 |
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://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/ https://brezular.com/2019/08/01/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" |
Установка:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 apt install python python3-distutils python3-apt apt install dpdk 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/ 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 |
Команды:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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 <DRIVER_NAME> <BUS_NUMBER> 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 |
Инфа по выводу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 порядок загрузки
1 2 3 4 5 6 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
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’)
1 2 |
cd /usr/lib/x86_64-linux-gnu/ ln -s -f libc.a liblibc.a |
DUT — клиент через который гоним трафик
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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 |
Может пригодится:
1 2 3 4 5 6 7 8 9 |
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
1 2 3 4 5 6 7 8 9 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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] ------------------------- |
Решение косяков:
1 2 3 4 5 6 7 8 |
./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’
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
версия 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 # много всего ------------------------------------ |