Ответ 1
netem использует уже встроенную в Linux и утилиты пользовательского пространства функциональность для имитации сетей. На самом деле это ответ, на который ссылается Марк, под другим именем.
Примеры их домашняя страница уже показывают, как вы можете добиться того, что вы просили:
Примеры
Эмуляция задержек глобальной сети
Это самый простой пример: он просто добавляет фиксированную задержку для всех пакетов, выходящих из локального Ethernet.
# tc qdisc add dev eth0 root netem delay 100ms
Теперь простой тест ping для размещения в локальной сети должен показывать увеличение на 100 миллисекунд. Задержка ограничена тактовым разрешением ядра (Гц). В большинстве систем 2.4 системные часы работают со скоростью 100 Гц, что позволяет делать задержки с шагом 10 мс. На 2.6 значение - это параметр конфигурации от 1000 до 100 Гц.
Более поздние примеры просто изменяют параметры без перезагрузки qdisc
Реальные широкополосные сети показывают изменчивость, поэтому можно добавлять случайные вариации.
# tc qdisc change dev eth0 root netem delay 100ms 10ms
Это приводит к тому, что добавленная задержка составляет 100 ± 10 мс. Изменение задержки сети не является чисто случайным, поэтому для эмулирования того, что есть значение корреляции.
# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%
Это приводит к тому, что добавленная задержка составляет 100 ± 10 мс, а следующий случайный элемент зависит от 25% от последнего. Это не истинная статистическая корреляция, а приближение.
Распределение задержки
Как правило, задержка в сети неравномерна. Чаще всего используется нечто вроде обычного распределения для описания вариации задержки. Дисциплина netem может принимать таблицу для указания неравномерного распределения.
# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal
Фактические таблицы (normal, pareto, paretonormal) генерируются как часть компиляции iproute2 и помещаются в /usr/lib/tc; поэтому с некоторыми усилиями можно сделать свой собственный дистрибутив на основе экспериментальных данных.
Потеря пакетов
Случайная потеря пакетов указана в команде "tc" в процентах. Наименьшее возможное ненулевое значение:
2 -32= 0,0000000232%
# tc qdisc change dev eth0 root netem loss 0.1%
Это приводит к случайному сбросу 1/10-процентных (т.е. 1 из 1000) пакетов.
Также может быть добавлена дополнительная корреляция. Это приводит к тому, что генератор случайных чисел является менее случайным и может использоваться для эмуляции потерь пакетов пакетов.
# tc qdisc change dev eth0 root netem loss 0.3% 25%
Это приведет к потере 0,3% пакетов, и каждая последующая вероятность будет зависеть на четверть от последней.
Prob n= 0.25 × Prob n-1 + 0.75 × Random
Примечание, что вы должны использовать tc qdisc add
, если у вас нет правил для этого интерфейса или tc qdisc change
, если у вас уже есть правила для этого интерфейса. Попытка использовать tc qdisc change
на интерфейсе без правил даст ошибку RTNETLINK answers: No such file or directory
.