Strict priority (SP) — это алгоритм приоритеных очередей, который предполагает передачу всех пакетов/кадров наиболее приоритетной очереди и переход к обработке менее приоритетной, только после того как высокоприоритетная станет пустой. При этом, если в процессе обработки низкоприоритетной очереди приходит пакет в высокоприоритетную, диспетчер переключится на нее. SP подходит для критически чувствительных к потерям типов трафика, к примеру голоса или пакетов сигнальных протоколов, наподобие bfd, так как может обеспечить им гарантированную передачу.
Weighted Round Robin (WRR) - это алгоритм, который обеспечивает обработку очередей в соответствии с их весом. Диспетчер циклически проходит по всем очередям и пропускает пакеты из каждой кратно ее весу, это позволяет не допустить использование отдельным приложением всех доступных к пересылке ресурсов.
В случае использования комбинации SP и WRR на одном интерфейсе, очереди с алгоритмом SP будут обслуживаться раньше очередей WRR.
В эксплуатации WRR не имеет практического применения, так как ограничение полосы пропускания, установленное весами, работает исключительно при переполнения полосы пропускания порта. В случаях, когда поток трафика действительно превышает пропускную способность порта, то трафик будет ограничиваться по всем очередям в соответствии с установленными весами. К примеру, при работе WRR, чувствительный к потерям трафик (UDP трафик) пострадает, даже если ему выставлен высокий вес, поэтому в эксплуатации рекомендуется применять SP с целью исключения дропов по очередям, где протекают важные сервисы.
Далее рассмотрим, как работают эти механизмы на практике при помощи iperf. Уточню, что полученные результаты разнятся с ожидаемыми с небольшой погрешностью, это является нормальным и ожидаемым поведением. Для более точного измерения необходимо использовать генераторы трафика.

Ниже представлена конфигурация коммутатора:
console#show running-config
vlan database
vlan 16
exit
!
qos advanced ports-trusted
qos advanced-mode trust dscp
!
priority-queue out num-of-queues 5
wrr-queue bandwidth 1 2 3
!
interface GigabitEthernet1/0/15
switchport access vlan 16
exit
!
interface GigabitEthernet1/0/16
traffic-shape 100000
switchport access vlan 16
exit
!
!
end
Пояснение по некоторым командам QoS:
qos advanced ports-trusted - команда разрешает коммутатору использовать QoS в расширенном режиме конфигурации (advanced), включающий полный перечень команд настройки QoS. В этом подрежиме (ports-trusted) все пакеты направляются в выходную очередь на основании dscp/cos в пришедших пакетах/кадрах.
qos advanced-mode trust dscp - при помощи этой команды, мы говорим коммутатору доверять исключительно значению DSCP в IPv4/IPv6-пакетах.
priority-queue out num-of-queues 5 - командой задается количество приоритетных очередей, которые обрабатываются согласно SP (установлено 5).
wrr-queue bandwidth 1 2 3 - командой присваивается вес исходящим очередям, используемый механизмом WRR, веса назначены для 1-ой, 2-ой, 3-ей очередям соответственно.
В тестах также будут участвовать следующие dscp
| HEX DSCP | DSCP | Очередь согласно Qos Map, Dscp -queue |
| 0xb | 02 | 1 |
| 0x0 | 00 | 2 |
| 0x2E | 11 | 3 |
| 0x45 | 17 | 4 |
| 0x70 | 28 | 5 |
| 0x85 | 33 | 6 |
| 0xc2 | 48 | 7 |
В описании следующих опытов будет сказано, что мы отправляем поток данных с определенной меткой dscp, чтобы трафик был направлен в необходимую нам очередь. Информация о том, в какую очередь будет отправлен трафик в зависимисоти от метки DSCP, содержится в таблице qos map dscp-queue. Посмотреть эту таблицу можно при помощи следующей команды: show qos map dscp-queue
Ниже пример вывода команды:
console#show qos map dscp-queue
Dscp-queue map:
d1 : d2 0 1 2 3 4 5 6 7 8 9
-------------------------------------
0 : 02 01 01 01 01 01 01 01 01 01
1 : 03 03 03 03 03 03 07 04 04 04
2 : 04 04 04 04 07 05 05 05 05 05
3 : 05 05 07 06 06 06 06 06 06 06
4 : 07 08 08 08 08 08 08 08 07 07
5 : 07 07 07 07 07 07 07 07 07 07
6 : 07 07 07 07
d1 - это первый символ метки DSCP
d2 - это второй символ метки DSCP
Соответственно, трафик с меткой DSCP 27 попадёт в пятую очередь.
Проверка алгоритма Strict Priority (SP)
Описание проводимого опыта:
Отправим с iperf-клиента три потока данных по 50 Мбит/сек с такими метками dscp, чтобы на коммутаторе они были выставлены в 4,5,6 выходящие очереди. Как отображено выше, согласно SP, пакеты будут обрабатываться сначала в наиболее приоритетных очередях. Таким образом, сначала будет обрабатываться поток данных в 6-ой очереди: это означает, что из общей пропускной способности в 100 Мбит/сек будет задействовано 50 Мбит/сек, далее поток данных в 5-ой очереди точно также займет 50 Мбит/сек из оставшихся 50 Мбит/сек, это означает то, что для прохождения трафика в 4-ой очереди не останется ресурсов.
Ожидаемый результат:
| Пропускная способность с клиента | Пропускная способность на сервере | |
| Поток данных в 4-ой очереди | 50 | 0 |
| Поток данных в 5-ой очереди | 50 | 50 |
| Поток данных в 6-ой очереди | 50 | 50 |
Отправляем три потока 50 Мбит/сек в 4,5,6 очереди соответственно:
iperf -c 192.168.16.1 -u -t 20 -S 0x45 -b 50m -i
iperf -c 192.168.16.1 -u -t 20 -S 0x70 -b 50m -i
iperf -c 192.168.16.1 -u -t 20 -S 0x85 -b 50m –i
На клиенте iperf:
На сервере iperf:
По полученным данным мы видим, что пропускная способность потоков с 50/50/50 изменилась на ~49.9/47/3. Результат соответствует ожиданиям с учетом погрешности, обусловленной использованием iperf.
Проверка алгоритма Weighted Round Robin (WRR).
Описание проводимого опыта:
Отправим с iperf-клиента три потока данных по 50 Мбит/сек с такими метками dscp, чтобы на коммутаторе они были выставлены в 1,2,3 очереди. Согласно алгоритму WRR пакеты будут обрабатываться в соответствии с установленным весами, ранее мы прописали команду:
wrr-queue bandwidth 1 2 3
Таким образом мы установили, что вес первой очереди равен единице, вес второй - двум, третьей - трём. Теперь рассчитаем максимальное значение пропускной способности по каждой очереди.
Для этого необходимо сложить установленные веса:
1 + 2 +3 = 6 ед.
Затем соотношение веса очереди к общему весу умножаем на пропускную способность порта.
1/6*100 = 16,(6) Мбит/сек - пропускная способность первой очереди.
2/6*100 = 33,(3) Мбит/сек - пропускная способность второй очереди.
3/6*100 = 50 Мбит/сек - пропускная способность третьей очереди.
Ожидаемый результат:
| Полоса пропускания на клиенте | Полоса пропускания на сервере | |
| Поток данных в 1-ой очереди | 50 | 16,6 |
| Поток данных в 2-ой очереди | 50 | 33,3 |
| Поток данных в 3-ей очереди | 50 | 50 |
Отправляем три потока 50 Мбит/сек в 1,2,3 очереди соответственно:
iperf -c 192.168.16.1 -u -t 20 -S 0xb -b 50m -i
iperf -c 192.168.16.1 -u -t 20 -S 0x0 -b 50m -i
iperf -c 192.168.16.1 -u -t 20 -S 0x2E -b 50m -i
С iperf-клиента:
По полученным данным мы видим, что полоса пропускания потоков с 50/50/50 изменилась на ~18,4/33,4/48,6. Результат соответствует ожиданиям с учетом погрешности, обусловленной использованием iperf.
Проверка работы SP&WRR
Описание проводимого опыта:
Отправим с iperf-клиента четыре потока данных по 50 Мбит/сек с такими метками dscp, чтобы на коммутаторе они были выставлены в 1,2,3 и 6 очереди. Из этих очередей 1,2,3 - обслуживаются WRR, а 6 – SP. При совместном использовании SP и WRR, сначала будут обслуживаться очереди с алгоритмом SP, основываясь на этом, рассчитаем ожидаемый результат:
Общая полоса пропускания составляет 100 Мбит/сек, из неё вычитаем 50 Мбит/сек занимаемые потоком данных в 6-ой очереди, обслуживаемой SP.
Рассчитаем полосу пропускания для трех оставшихся очередей:
100-50=50 Мбит/сек
Находим общий вес очередей:
1 + 2 +3 = 6 ед.
Затем соотношение веса очереди к общему весу умножаем на свободную полосу пропускания.
1/6*50 = 8,(3) Мбит/сек - пропускная способность первой очереди.
2/6*50 = 16,(6) Мбит/сек - пропускная способность второй очереди.
3,6*50 = 25 Мбит/сек - пропускная способность третьей очереди.
Ожидаемый результат:
| Полоса пропускания на клиенте | Полоса пропускания на сервере | |
| Поток данных в 1-ой очереди | 50 | 8,3 |
| Поток данных в 2-ой очереди | 50 | 16,6 |
| Поток данных в 3-ей очереди | 50 | 25 |
| Поток данных в 6-ой очереди | 50 | 50 |
iperf -c 192.168.16.1 -u -t 30 -S 0xb -b 50m -i
iperf -c 192.168.16.1 -u -t 30 -S 0x0 -b 50m -i
iperf -c 192.168.16.1 -u -t 30 -S 0x2E -b 50m –i
iperf -c 192.168.16.1 -u -t 30 -S 0x85 -b 50m –i
Вывод с iperf-клиента
Вывод с iperf-сервера:
По полученным данным мы видим, что полоса пропускания потоков с 50/50/50/50 изменилась на ~9,3/16,5/24,4/50. Результат соответствует ожиданиям с учетом погрешности, обусловленной использованием iperf.













Комментарии (11)