Network/Linux: Impairment. Ограничение полосы пропускания (Linux: tc, wondershaper; Network: Cisco, Mellanox), внесение задержек и потерь в сетевой трафик

Network devices
Пример работы полсера

Шейпер (по факту полсер) на mellanox сделан по baud rate, а не througput. Потери начинаются примерно ровно в 50% baud rate (как и настроено на девайсе), независимо от фактического размера payload.

Framesize Rx Throughput (% Line Rate) Rx Throughput (Mbps)
1472      50.1853004         49512.5752044
1408      50.1913476         49488.3875923
1344      50.1979646         49461.9240503
1280      50.2052332         49432.8450123
1216      50.2132581         49400.7458045
1152      50.2221625         49365.1289785
1088      50.2321001         49325.3834443
1024      50.2432680         49280.7533005
960         50.2558900         49230.2596314
832         50.2868496         49106.4070830
768         50.3061164         49029.3114288
704         50.3288090         48938.5104262
576         50.3889325         48698.0287265
384         50.5512663         48048.7284116
256         50.7868002         47106.5973284
192         51.0132740         46200.7009995
74           49.0080371         38580.7951303
74           49.0080360         38580.7943359
Config
Cisco 3850
3850(config)#policy-map policer-bw
3850(config-pmap)#class class-default
3850(config-pmap-c)#shape average percent 30
3850(config-if)#service-policy output policer-bw

3850(config-pmap-c)#shape average ?
<15000-100000000000>  Target Bit Rate (bits/sec). (postfix k, m, g optional; decimal point allowed)
  percent               % of interface bandwidth for Committed information rate
Mellanox
mlnx-sw1 [standalone: master] (config interface ethernet 1/49) # bandwidth shape 50G

IXIA

Ixia Traffic Impairment – аппаратные ухудшители трафика на FPGA. Мега точность ухудшения. Ухудшаем только часть трафика.

 

Легковесные

Очень легковесные, но не слишком функциональные:

  • Trickle
  • wondershaper 

wondershaper – юзал для SOCKS5 proxy Dante, работает норм.

wondershaper An easy tool to limit bandwidth of a particular interface.

sudo apt-get install wondershaper
sudo wondershaper eth0 1024 1024 # if you want to limit the bandwidth of interface eth1 to 1024 kbps downlink and 1024 kbps uplink
sudo wondershaper clear eth0 #To clear the limit

Clumsy

Пример “урезанного”, но зато простого tc для Windows.

Продвинутые
Apposite Technologies Linktropy

Серьезное аппаратное решение.

Test your applications performance against potential network impairments by emulating network latency, bandwidth, constraints, jitter, and loss at speeds up to 1Gbps. Linktropy enables users to import live traffic, vary impairments, and measure their impact in real time.
Wanem

Старый, но работающий WANEM.

WANEM (Wide Area Network EMulator) — эмулятор глобальной сети. Позволяет эмулировать большое количество характеристик глобальной сети, в том числе джиттер, большие задержки, потерю пакетов, разрывы соединений и ряд других характеристик. Разрабатывается в Performance Engineering Research Centre, TATA Consultancy Services, в Индии, в Мумбаи (Mumbai). Распространяется с открытым исходным кодом по лицензии GPL.

Доступен в виде ISO-образа и образа виртуальный машины для VMware.
tc

самый продвинутый, но довольно сложный инструмент. Тут можно как шейпить трафик, так и снижать его характеристики (traffic impairment).

Большая часть – конспект из этой статьи на habr.

Пропускная способность. Ограничиваем 56kbit.

tc qdisc change dev lo root netem rate 56kbit 

Задержка в 500 миллисекунд, 1 секунду:

tc qdisc add dev lo root netem delay 500ms
tc qdisc replace dev enp0s20f0 root netem latency 70ms
tc qdisc change dev lo root netem delay 1s # меняем через change на 1сек tc qdisc del dev lo root netem delay # удаляем через del

Можно так же сделать задержку вариативной (на хабре подробно).

tc qdisc change dev lo root netem delay 500ms 400ms 50 distribution normal 

Потери (потеря 50% пакетов с корреляцией 25%). Есть три метода создания потерь, этот самый очевидный.

tc qdisc add dev lo root netem loss 50% 25%

Потери + задержка

tc qdisc replace dev enp0s20f0 root netem loss 1.5% latency 70ms

Повреждение пакетов (фаззинг) с 50% вероятностью.

tc qdisc change dev lo root netem corrupt 50%

Дублирование пакетов с 50% вероятностью и корреляцией 25%.

tc qdisc change dev lo root netem duplicate 50% 25%

Перемешивание (реордеринг) пакетов – каждый пакет с указанной вероятностью будет отправлен без задержки или каждый n’ый пакет с указанной вероятностью будет отправлен без задержки. Остальные пакеты передаются с заданной задержкой.

tc qdisc change dev lo root netem delay 10ms reorder 25% 50%
tc qdisc change dev lo root netem delay 10ms reorder 25% 50% gap 5
iptables

У iptables есть режим random, которым тоже можно внести нестабильность (по аналогии с tc), скажем в 1% потерь:

sudo iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP

Leave a Reply