Linux QOS: Внесение искажений и задержек в траффик: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) м (Sirmax переименовал страницу Linux QOS: Внесение искажений и задержик в траффик в Linux QOS: Внесение искажений и задержек в траффик) |
||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | [[Категория:not_tested]] |
||
+ | [[Категория:Linux]] |
||
+ | [[Категория:QOS]] |
||
+ | [[Категория:shaper]] |
||
+ | [[Категория:tc]] |
||
+ | |||
=Еще заметрка про управление траффиком= |
=Еще заметрка про управление траффиком= |
||
+ | ==Задержка пакетов== |
||
− | |||
− | |||
Задержка пакетов 500 миллисекунд: |
Задержка пакетов 500 миллисекунд: |
||
Строка 7: | Строка 12: | ||
tc qdisc add dev lo root netem delay 500ms |
tc qdisc add dev lo root netem delay 500ms |
||
</PRE> |
</PRE> |
||
+ | |||
+ | Задержка в 1с |
||
+ | <PRE> |
||
tc qdisc change dev lo root netem delay 1s |
tc qdisc change dev lo root netem delay 1s |
||
+ | </PRE> |
||
⚫ | |||
+ | функцию распределения и корреляцию (со значением для предыдущего пакета). |
||
+ | Делается это следующим образом: |
||
+ | <PRE> |
||
− | |||
⚫ | |||
− | |||
tc qdisc change dev lo root netem delay 500ms 400ms 50 distribution normal |
tc qdisc change dev lo root netem delay 500ms 400ms 50 distribution normal |
||
+ | </PRE> |
||
Здесь мы задали задержку в промежутке от 100 до 900 миллисекунд, значения будут подбираться в соответствии с нормальным распределением и будет 50-процентная корреляция со значением задержки для предыдущего пакета. |
Здесь мы задали задержку в промежутке от 100 до 900 миллисекунд, значения будут подбираться в соответствии с нормальным распределением и будет 50-процентная корреляция со значением задержки для предыдущего пакета. |
||
+ | ==Потеря пакетов== |
||
Сделаем потерю 50% пакетов с корреляцией 25%: |
Сделаем потерю 50% пакетов с корреляцией 25%: |
||
+ | <PRE> |
||
− | |||
tc qdisc add dev lo root netem loss 50% 25% |
tc qdisc add dev lo root netem loss 50% 25% |
||
+ | </PRE> |
||
⚫ | |||
⚫ | |||
+ | <PRE> |
||
⚫ | |||
+ | </PRE> |
||
+ | ==Дублирование пакетов== |
||
⚫ | |||
+ | Что ещё можно делать с помощью netem? |
||
⚫ | |||
+ | Например, сымитировать ситуацию, обратную потере пакетов, — |
||
+ | дубликацию пакетов. |
||
+ | <BR> |
||
+ | Эта команда также принимает 2 аргумента: вероятность и корреляцию. |
||
+ | <PRE> |
||
+ | tc qdisc change dev lo root netem duplicate 50% 25% |
||
+ | </PRE> |
||
+ | ==Изменение порядка пакетов== |
||
⚫ | |||
+ | |||
⚫ | |||
+ | Можно перемешать пакеты, причём двумя способами. |
||
+ | |||
+ | В первом часть пакетов посылается сразу, остальные — с заданной задержкой. Пример из документации: |
||
+ | <PRE> |
||
+ | tc qdisc change dev lo root netem delay 10ms reorder 25% 50% |
||
+ | </PRE> |
||
+ | С вероятностью 25% (и корреляцией 50%) пакет отправится сразу, остальные отправятся с задержкой 10 миллисекунд. |
||
+ | |||
+ | Второй способ — это когда каждый N-й пакет отсылается моментально с заданной вероятностью (и корреляцией), а остальные — с заданной задержкой. Пример из документации: |
||
+ | <PRE> |
||
+ | tc qdisc change dev lo root netem delay 10ms reorder 25% 50% gap 5 |
||
+ | </PRE> |
||
+ | Каждый пятый пакет с вероятностью 25% будет отправлен без задержки. |
||
+ | |||
+ | ==Изменение пропускной способности== |
||
+ | |||
+ | Обычно везде отсылаются к TBF, но с помощью netem тоже можно изменить пропускную способность интерфейса: |
||
+ | |||
+ | <PRE> |
||
+ | tc qdisc change dev lo root netem rate 56kbit |
||
+ | </PRE> |
||
+ | Эта команда сделает походы по localhost такими же мучительными, |
||
+ | как серфинг в интернете через dial-up-модем. |
||
+ | Помимо установки битрейта, можно также эмулировать модель протокола канального уровня: задать оверхед для пакета, размер ячейки и оверхед для ячейки. |
||
+ | <BR> |
||
+ | Например, так можно сымитировать ATM и битрейт 56 кбит/сек.: |
||
+ | |||
+ | <PRE> |
||
+ | tc qdisc change dev lo root netem rate 56kbit 0 48 5 |
||
+ | </PRE> |
||
+ | |||
+ | |||
+ | ==Источники== |
||
+ | * https://www.opennet.ru/man.shtml?topic=tc-tbf&category=8&russian=0 |
||
⚫ | |||
* https://habr.com/ru/company/funcorp/blog/486136/ |
* https://habr.com/ru/company/funcorp/blog/486136/ |
Текущая версия на 15:20, 12 марта 2020
Еще заметрка про управление траффиком
Задержка пакетов
Задержка пакетов 500 миллисекунд:
tc qdisc add dev lo root netem delay 500ms
Задержка в 1с
tc qdisc change dev lo root netem delay 1s
Помимо константного значения, для задержки можно задавать отклонение,
функцию распределения и корреляцию (со значением для предыдущего пакета).
Делается это следующим образом:
tc qdisc change dev lo root netem delay 500ms 400ms 50 distribution normal
Здесь мы задали задержку в промежутке от 100 до 900 миллисекунд, значения будут подбираться в соответствии с нормальным распределением и будет 50-процентная корреляция со значением задержки для предыдущего пакета.
Потеря пакетов
Сделаем потерю 50% пакетов с корреляцией 25%:
tc qdisc add dev lo root netem loss 50% 25%
Добавление шума в пакеты
Помимо потери пакетов, можно имитировать их повреждение: в рандомной позиции пакета появится шум. Сделаем повреждение пакетов с 50-процентной вероятностью и без корреляции:
tc qdisc change dev lo root netem corrupt 50%
Дублирование пакетов
Что ещё можно делать с помощью netem?
Например, сымитировать ситуацию, обратную потере пакетов, —
дубликацию пакетов.
Эта команда также принимает 2 аргумента: вероятность и корреляцию.
tc qdisc change dev lo root netem duplicate 50% 25%
Изменение порядка пакетов
Можно перемешать пакеты, причём двумя способами.
В первом часть пакетов посылается сразу, остальные — с заданной задержкой. Пример из документации:
tc qdisc change dev lo root netem delay 10ms reorder 25% 50%
С вероятностью 25% (и корреляцией 50%) пакет отправится сразу, остальные отправятся с задержкой 10 миллисекунд.
Второй способ — это когда каждый N-й пакет отсылается моментально с заданной вероятностью (и корреляцией), а остальные — с заданной задержкой. Пример из документации:
tc qdisc change dev lo root netem delay 10ms reorder 25% 50% gap 5
Каждый пятый пакет с вероятностью 25% будет отправлен без задержки.
Изменение пропускной способности
Обычно везде отсылаются к TBF, но с помощью netem тоже можно изменить пропускную способность интерфейса:
tc qdisc change dev lo root netem rate 56kbit
Эта команда сделает походы по localhost такими же мучительными,
как серфинг в интернете через dial-up-модем.
Помимо установки битрейта, можно также эмулировать модель протокола канального уровня: задать оверхед для пакета, размер ячейки и оверхед для ячейки.
Например, так можно сымитировать ATM и битрейт 56 кбит/сек.:
tc qdisc change dev lo root netem rate 56kbit 0 48 5