Quality of Service (QoS) - технология предоставления различным классам трафика различных приоритетов в обслуживании. Для классификации трафика используются стандартные поля в заголовках:

Исходя из значений данных заголовков полученным кадрам назначается внутренний приоритет (Internal Priority), в соответствии с которым на выходе кадры распределяются по внутренним очередям. Для распределения по очередям используются так называемые карты QoS: CoS - IntP, DSCP - IntP, Exp - IntP и далее IntP - Queue.

Алгоритмы управления очередями

Приоритет передачи трафика для внутренних очередей определяется одним из следующих алгоритмов:

Возможно комбинирование алгоритмов WRR/WDRR с SP, для этого достаточно задать нулевой вес для очереди, которую необходимо обрабатывать приоритетно.

Service policy

Позволяет классифицировать трафик на основе различных признаков (ACL, CoS, VLAN ID, IPv4 Precedence, DSCP, IPv6 FL) с возможностью дальнейшей перемаркировки, определения трафика в конкретную очередь, ограничения полосы пропускания и других действий. Рассмотрим создание service-policy подробнее:

Для классификации трафика создается карта классов:

class {class_name}

В режиме настройки класса выбирается критерий, по которому полученные кадры будут классифицированы:

match {...}

Далее создается карта политик:

policy-map {map_name}

Карта политик ассоциируется с необходимым классом и выбирается действие для классифицированного трафика.

Перемаркировка:

set {...}

Ограничение полосы пропускания:

policy {bits_per_second} burst-group {burst-group-id}

Действие сброса либо дальнейшей передачи трафика:

[no] drop
[no] transmit

Применять service-policy можно как к определенному порту в режиме его конфигурирования:

service-policy {input | output} {name}

так и к VLAN в режиме глобального конфигурирования:

service-policy {input | output} {name} vlan {vid}

Multicast policy

Позволяет задать метку CoS для маркировки multicast-трафика на коммутаторе. Можно задать разные значения CoS для разных источников и/или разных групп:

ip multicast policy {source_ip/mask} {group_ip/mask} cos {0-7}

Статистика QoS по очередям

На коммутаторах SNR серий S2995G, S3850G, S2990X, S300X, S300G и S4550 существует возможность просмотра статистики очередей QoS. Рассмотрим подробнее данный функционал:

Сначала необходимо включить возможность снятия статистики QoS в глобальной конфигурации:

mls qos queue statistics enable

Настройка функционала на этом заканчивается. Далее можно смотреть статистику по необходимому интерфейсу, например eth1/0/1:

show mls qos queue statistics interface ethernet 1/0/1

В случае, если QoS настроен по дефолту, все пакеты попадают в нулевую очередь, соответственно в графе dropped будут отображены пакеты, отброшенные по причине превышения пропускной способности канала:

Port:Ethernet1/0/1
-----------------------------------------
Queue Passed(packet) Dropped(packet)
0            2827022         2236755
1                  0               0
2                  0               0
3                  0               0
4                  0               0
5                  0               0
6                  0               0
7                  0               0

Снятие статистики дропов доступно по SNMP, OID: 1.3.6.1.4.1.40418.7.100.11.2.17.1.4.a.b, где:

a - номер порта;
b - номер очереди.

Настройка QoS на коммутаторах SNR

SNR-S2962, SNR-S2965, SNR-S2982G, SNR-S2985G

По умолчанию коммутаторы SNR-S2962(5) и SNR-S2982(5)G доверяют значению СoS, но режим доверия можно изменить. Выставляется данный режим отдельно для каждого порта:

[no] mls qos trust {cos | dscp}


Если режим доверия установлен одновременно и для значения CoS и для значения DSCP - приоритет отдается значению DSCP.

Значение CoS для нетегированного входящего трафика можно установить в режиме конфигурирования порта:

mls qos cos {0-7}


Чтобы добавить CoS 802.1p к внешнему тегу (s-vid) QinQ нужно отключить доверие существующей метке с помощью 'no mls qos trust cos' и прописать нужный CoS 802.1p с помощью 'mls qos cos', к внутреннему тегу (c-vid) CoS 802.1p можно добавить с помощью policy-map.

Полученные кадры распределяются по 8 внутренним очередям в соответствии с QoS-картой. По умолчанию значения CoS и внутренней приоритизации равны:

Ingress COS-TO-Internal-Priority map:
COS: 0 1 2 3 4 5 6 7
-----------------------------------------
INTP: 0 1 2 3 4 6 6 7

Ingress DSCP-TO-Internal-Priority map:
d1:d2     0 1 2 3 4 5 6 7 8 9
0:        0 0 0 0 0 0 0 0 1 1
1:        1 1 1 1 1 1 2 2 2 2
2:        2 2 2 2 3 3 3 3 3 3
3:        3 3 4 4 4 4 4 4 4 4
4:        5 5 5 5 5 5 5 5 6 6
5:        6 6 6 6 6 6 7 7 7 7
6:        7 7 7 7

Также могут быть установлены индивидуальные соответствия:

mls qos map dscp-intp {cos-dp | cos-intp | dscp-dp | dscp-dscp | dscp-intp}

Для управления очередями по умолчанию используется алгоритм WRR. Изменить алгоритм и веса очередей можно в контексте конфигурирования порта:

mls qos queue algorithm {sp | wdrr | wrr}
mls qos queue {wrr | wdrr} weight {weight0-weight7}


• Одновременное изменение значений CoS и DSCP не поддерживается чипом коммутатора. Изменить значение можно только для одной метки.
• При изменении метки с помощью service-policy также необходимо изменять внутренний приоритет классифицированному трафику, в противном случае он будет выбран по первичному значению метки.
• Не рекомендуется одновременно использовать service-policy на VLAN и на портах данной VLAN.

Рассмотрим несколько примеров:

На нетегированных кадрах, полученных с порта 1/0/5, необходимо установить значение CoS равным 5, на порте 1/0/6 установить режим доверия DSCP. Кадры с CoS равным 5 должны обрабатываться по внутреннему приоритету 6. На порте 1/0/25 необходимо использовать алгоритм WDRR, при котором 6 очередь обрабатывается как Strict Priority.

Устанавливаем значение CoS для нетегированного трафика на порте 1/0/5:

Switch(config)#interface ethernet 1/0/5
Switch(config-if-ethernet1/0/5)#mls qos cos 5

Устанавливаем режим доверия DSCP на порте 1/0/6:

Switch(config)#interface ethernet 1/0/6
Switch(config-if-ethernet1/0/6)#no mls qos trust qos
Switch(config-if-ethernet1/0/6)#mls qos trust dscp

Изменяем QoS-карту для CoS:

Switch(config)#mls qos map cos-intp 0 1 2 3 4 6 6 7

Изменяем алгоритм и вес 6 очереди на порте 1/0/25:

Switch(config)#interface ethernet 1/0/25
Switch(config-if-ethernet1/0/25)#mls qos queue algorithm wdrr
Switch(config-if-ethernet1/0/25)#mls qos queue wdrr weight 1 2 4 8 16 0 32 64



Ограничить исходящую скорость для сети 10.168.1.0/24 до 10Mbps с CBS 100KB на порте 1/0/1.

Создаем карту классов:

Switch(config)#class-map maxrate

Устанавливаем соответствие карты классов необходимому критерию:

Switch(config)#access-list 1 permit 10.168.1.0 0.0.0.255
Switch(config)#class-map maxrate
Switch(config-classmap-maxrate)#match access-group 1

Настраиваем размер burst:

Switch(config)#policy burst 1 100

Создаем карту политик и привязываем к ней созданную карту классов:

Switch(config)#policy-map maxrate
Switch(config-policymap-maxrate)#class maxrate

Устанавливаем ограничение полосы пропускания:

Switch(config-policymap-maxrate-class-maxrate)#policy 10000 burst-group 1

Привязываем карту политик к необходимому порту:

Switch(config-if-ethernet1/0/1)#service-policy input maxrate



Для кадров с VLAN ID 100 на порте 1/0/28 установить CoS равным 3, кадры должны быть помещены в соответствующую данному классу очередь.

Создаем карту классов:

Switch(config)#class-map vid100

Устанавливаем соответствие карты классов необходимому критерию:

Switch(config-classmap-vid100)#match vlan 100

Создаем карту политик и привязываем к ней созданную карту классов:

Switch(config)#policy-map vid100
Switch(config-policymap-vid100)#class vid100

Изменяем значение меток CoS и Internal Priority:

Switch(config-policymap-vid100-class-vid100)#set cos 3
Switch(config-policymap-vid100-class-vid100)#set internal-priority 3

Привязываем карту политик к необходимому порту:

Switch(config)#interface ethernet 1/0/28
Switch(config-if-ethernet1/0/28)#service-policy input vid100


SNR-S2995G, SNR-S3850G

По умолчанию коммутаторы SNR-S2995G и SNR-S3850G не доверяют ни одной из меток. Режим доверия можно изменить отдельно для каждого порта:

[no] mls qos trust {cos | dscp | exp}


Если режим доверия установлен одновременно и для значения CoS и для значения DSCP - приоритет отдается значению DSCP. Если установлен и EXP, то он имеет наивысший приоритет.

Значение CoS для нетегированного входящего трафика можно установить в режиме конфигурирования порта:

mls qos cos {0-7}

Кроме этого, данные модели позволяют выставить внутренний приоритет для нетегированного трафика в режиме конфигурирования порта:

mls qos internal-priority {0-119}

В случае, если необходимо изменить IntP для определенного порта, но метку CoS/DSCP/ExP оставить без изменений (в обычном варианте значение метки будет выбрано по IntP) на данных моделях создан функционал pass-through:

pass-through-cos
pass-through-dscp-exp

Полученные кадры распределяются по 8 внутренним очередям в соответствии с QoS-картой:

Ingress COS-TO-Internal-Priority map:
COS:  0 1  2  3  4  5  6  7
----------------------------
INTP: 0 8 16 24 32 40 48 56

Ingress DSCP-TO-Internal-Priority map:
d1 : d2      0   1  2  3  4  5  6  7  8  9
0:           0   1  2  3  4  5  6  7  8  9
1:           10 11 12 13 14 15 16 17 18 19
2:           20 21 22 23 24 25 26 27 28 29
3:           30 31 32 33 34 35 36 37 38 39
4:           40 41 42 43 44 45 46 47 48 49
5:           50 51 52 53 54 55 56 57 58 59
6:           60 61 62 63

Также могут быть установлены индивидуальные соответствия:

mls qos map dscp-intp {cos-cos | cos-dscp | cos-intp | dscp-cos | dscp-dscp | dscp-intp | exp-intp | intp-cos | intp-dp | intp-dscp | intp-exp | intp-intp | intp-queue}

Как мы видим по QoS-картам, данные модели позволяют управлять метками в обоих направлениях, а не только ingress.

Для управления очередями по умолчанию используется алгоритм WDRR. Изменить веса очередей можно в глобальном режиме:

mls qos queue weight {weight0-weight7}


• На данных моделях приоритетными очередями (SP) - могут быть только очереди, начиная с последней. Их может быть несколько, но последовательность должна быть непрерывной;
• Не рекомендуется одновременно использовать service-policy на VLAN и на портах данной VLAN;
• При изменении метки с помощью service-policy также необходимо изменять внутренний приоритет классифицированному трафику, в противном случае он будет выбран по первичному значению метки.

Рассмотрим еще один пример (примеры, указанные для серий S2962, S2965, S2982G и S2985G справедливы и для этой серии):

Для нетегированного трафика на порте 1/0/28 установить IntP равным 64, при этом значение CoS нужно оставить без изменений.

Switch(config)#interface ethernet 1/0/28
Switch(config-if-ethernet1/0/28)#pass-through-cos
Switch(config-if-ethernet1/0/28)#mls qos internal-priority 64