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 подробнее:
Для классификации трафика создается карта классов:
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 для нетегированного входящего трафика можно установить в режиме конфигурирования порта:
mls qos cos {0-7}
Важно!
Полученные кадры распределяются по 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.
Рассмотрим несколько примеров:
SNR-S2995G, SNR-S3850G
По умолчанию коммутаторы SNR-S2995G и SNR-S3850G не доверяют ни одной из меток. Режим доверия можно изменить отдельно для каждого порта:
[no] mls qos trust {cos | 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. Изменить веса очередей можно в глобальном режиме:dot1q1
mls qos queue weight {weight0-weight7}
Важно!
• Не рекомендуется одновременно использовать service-policy на VLAN и на портах данной VLAN;
• При изменении метки с помощью service-policy также необходимо изменять внутренний приоритет классифицированному трафику, в противном случае он будет выбран по первичному значению метки.
Рассмотрим еще один пример (примеры, указанные для серий S2962, S2965, S2982G и S2985G справедливы и для этой серии):