Базовый workflow
# На стороне A - сервер
iperf3 -s # слушает на :5201
# На стороне B - клиент, подключается к A
iperf3 -c 10.0.0.1 # 10 секунд по умолчанию
iperf3 -c 10.0.0.1 -t 30 # тест 30 секунд
Вывод клиента - таблица интервалов + summary:
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 1.10 GBytes 9.45 Gbits/sec 0 1.62 MBytes
...
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 10.9 GBytes 9.41 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 10.9 GBytes 9.41 Gbits/sec receiver
Главное - Bitrate (throughput) и Retr (TCP-retransmits - индикатор
потерь / congestion на пути).
Полезные флаги
iperf3 -s -D # сервер в daemon (отвязка от терминала)
iperf3 -s -p 9999 # другой порт
iperf3 -c host -P 4 # -P: 4 параллельных стрима (бьёт single-flow лимит)
iperf3 -c host -R # reverse: server шлёт client'у (для теста downlink)
iperf3 -c host -u -b 100M # UDP-режим, target 100 Mbit/s
iperf3 -c host -t 60 -i 2 # 60с тест, отчёт каждые 2 секунды
iperf3 -c host -J # JSON-вывод (для парсинга)
Что подключить к выводу
- TCP test, низкий throughput, retr > 0 → потери на пути; проверь cmd-tc qdisc, MTU, congestion control в tcp-states
- TCP test, низкий throughput, retr = 0 → bandwidth-delay product; маленькое окно или CPU-bound
- UDP test, packet loss > 0% → реальные потери на маршруте
Парный тест с tc netem
Стандартное упражнение: измерить baseline → ухудшить сеть → сравнить:
# Baseline
iperf3 -c server -t 5
# Деградация на исходящем интерфейсе
sudo tc qdisc add dev eth0 root netem delay 50ms loss 1%
iperf3 -c server -t 5
▸Bitrate должен резко упасть (TCP не разгоняется при потерях)
# Восстановление
sudo tc qdisc del dev eth0 root
iperf2 vs iperf3
- iperf2 (он же
iperf) - старый, многопоточный, хорош для UDP-теста - iperf3 - современный, single-thread, чище отчёт, JSON-вывод
Для bidirectional одновременного теста на iperf3 используют два
параллельных запуска (-c host + -c host -R параллельно), iperf2
делал это одной командой -d.
Capability в контейнерах
Для UDP-теста выше user-quota - может потребоваться CAP_NET_RAW.
Базовый TCP-тест работает без особых привилегий.