Поиск по этому блогу

28.07.2016

Настройка QoS на коммутаторе Juniper EX2200

Рассматривается приоритезация трафика ip-телефонии и видеоконференцсвязи на коммутаторе EX2200 путем изменения дефолтовых настроек class-of-service (CoS). К коммутатору подключены ip-телефоны. Для маркировки ip-пакетов от ip-PBX и других ip-телефонов используются следующие значения dscp:
  • 46 - ef – медиа (rtp)
  • 24 - cs3 – сигнализация (sip,h323,unistim)
  • 32 - cs4 – видео c кодеков(rtp)
  • 34 - af41 – видео с телефона, софтового клиента, кодека (rtp)
  • 0 – весь остальной трафик без маркировки.
Ранее писал про настройку QoS на коммутаторе Cisco 3750, но поскольку глубина просмотра небольшая, то буду повторяться.

Работа коммутатора EX2200 с дефолтовым CoS


Без лишней необходимости включать qos на коммутаторе не нужно. Как минимум, необходимо убедиться в корректной маркировке пакетов телефонами или кодеками, иначе будет только хуже. Если qos на коммутаторе не настраивался:
  • с высокой вероятностью дропов на портах нет;
  • все порты доверяют меткам cos и dscp по умолчанию;
  • для всех портов одинаковые настройки очередей, где для всего трафика, кроме network control выделено 95% буферов. Разделение происходит по маркировке, которую можно посмотреть в настройках CoS по умолчанию.
ex2200> show class-of-service forwarding-class 
Forwarding class ID Queue Policing priority SPU priority
best-effort 0 0 normal low
expedited-forwarding 1 5 normal low
assured-forwarding 2 1 normal low
network-control 3 7 normal low

ex2200> show class-of-service interface ge-0/0/1
Physical interface: ge-0/0/1, Index: 130
Queues supported: 8, Queues in use: 4
Scheduler map: , Index: 2
Congestion-notification: Disabled

Logical interface: ge-0/0/1.0, Index: 70
Object Name Type Index
Classifier ieee8021p-default ieee8021p 11

ex2200> show class-of-service classifier name ieee8021p-default
Classifier: ieee8021p-default, Code point type: ieee-802.1, Index: 11
Code point Forwarding class Loss priority
000 best-effort low
001 best-effort low
010 best-effort low
011 best-effort low
100 best-effort low
101 best-effort low
110 network-control low
111 network-control low
ex2200> show class-of-service classifier name dscp-default
Classifier: dscp-default, Code point type: dscp, Index: 7
Code point Forwarding class Loss priority
000000 best-effort low
000001 best-effort low
000010 best-effort low
000011 best-effort low
000100 best-effort low
000101 best-effort low
000110 best-effort low
000111 best-effort low
001000 best-effort low
001001 best-effort low
001010 best-effort low
001011 best-effort low
001100 best-effort low
001101 best-effort low
001110 best-effort low
001111 best-effort low
010000 best-effort low
010001 best-effort low
010010 best-effort low
010011 best-effort low
010100 best-effort low
010101 best-effort low
010110 best-effort low
010111 best-effort low
011000 best-effort low
011001 best-effort low
011010 best-effort low
011011 best-effort low
011100 best-effort low
011101 best-effort low
011110 best-effort low
011111 best-effort low
100000 best-effort low
100001 best-effort low
100010 best-effort low
100011 best-effort low
100100 best-effort low
100101 best-effort low
100110 best-effort low
100111 best-effort low
101000 best-effort low
101001 best-effort low
101010 best-effort low
101011 best-effort low
101100 best-effort low
101101 best-effort low
101110 best-effort low
101111 best-effort low
110000 network-control low
110001 network-control low
110010 network-control low
110011 network-control low
110100 network-control low
110101 network-control low
110110 network-control low
110111 network-control low
111000 network-control low
111001 network-control low
111010 network-control low
111011 network-control low
111100 network-control low
111101 network-control low
111110 network-control low
111111 network-control low

ex2200> show class-of-service code-point-aliases dscp
Code point type: dscp
Alias Bit pattern
af11 001010
af12 001100
af13 001110
af21 010010
af22 010100
af23 010110
af31 011010
af32 011100
af33 011110
af41 100010
af42 100100
af43 100110
be 000000
cs1 001000
cs2 010000
cs3 011000
cs4 100000
cs5 101000
cs6 110000
cs7 111000
ef 101110
nc1 110000
nc2 111000

ex2200> show class-of-service scheduler-map
Scheduler map: , Index: 2

Scheduler: , Forwarding class: best-effort, Index: 21
Transmit rate: 95 percent, Rate Limit: none, Buffer size: 95 percent, Buffer Limit: none, Priority: low
Excess Priority: low
Drop profiles:
Loss priority Protocol Index Name
High non-TCP 1
High TCP 1

Scheduler: , Forwarding class: network-control, Index: 23
Transmit rate: 5 percent, Rate Limit: none, Buffer size: 5 percent, Buffer Limit: none, Priority: low
Excess Priority: low
Drop profiles:
Loss priority Protocol Index Name
High non-TCP 1
High TCP 1

Настройка СoS на коммутаторе EX2200


Необходимо dscp ef и af поставить в соответствие с внутренними классами expedited-forwarding и assured-forwarding. Для этого настраивается т.н. classifiers. Можно создать и новые классы, но для примера пусть будет так. Перечислять все остальные биты dscp, как это сделано в класифире по умолчанию, смысла нет.
ex2200> show configuration class-of-service classifiers 
dscp custom-dscp {
forwarding-class network-control {
loss-priority low code-points [ cs6 cs7 ];
}
forwarding-class expedited-forwarding {
loss-priority low code-points ef;
}
forwarding-class assured-forwarding {
loss-priority low code-points [ cs3 cs4 af41 ];
}
}
Для каждого класса необходимо настроить шедулеры:
ex2200> show configuration class-of-service schedulers  
sc-ef {
buffer-size percent 10;
priority strict-high;
}
sc-af {
shaping-rate 20m;
buffer-size percent 10;
}
sc-nc {
buffer-size percent 5;
priority strict-high;
}
sc-be {
shaping-rate percent 80;
buffer-size {
remainder;
}
}
Названия выбираются произвольно, а процент выделенных буферов - по потребностям. Для шедулеров sc-ef и sc-nc включается механизм strict-priority. Для шедулера sc-af полоса ограничивается 20мбит/с, а для sc-be - 80% от полосы интерфейса. Далее шедулеры надо поставить в соответствие с внутренними классами:
ex2200> show configuration class-of-service scheduler-maps    
custom-maps {
forwarding-class network-control scheduler sc-nc;
forwarding-class expedited-forwarding scheduler sc-ef;
forwarding-class assured-forwarding scheduler sc-af;
forwarding-class best-effort scheduler sc-be;
}
В итоге, scheduler-map и classifier необходимо применить ко всем интерфейсам, описав их как шаблон, например:
ex2200> show configuration class-of-service interfaces 
ge-* {
scheduler-map custom-maps;
unit 0 {
classifiers {
dscp custom-dscp;
}
}
}
ae* {
scheduler-map custom-maps;
unit 0 {
classifiers {
dscp custom-dscp;
}
}
}
На интерфейсы можно применить одинаковые или индивидуальные настройки, т.е. можно написать разные scheduler и scheduler-maps для разных интерфейсов. В этом отношении коммутаторы juniper лучше, чем cisco 2960/3750, где всего два queue-set.
Итоговая конфигурация выглядит вот так:
ex2200> show configuration class-of-service 
classifiers {
dscp custom-dscp {
forwarding-class network-control {
loss-priority low code-points [ cs6 cs7 ];
}
forwarding-class expedited-forwarding {
loss-priority low code-points ef;
}
forwarding-class assured-forwarding {
loss-priority low code-points [ cs3 cs4 af41 ];
}
}
}
host-outbound-traffic {
forwarding-class network-control;
}
interfaces {
ge-* {
scheduler-map custom-maps;
unit 0 {
classifiers {
dscp custom-dscp;
}
}
}
ae* {
scheduler-map custom-maps;
unit 0 {
classifiers {
dscp custom-dscp;
}
}
}
}
scheduler-maps {
custom-maps {
forwarding-class network-control scheduler sc-nc;
forwarding-class expedited-forwarding scheduler sc-ef;
forwarding-class assured-forwarding scheduler sc-af;
forwarding-class best-effort scheduler sc-be;
}
}
schedulers {
sc-ef {
buffer-size percent 10;
priority strict-high;
}
sc-af {
shaping-rate 20m;
buffer-size percent 10;
}
sc-nc {
buffer-size percent 5;
priority strict-high;
}
sc-be {
shaping-rate percent 80;
buffer-size {
remainder;
}
}
}
Перед применением конфигурации необходимо ее проверить командой commit check. У меня возникала следующая ошибка:
[edit class-of-service interfaces]
'ge-*'
One or more "strict-high" priority queues have lower queue-numbers than priority "low" queues in custom-maps for ge-*. Ifd ge-* supports strict-high priority only on higher numbered queues.
error: configuration check-out failed
Это буквально означает, что нельзя указать priority "strict-high" только для 5ой очереди, когда у 7ой останется priority "low". Поэтому тут или переписать классы и изменить очередь у network-control, либо настроить для network-control priority "strict-high", что и было сделано.
После применения конфигурации часть фреймов будет в очередях потеряна, поэтому надо почистить счетчики и спустя короткое время проверить счетчики дропов, где значение отлично от нуля.
clear interfaces statistics all
show interfaces queue | match dropped | except " 0$"
Если счетчики дропов нарастают, то имеется ошибка в конфигурации. Например, если какой-то интерфейс не описан в class-of-service interfaces шаблоном или в явном виде, то трафик в классах дропнется. Ниже пример нормальной работы без потерь.
ex2200> show interfaces queue ge-0/0/22    
Physical interface: ge-0/0/22, Enabled, Physical link is Up
Interface index: 151, SNMP ifIndex: 531
Forwarding classes: 16 supported, 4 in use
Egress queues: 8 supported, 4 in use
Queue: 0, Forwarding classes: best-effort
Queued:
Transmitted:
Packets : 320486
Bytes : 145189648
Tail-dropped packets : 0
RL-dropped packets : 0
RL-dropped bytes : 0
Queue: 1, Forwarding classes: assured-forwarding
Queued:
Transmitted:
Packets : 317
Bytes : 169479
Tail-dropped packets : 0
RL-dropped packets : 0
RL-dropped bytes : 0
Queue: 5, Forwarding classes: expedited-forwarding
Queued:
Transmitted:
Packets : 624
Bytes : 138260
Tail-dropped packets : 0
RL-dropped packets : 0
RL-dropped bytes : 0
Queue: 7, Forwarding classes: network-control
Queued:
Transmitted:
Packets : 674
Bytes : 243314
Tail-dropped packets : 0
RL-dropped packets : 0
RL-dropped bytes : 0
Классы можно мониторить по snmp.