Quality of Service (QoS) - технология предоставления различным классам трафика различных приоритетов в обслуживании. Для классификации трафика используются стандартные поля в заголовках:
- 3-битный Class of Service (CoS) в Ethernet;
- 6-битный Differentiated Services Code Point (DSCP) в IP.
Исходя из значений данных заголовков полученным кадрам назначается внутренний приоритет (Internal Priority), в соответствии с которым на выходе кадры распределяются по внутренним очередям. Для распределения по очередям используются так называемые карты QoS: CoS - IntP, DSCP - IntP, Exp - IntP и далее IntP - Queue.
Алгоритмы управления очередями
Приоритет передачи трафика для внутренних очередей определяется одним из следующих алгоритмов:
- Strict Priority (SP) - строгий приоритет. Пока в более приоритетной очереди есть данные, которые необходимо передать, другие очереди не обрабатываются.
- Weighted Round Robin (WRR) - для каждой очереди определяется вес. Из очередей по порядку берется кратное весу очереди число кадров.
- Weighted Deficit Round Robin (WDRR) - для каждой очереди также устанавливается вес, определяющий количество бит, которые могут быть взяты из очереди. Количество бит пополняется каждый цикл.
Возможно комбинирование алгоритмов WRR/WDRR с SP, для этого достаточно задать нулевой вес для очереди, которую необходимо обрабатывать приоритетно.
Service policy
Позволяет классифицировать трафик на основе различных признаков (ACL, CoS, VLAN ID, IPv4 Precedence, DSCP, IPv6 FL) с возможностью дальнейшей перемаркировки, определения трафика в конкретную очередь, ограничения полосы пропускания и других действий. Рассмотрим создание service-policy подробнее:
Для классификации трафика создается карта классов:
Code Block |
---|
|
class {class_name} |
В режиме настройки класса выбирается критерий, по которому полученные кадры будут классифицированы:
Далее создается карта политик:
Code Block |
---|
|
policy-map {map_name} |
Карта политик ассоциируется с необходимым классом и выбирается действие для классифицированного трафика.
Перемаркировка:
Ограничение полосы пропускания:
Code Block |
---|
|
policy {bits_per_second} burst-group {burst-group-id} |
Действие сброса либо дальнейшей передачи трафика:
Code Block |
---|
|
[no] drop
[no] transmit |
Применять service-policy можно как к определенному порту в режиме его конфигурирования:
Code Block |
---|
|
service-policy {input | output} {name} |
так и к VLAN в режиме глобального конфигурирования:
Code Block |
---|
|
service-policy {input | output} {name} vlan {vid} |
Multicast policy
Позволяет задать метку CoS для маркировки multicast-трафика на коммутаторе. Можно задать разные значения CoS для разных источников и/или разных групп:
Code Block |
---|
|
ip multicast policy {source_ip/mask} {group_ip/mask} cos {0-7} |
Статистика QoS по очередям
На коммутаторах SNR серий S2995G, S3850G, S2990X, S300X, S300G и S4550 существует возможность просмотра статистики очередей QoS. Рассмотрим подробнее данный функционал:
Сначала необходимо включить возможность снятия статистики QoS в глобальной конфигурации:
Code Block |
---|
|
mls qos queue statistics enable |
Настройка функционала на этом заканчивается. Далее можно смотреть статистику по необходимому интерфейсу, например eth1/0/1:
Code Block |
---|
|
show mls qos queue statistics interface ethernet 1/0/1 |
В случае, если QoS настроен по дефолту, все пакеты попадают в нулевую очередь, соответственно в графе dropped будут отображены пакеты, отброшенные по причине превышения пропускной способности канала:
Code Block |
---|
|
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, но режим доверия можно изменить. Выставляется данный режим отдельно для каждого порта:
Code Block |
---|
|
[no] mls qos trust {cos | dscp} |
Info |
---|
|
Если режим доверия установлен одновременно и для значения CoS и для значения DSCP - приоритет отдается значению DSCP. |
Значение CoS для нетегированного входящего трафика можно установить в режиме конфигурирования порта:
Code Block |
---|
|
mls qos cos {0-7} |
Info |
---|
|
Чтобы добавить 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 и внутренней приоритизации равны:
Code Block |
---|
|
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 |
Также могут быть установлены индивидуальные соответствия:
Code Block |
---|
|
mls qos map dscp-intp {cos-dp | cos-intp | dscp-dp | dscp-dscp | dscp-intp} |
Для управления очередями по умолчанию используется алгоритм WRR. Изменить алгоритм и веса очередей можно в контексте конфигурирования порта:
Code Block |
---|
|
mls qos queue algorithm {sp | wdrr | wrr}
mls qos queue {wrr | wdrr} weight {weight0-weight7} |
Info |
---|
|
• Одновременное изменение значений CoS и DSCP не поддерживается чипом коммутатора. Изменить значение можно только для одной метки. • При изменении метки с помощью service-policy также необходимо изменять внутренний приоритет классифицированному трафику, в противном случае он будет выбран по первичному значению метки. • Не рекомендуется одновременно использовать service-policy на VLAN и на портах данной VLAN. |
Рассмотрим несколько примеров:
Expand |
---|
|
На нетегированных кадрах, полученных с порта 1/0/5, необходимо установить значение CoS равным 5, на порте 1/0/6 установить режим доверия DSCP. Кадры с CoS равным 5 должны обрабатываться по внутреннему приоритету 6. На порте 1/0/25 необходимо использовать алгоритм WDRR, при котором 6 очередь обрабатывается как Strict Priority. Устанавливаем значение CoS для нетегированного трафика на порте 1/0/5: Code Block |
---|
| Switch(config)#interface ethernet 1/0/5
Switch(config-if-ethernet1/0/5)#mls qos cos 5 |
Устанавливаем режим доверия DSCP на порте 1/0/6: Code Block |
---|
| 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: Code Block |
---|
| Switch(config)#mls qos map cos-intp 0 1 2 3 4 6 6 7 |
Изменяем алгоритм и вес 6 очереди на порте 1/0/25: Code Block |
---|
| 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 |
|
Expand |
---|
|
Ограничить исходящую скорость для сети 10.168.1.0/24 до 10Mbps с CBS 100KB на порте 1/0/1. Создаем карту классов: Code Block |
---|
| Switch(config)#class-map maxrate |
Устанавливаем соответствие карты классов необходимому критерию: Code Block |
---|
| 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: Code Block |
---|
| Switch(config)#policy burst 1 100 |
Создаем карту политик и привязываем к ней созданную карту классов: Code Block |
---|
| Switch(config)#policy-map maxrate
Switch(config-policymap-maxrate)#class maxrate |
Устанавливаем ограничение полосы пропускания: Code Block |
---|
| Switch(config-policymap-maxrate-class-maxrate)#policy 10000 burst-group 1 |
Привязываем карту политик к необходимому порту: Code Block |
---|
| Switch(config-if-ethernet1/0/1)#service-policy input maxrate |
|
Expand |
---|
|
Для кадров с VLAN ID 100 на порте 1/0/28 установить CoS равным 3, кадры должны быть помещены в соответствующую данному классу очередь. Создаем карту классов: Code Block |
---|
| Switch(config)#class-map vid100 |
Устанавливаем соответствие карты классов необходимому критерию: Code Block |
---|
| Switch(config-classmap-vid100)#match vlan 100 |
Создаем карту политик и привязываем к ней созданную карту классов: Code Block |
---|
| Switch(config)#policy-map vid100
Switch(config-policymap-vid100)#class vid100 |
Изменяем значение меток CoS и Internal Priority: Code Block |
---|
| Switch(config-policymap-vid100-class-vid100)#set cos 3
Switch(config-policymap-vid100-class-vid100)#set internal-priority 3 |
Привязываем карту политик к необходимому порту: Code Block |
---|
| 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 не доверяют ни одной из меток. Режим доверия можно изменить отдельно для каждого порта:
Code Block |
---|
|
[no] mls qos trust {cos | dscp | exp} |
Info |
---|
|
Если режим доверия установлен одновременно и для значения CoS и для значения DSCP - приоритет отдается значению DSCP. Если установлен и EXP, то он имеет наивысший приоритет. |
Значение CoS для нетегированного входящего трафика можно установить в режиме конфигурирования порта:
Code Block |
---|
|
mls qos cos {0-7} |
Кроме этого, данные модели позволяют выставить внутренний приоритет для нетегированного трафика в режиме конфигурирования порта:
Code Block |
---|
|
mls qos internal-priority {0-119} |
В случае, если необходимо изменить IntP для определенного порта, но метку CoS/DSCP/ExP оставить без изменений (в обычном варианте значение метки будет выбрано по IntP) на данных моделях создан функционал pass-through:
Code Block |
---|
|
pass-through-cos
pass-through-dscp-exp |
Полученные кадры распределяются по 8 внутренним очередям в соответствии с QoS-картой:
Code Block |
---|
|
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 |
Также могут быть установлены индивидуальные соответствия:
Code Block |
---|
|
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. Изменить веса очередей можно в глобальном режиме:dot1q1
Code Block |
---|
|
mls qos queue weight {weight0-weight7} |
Info |
---|
|
• На данных моделях приоритетными очередями (SP) - могут быть только очереди, начиная с последней. Их может быть несколько, но последовательность должна быть непрерывной; • Не рекомендуется одновременно использовать service-policy на VLAN и на портах данной VLAN; • При изменении метки с помощью service-policy также необходимо изменять внутренний приоритет классифицированному трафику, в противном случае он будет выбран по первичному значению метки. |
Рассмотрим еще один пример (примеры, указанные для серий S2962, S2965, S2982G и S2985G справедливы и для этой серии):
Expand |
---|
|
Для нетегированного трафика на порте 1/0/28 установить IntP равным 64, при этом значение CoS нужно оставить без изменений. Code Block |
---|
| 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 |
|