понедельник, 31 августа 2015 г.

Несколько слов о QoS в D-Link

Есть некоторая путаница в этих терминах - QoS, CoS, ToS. По-видимому, это связано с историческими причинами, по большей части. Поэтому имеет смысл пояснить термины в двух словах.

QoS (Quality of Service — качество обслуживания) - общие соглашения об качестве трафика, которое в QoS определяется полосой пропусканий, задержкой при передаче, отклонениями при передаче (джиттер) и потерей пакетов. То есть это некое обобщенное название.

CoS (Class of Service) — поле из 3 бит в теге 802.1q Ethernet-кадра. Метод указания приоритета этими битами описывается в стандарте 802.1p.

ToS (Type of Service) — поле в IP-заголовке (1 байт). Предназначено для маркировки трафика на сетевом уровне.
Байт ToS состоит из 6 бит DSCP (Differentiated Services Code Point) и двух бит ECN (Explicit Congestion Notification). При этом ECN занимает младшие два бита и предназначено для явного уведомления о перезгрузке канала, а DSCP занимает старшие 6 бит и определяет приоритет пакета.

Коммутаторы DES-3028/DES-3200-xx (и не только) поддерживают управление трафиком на основе меток 802.1p и DSCP и позволяют выделить нужную полосу пропускания для приложений, критичных к задержке трафика, за счет меньшей скорости передачи остального трафика. Для этой цели используются "очереди". Коммутаторы DES-3028 имеют 4 очереди (от 0 до 3), а последние коммутаторы DES-3200-xx/C1 - 8 очередей (от 0 до 7). Каждый пакет, а, вернее, фрейм, попадает в одну из этих очередей по следующей схеме:
  • В случае наличия метки 802.1p - на основе этой метки.
  • В случае отсутствия метки 802.1p - на основе 802.1p default_priority для каждого порта.
  • В случае включения dscp trust - согласно dscp map .. dscp_priority (при этом метка 802.1p игнорируется).

То есть можно выбрать, направлять трафик в очереди либо по метке 802.1p, либо по DSCP. Лично я предпочитаю использовать DSCP, так как соответствующий байт в трафике очень легко посмотреть, чего не скажешь о 802.1p. Поэтому при использовании DSCP очень легко убедиться, что трафик "покрашен" как надо. И, напротив, очень сложно сделать это в случае использования 802.1p.

Так или иначе, в "очереди" попадает любой трафик, а не только "покрашенный". Дальше коммутатор должен этот трафик передать дальше при помощи одного из двух механизмов. Ниже приведена небольшая выдержка из официальной документации D-Link:
 
При использовании строго режима (Strict mode) обработки очередей пакеты из очереди высшего приоритета всегда обслуживаются первыми. Опустошение очередей происходит, строго следуя их приоритетам. Только тогда, когда очередь более высокого приоритета пуста, обслуживаются пакеты с более низким приоритетом.

В случае использовании взвешенного кругового режима обработки очередей (weighted round robin, WRR) количество пакетов, отправленное из каждой очереди, определяется присвоенным ей взвешенным коэффициентом.


Далее идет описание этого хитрого алгоритма WRR, суть которого сводится к тому, что передаются данные всех очередей, но в единицу времени данных из приоритетных очередей передается больше, чем из менее приоритетных.

Пример настройки DES-3200-28/C1:
config scheduling_mechanism strict
config dscp trust 1-28 state disable
config dscp trust 25 state  enable


Первая строка включает механизм strict, вторая - выключает приоритизацию DSCP на всех портах (переключает на 802.1p), а третья - включает ее на 25-м порту (предполагается, что это uplink-порт).