Linux QOS: Внесение искажений и задержек в траффик: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 2: Строка 2:
   
   
  +
==Задержка пакетов=
   
 
Задержка пакетов 500 миллисекунд:
 
Задержка пакетов 500 миллисекунд:
 
<PRE>
 
<PRE>
 
tc qdisc add dev lo root netem delay 500ms
 
tc qdisc add dev lo root netem delay 500ms
  +
 
</PRE>
 
</PRE>
  +
  +
/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-процентная корреляция со значением задержки для предыдущего пакета.
Строка 30: Строка 37:
   
 
tc qdisc change dev lo root netem corrupt 50%
 
tc qdisc change dev lo root netem corrupt 50%
  +
  +
  +
  +
  +
  +
  +
Добавление шума в пакеты
  +
  +
Помимо потери пакетов, можно имитировать их повреждение: в рандомной позиции пакета появится шум. Сделаем повреждение пакетов с 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
  +
  +
  +
  +
  +
 
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.303.7914&rep=rep1&type=pdf
 
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.303.7914&rep=rep1&type=pdf
 
* https://habr.com/ru/company/funcorp/blog/486136/
 
* https://habr.com/ru/company/funcorp/blog/486136/

Версия 14:19, 26 февраля 2020

Еще заметрка про управление траффиком

=Задержка пакетов

Задержка пакетов 500 миллисекунд:

tc qdisc add dev lo root netem delay 500ms

/PRE> 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%




Добавление шума в пакеты

Помимо потери пакетов, можно имитировать их повреждение: в рандомной позиции пакета появится шум. Сделаем повреждение пакетов с 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



http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.303.7914&rep=rep1&type=pdf