ipfw шейпинг

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
chocopie
ефрейтор
Сообщения: 55
Зарегистрирован: 2009-09-21 15:57:01

ipfw шейпинг

Непрочитанное сообщение chocopie » 2010-03-16 8:44:51

Здравствуйте. Возник вопрос.
У меня стоит dummynet шейпинг, все работает хорошо, однако как я понял в dummynet, по умолчанию, пакеты поступающие в очередь, не отбрасываются. Поэтому приоритезация конечно работает, но не так хорошо как бы этого хотелось. Для ясности ситуации поясню, что рассматриваю два типа трафика хттп - и различный игровой. Можно ли с помощью dummynet шейпить идентично ng_car'у, т.е. чтобы лишние пакеты с источника просто дропались, и не создавали в очереди давление, из-за чего вырастает задержка до серверов?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

hranitel_y2k
сержант
Сообщения: 154
Зарегистрирован: 2007-12-10 21:04:35

Re: ipfw шейпинг

Непрочитанное сообщение hranitel_y2k » 2010-03-16 9:33:21

chocopie писал(а):Здравствуйте. Возник вопрос.
У меня стоит dummynet шейпинг, все работает хорошо, однако как я понял в dummynet, по умолчанию, пакеты поступающие в очередь, не отбрасываются. Поэтому приоритезация конечно работает, но не так хорошо как бы этого хотелось. Для ясности ситуации поясню, что рассматриваю два типа трафика хттп - и различный игровой. Можно ли с помощью dummynet шейпить идентично ng_car'у, т.е. чтобы лишние пакеты с источника просто дропались, и не создавали в очереди давление, из-за чего вырастает задержка до серверов?

Отбрасываюся в любом случае,когда количество пакетов превышает размер очереди. Иначе шейпер не работал бы.

Код: Выделить всё

The following ipfw commands control dummynet pipes

    * ipfw pipe NN config ...
      This command is used to create or reconfigure a pipe. NN is the numeric identifier (between 1 and 65535) of the pipe. Issuing multiple time the configuration command results in the pipe being reconfigured.

The following parameters can be configured for a pipe, adding the command in the pipe config... line:

    * Bandwidth: bw NNunit
      NN is the bandwidth assigned to the pipe, unit (which must follow the number with no intervening spaces) can be any of bit/s Kbit/s Mbit/s Byte/s KByte/s MByte/s or non-ambiguous abbreviations.
      A bandwidth of 0 (or no bandwidth) results in no bandwidth limitations (hence, no queues will ever build up).
    * Queue size: queue NN [unit]
      Sets the queue size, in slots if only NN is specified, otherwise in Bytes or KBytes. When there is no room in the queue, packets are dropped. The default queue size is 50 slots.
Все гениальное - просто!

Аватара пользователя
agat
мл. сержант
Сообщения: 138
Зарегистрирован: 2009-10-27 1:21:55
Откуда: Солнечная система, планета Земля, Россия
Контактная информация:

Re: ipfw шейпинг

Непрочитанное сообщение agat » 2010-03-16 16:32:50

red, gred
unixfaq.ru
Сокращение RED означает "Random Early Detection". Метод используется для выравнивания всплесков трафика.

Основным критерием метода является так называемая перегрузка.

В качестве показателя перегрузки avg используется вычисляемое среднее значение длины очереди пакетов, принадлежащей к определенной сессии TCP. Использование усредненного, а не мгновенного значения очереди позволяет отделить кратковременные перегрузки, которые могут быть нормально обработаны устройством и сетью, от длительных перегрузок, которые могут утопить сеть.

Алгоритмически это выглядит так:

В момент прихода пакета
; ; if (очередь не пуста)
; ; ; ; avg = (1 - w_q)*avg + w_q*q
; ; else
; ; ; ; m = f(time - q_time)
; ; ; ; avg = (1 - w_q)^m * avg;

где

avg -средний размер очереди
q_time - "start of queue idle time"
q - размер очереди

w_q - вес очереди (фиксированный параметр)

f() - линейная функий от времени

В /usr/src/sys/netinet/ip_dummynet.c по этому поводу написано следующее:

* RED algorithm
*
* RED calculates the average queue size (avg) using a low-pass filter
* with an exponential weighted (w_q) moving average:
* avg <- (1-w_q) * avg + w_q * q_size
* where q_size is the queue length (measured in bytes or * packets).
*
* If q_size == 0, we compute the idle time for the link, and set
* avg = (1 - w_q)^(idle/s)
* where s is the time needed for transmitting a medium-sized packet.

- что полностью согласуется с приведенными выше формулами.

Далее в алгоритме вводятся два порога уровня перегрузки: min_th и max_th. Когда уровень перегрузки ниже первого порога min_th, то пакеты не отбрасываются. Если уровень перегрузки находится между двумя порогами, пакеты отбрасываются с линейно возврастающей вероятностью из диапазона от 0 до конфигурируемой величины max_p, которая достигается при достижении второго порога max_th. Выше порога max_th отбрасываются все пакеты.

Такой метод вычисления позволяет сглаживать всплески трафика - для сравнения в первой из статей (см. ниже) на одном графике приводятся и изменение размера очереди q, и усредненного размера очереди (avg) от времени. В той же статье есть выкладки на тему значений w_q.

При gentle RED ситуация выглядит чуть сложнее:

Если перегрузки лежит в интервале от min_th до max_th, то пакеты отбрасываются с линейно возрастающей от 0 до max_p вероятностью. Когда перегрузка превышает max_th, но не превышет 2*max_th, пакеты отбрасываются не все (как в случае RED), а с линейно возрастающей от max_p до 1 вероятностью. Все пакеты отбрасываются только после превышения перегрузки канала значения 2*max_th.

Вот как это сделано в ip_dummynet.c:

если длина очереди > max_th, то в случае gred вероятность отбрасывания пакета вычисляется как
; ; p_b = c_3 * avg - c_4
где c_3 = (1 - max_p) / max_th
; ; c_4 = 1 - 2 * max_p

В случае просто RED пакет отбрасывается.

При загрузке очереди, большей min_th, но меньшей max_th, функция вероятности одинакова и выглядит след. образом:
; ; p_b = c_1 *avg - c_2
где c_1 = max_p / (max_th - min_th),
; ; c_2 = max_p * min_th / (max_th - min_th)