QoS в ExtremeXOS

Материал из Xgu.ru

Перейти к: навигация, поиск

< ExtremeXOS

Содержание

[править] Общие сведения

Концептуально, реализация политики QoS на оборудовании Extreme Networks осуществляется в 3 этапа.

  • Создание и определение параметров нужного количества QoS-профайлов.
    QoS-профайл - это отдельная реализованная аппаратно очередь с
    • заданным относительно других QoS-профайлов приоритетом (в случае Strict Priority), либо весом очереди (в случае WRR);
    • заданным режимом планировщика (Strict Priority или WRR);
    • заданными параметрами гарантированной (CIR) и максимально возможной (PR) исходящей полосы пропускания на каждом интерфейсе;
    • заданными величинами буферного пространства на каждом отдельном интерфейсе;
    • заданными порогами WRED;
    • ассоциированными метками 802.1p CoS и DiffServ DSCP, которые могут устанавливаться на трафик, попадающий в этот QoS-профайл, пришедший с заданных портов.
  • Создание трафик-групп, выделяющих приходящий на коммутатор трафик по одному или нескольким критериям и формирующих на основе этих критериев группы.
  • Применение политики QoS путём установления соответствия настроенным трафик-группам QoS-профайлов с желаемыми параметрами обработки для той или иной группы.

[править] Классификация (формирование трафик-групп)

Набор критериев, выделяющий трафик из общего потока определяет трафик-группу. Пакеты на основе критериев

  • имеющихся меток 802.1p и DSCP;
  • входящего порта;
  • ingress ACL на портах;
  • VLAN ID;

могут распределяться по разным трафик-группам, которые позже назначаются на обработку QoS-профайлам.

Если входящий пакет подпадает под критерии сразу нескольких трафик-групп, то окончательный выбор трафик-группы осуществляется согласно следующему приоритету критериев (в порядке от наибольшего приоритета к наименьшему, для платформы Summit и SummitStack).

  1. ACL на основе IP-адресов;
  2. ACL на основе MAC-адресов;
  3. метка 802.1p CoS;
  4. входящий порт (QoS-профайл по-умолчанию на порту);
  5. VLAN ID;
  6. метка DSCP DiffServ.

[править] Задание трафик-групп на основе ACL

  1. Создать файл политики ACL и добавить в него правила.
    1. использовать условия match для выделения трафика в группу;
    2. к выделенному трафику применить следующие возможные модификаторы действия permit:
      • qosprofile <qpX> - определить QoS-профайл в который попадает трафик. Возможен в ingress и egress ACL.
      • replace-dscp - заменить метку DSCP в пакете на заданную в QoS-профайле. Возможен в ingress и egress ACL.
      • replace-dot1p - заменить метку 802.1p CoS в пакете на заданную в QoS-профайле. Возможен в ingress и egress ACL.
      • replace-dot1p-value <value> - заменить метку 802.1p CoS в пакете на указанную. Возможен в ingress и egress ACL.
      • meter <name> - применить к трафик-группе полисинг. На Summit и SummitStack возможен только в ingress ACL.
  2. Применить созданный и отредактированный файл политики ACL к портам, где нужно выделять трафик-группы. Возможно применить к определённым портам, всем портам или всем портам во влане.

[править] Задание трафик-групп на основе 802.1p CoS

Конфигурация коммутатора по-умолчанию уже определяет эти трафик-группы. Можно указать, использовать ли на портах критерий 802.1p CoS для распределения трафика по QoS-профайлам, и правила мапинга CoS -> QoS-профайл.

{enable | disable} dot1p examination ports {<portlist> | all}           - на указанных портах распределять ли входящие фреймы по QoS-профайлам исходя из значения меток 802.1p;
{enable | disable} dot1p examination inner-tag ports {<portlist> | all} - на указанных портах учитывать ли внутренний тег QinQ при распределении входящих фреймов по QoS-профайлам;
configure dot1p type <CoS> qosprofile <qpX>                             - задание правил мапинга входящих меток 802.1p CoS в QoS-профайлы;
show dot1p                                                              - посмотреть существующий мапинг 802.1p CoS -> QoS-профайл.

[править] Задание трафик-групп на основе DiffServ DSCP

Конфигурация коммутатора по-умолчанию уже определяет эти трафик-группы. Можно указать, использовать ли на портах критерий DiffServ DSCP для распределения трафика по QoS-профайлам, и правила мапинга DSCP -> QoS-профайл. На платформах Summit, SummitStack включение на 1G-портах классификации на основе DSCP (diffserv examination) неизбежно приводит к включению перебива меток 802.1p CoS.

{enable | disable} diffserv examination ports {<portlist> | all}          - на указанных портах распределять ли входящие пакеты по QoS-профайлам исходя из значений меток DSCP (так же приводит к включению перебива меток 802.1p);
configure diffserv examination code-point <DSCP> qosprofile <qpX>         - задание првил мапинга входящих меток DSCP в QoS-профайлы;
unconfigure diffserv examination ports [<port_list> | all]                - вернуть мапинг по-умолчанию;
show diffserv examination                                                 - посмотреть существующий мапинг DSCP -> QoS-профайл.

[править] Задание трафик-групп на основе входящего порта

configure ports <port> qosprofile qp<X>                              - назначение входящего трафика порта в QoS-профайл с нужными параметрами маркировки 

Пример:

create qosprofile qp<X>                                              - создание нового qos-профайла (если ещё не создан)
configure diffserv replacement qosprofile qp<X> code-point <dscp>    - трафик, попадающий в qos-профайл, метить указанным кодом DSCP
configure ports <port> qosprofile qp<X>                              - назначение входящего трафика порта в QoS-профайл с нужными параметрами маркировки 
enable diffserv replacement ports <port>                             - разрешить на указанном порту перебив меток DSCP
enable dot1p replacement ports <port>                                - разрешить на указанном порту перебив меток 802.1p CoS
  • Замечание: значения меток CoS dot1p, которыми метятся фреймы в том или ином qos-профайле настройке не поддаются. Посмотреть, какое значение соответствует применяемому qos-профайлу, можно в таблице 2.

[править] Задание трафик-групп на основе VLAN

configure vlan <vlan_name> qosprofile <qpX>

[править] Резюме

Вот команды, которые управляют проверкой/перемаркировкой меток 802.1p и DSCP

{enable | disable} diffserv examination ports {<portlist> | all}          - на указанных портах распределять ли входящие пакеты по QoS-профайлам исходя из значений меток DSCP (так же приводит к включению перебива меток 802.1p);
{enable | disable} dot1p    examination ports {<portlist> | all}          - на указанных портах распределять ли входящие фреймы по QoS-профайлам исходя из значения меток 802.1p.
{enable | disable} dot1p    examination inner-tag ports {<portlist> | all}- на указанных портах учитывать ли внутренний тег QinQ при распределении входящих фреймов по QoS-профайлам.
{enable | disable} diffserv replacement ports {<portlist> | all}          - разрешать ли замену меток DSCP у пакетов, пришедших на указанные порты.
{enable | disable} dot1p    replacement ports {<portlist> | all}          - разрешать ли замену меток 802.1p у пакетов, пришедших на указанные порты.
show ports information                                                    - посмотреть настроенные параметры классификации/перемаркировки на портах.
                                                                             o - замена 802.1p разрешена
                                                                             s - замена DSCP разрешена
                                                                             n - классификация на основе DSCP разрешена (заменяет классификацию по 802.1p).

Подробнее определения политик перемаркировки освещаются в следующих подразделах.

[править] Перемаркировка

[править] Замена меток CoS 802.1p

  • для ACL-групп трафика: Использовать действие replace-dot1p, чтобы поставить метку выходного QoS-профайла, либо действие replace-dot1p-value, чтобы указать конкретное значение.
  • не для ACL'ных группах трафика: Можно разрешить или запретить перебивку 802.1p для трафика на определённых входящих портах. Если разрешено, то перебивка происходит в значение по умолчанию для того QoS-профайла, куда попадает фрейм.
enable dot1p replacement ports [<ingr_port_list> | all]                                   - активизация перебивки 802.1p для групп трафика на указанных входящих портах.
configure dot1p replacement qosprofile <qosprofile> priority <CoS> {ports <port_list>} - работает только на 20800 серии. На Summit целевая метка dot1p в qos-профайле не может быть изменена.

И ещё раз: значения меток CoS 802.1p, устанавливаемые при обработке трафика в QoS-профайлах, на платформе Summit и SummitStack перенастройке не поддаются и определяются следующей таблицей:

Таблица 1. Значения dot1p перебиваемые в QoS-профайлах.
QoS-профайл значение dot1p
QP1 0
QP2 1
QP3 2
QP4 3
QP5 4
QP6 5
QP7 6
QP8 7
  • Замечание 1: Если на коммутаторе существуют только группы трафика на основе CoS 802.1p, невозможно отключить перебивку dot1p. Если же существуют только группы трафика на основе DiffServ, тогда перебивка dot1p будет происходить только у тегированных фреймов, переносящих протокол, отличный от IP.
  • Замечание 2: На платформах BlackDiamond 8800, SummitStack, и Summit по-умолчанию существуют QoS-профайлы QP1 и QP8. Чтобы возможность перебивки в нужные значения dot1p была задействована, необходимо создать недостающие qos-профайлы QP2 - QP7.
  • Замечание 3: На платформах BlackDiamond 8800, SummitStack, и Summit когда на портах 1Гб/сек включена проверка DiffServ (diffserv examination), перебивка dot1p работает и не может быть выключена. Замена происходит на dot1p, заданный по-умолчанию для исходящего QoS-профайла.
show dot1p replacement  - посмотреть политику перебивки.
[править] Пример замены метки 802.1p с помощью ACL
entry VoIPinSummitStack {
    if {
        IP-TOS 46;
    } then {
        replace-dot1p-value 6;
    }
}

[править] Замена меток DSCP

  • для ACL-групп трафика: Использовать действие replace-dscp чтобы перебить на занчение для выходного QoS-профайла. Это действие работает для IPv4 и IPv6. Extreme Networks рекомендует перебивку DSCP осуществлять с помощью ACL-групп трафика.
  • не для ACL'ных групп трафика: перебивка происходит у трафика, приходящего в указанные порты в соответствии с таблицей.
enable diffserv replacement ports [<port_list> | all]
Таблица 2. Перебив меток в QoS-профайлах по-умолчанию
QP dot1p DSCP
1 0 0
2 1 8
3 2 16
4 3 24
5 4 32
6 5 40
7 6 48
8 7 56
[править] Задание мапинга перебивки DiffServ
configure diffserv replacement [{qosprofile} <qosprofile> | priority <priority>] code-point <code_point>
unconfigure diffserv replacement                - восстановить умолчательные значения.
show diffserv replacement                       - посмотреть текущий мапинг перебива QoS-профайл -> DSCP.
[править] Пример: установка DSCP на основе ACL
configure access-list qp3sub any
---
entry QP3-subnet {
       if {
               source-address 10.1.2.0/24
       } then {
               Qosprofile qp3;
               replace-dscp;
}
---
enable diffserv examination ports all           - на других коммутаторах сети учитывать DSCP на всех входящих портах при выборе исходящего QoS-профайла.
  • Замечание: Свич будет изучать DSCP только если трафик не соответствует ACL. Иначе установки в ACL переопределяют настройки DiffServ.
[править] Пример: маркировка некоторого трафика, приходящего на порт с помощью ACL
entry MARK-COS-5-DSCP-EF {
       if match any {
               ethernet-source-address 5a:00:3b:00:45:5f;
       } then {
               qosprofile qp6;
               replace-dscp;
               replace-dot1p;
               permit;
       }
}

После установки файла с этой политикой на порту в направлении ingress, трафик от мака 5a:00:3b:00:45:5f будет маркироваться в соответствии с настройками QP6 (CoS и DSCP).

[править] Определение алгоритма работы планировщика очередей

В настоящее время ExtremeXOS поддерживает дисциплины обработки очередей strict-priority, weighted-round-robin и weighted-deficit-round-robin. На платформах Summit доступны только strict-priority и weighted-round-robin. По-умолчанию используется strict-priority.

configure qosscheduler [strict-priority | weighted-round-robin] - для всего коммутатора.
configure qosprofile   <qosprofile> use-strict-priority         - задать дисциплину strict-priority отдельно для нужного QoS-профайла.
show qosscheduler                                               - какая дисциплина используется в данный момент для всего коммутатора.
show qosprofile                                                 - для каких qos-профайлов переопределена дисциплина в strict-priority.

Можно задать режим weighted-round-robin для всего коммутатора, и при этом нужным QoS-профайлам вместо веса указать use-strict-priority. Тогда планировщик будет посылать пакеты из этих очередей в соответствии с дисциплиной strict-priority, и только когда там станет пусто, перейдёт к обработке остальных QoS-профайлов по алгоритму WRR.

[править] Настройка WRED в QoS-профайлах

  • Примечание. Подробно о механизме WRED можно прочитать в книге Вегешна Шринивас. Качество обслуживания в сетях IP. : Пер. с англ. - М. : Издательский дом "Вильямс", 2003. ISBN 5-8459-0404-8 (рус.)
configure qosprofile <qpX> [wred [{color [tcp [green | red] | non-tcp [any|red]] [{min-threshold <%>} {max-threshold <%>} {max-drop-rate <%>}]} | avg-weight <avg_weight>]] ports <port-list>
unconfigure qosprofile wred [ports <port_list>]
show wredprofile [ports <port-list>]

[править] Соображения о выборе значений avg-weight

WRED в своей работе ориентируется на среднюю глубину очереди. Она определяется по формуле

Dсредн = (1 - 1/(2n))*Dсредн.предыдущее + (1/2n)*Dтекущее

Видно, что текущая средняя глубина составляется из текущей глубины Dтекущее и предыдущего значения средней глубины Dсредн.предыдущее с некоторыми весовыми коэффициентами, зависящими от показателя степени двойки n. Параметр avg-weight в команде настройки WRED задаёт значение n в этой формуле. n может задаваться в диапазоне 1 - 15. Расчёт получающихся весовых коэффициентов в зависимости от значения n приведён в этом файле.

Если n мало, то основной вклад в текущую среднюю глубину составляет значение текущей глубины Dтекущее. Это значит, что Dсредн сильно подвержено флуктуациям заполненности очереди и сброс WRED производится довольно интенсивно. Если n велико, то основной вклад в текущую среднюю грубину составляет значение текущего среднего, рассчитанного в прошлый раз Dсредн.предыдущее. А в прошлом значении, в свою очередь, велико влияние позапрошлого. Т.е. при больших n значение Dсредн очень слабо реагирует на текущие флуктуации размера очереди, и изменяется плавно. Это может привести к недостаточно интенсивному сбросу пакетов, что грозит переполнением очереди и отбрасыванию не поместившихся в неё пакетов без учёта их приоритета (Tail Drop). В ExtremeXOS значением n по-умолчанию выбрано число 4. Cisco Systems на своём оборудовании рекомендует значение 9.

[править] Настройка гарантированной и максимально допустимой исходящей полосы для QoS-профайлов

CIR - уровень гарантированной полосы, которая выделяется для QoS-профайла на исходящем порту. Трафик в этой полосе метится зелёным. Значение CIR при настройке QoS-профайлов можно задавать как в виде % от скорости интерфейса (minbw), так и в виде значения скорости (committed_rate).
PR - уровень, превышающий CIR, до которого передача трафика QoS-профайла осуществляется при условии наличия свободной полосы, не занятой зелёным трафиком других профайлов. Если из других профайлов идёт уже НЕ гарантированный трафик (тоже больше CIR, но меньше PR), то обслуживание будет по алгоритму best effort вместе с трафиком других профайлов. Если же исходящий трафик QoS-профайла на порту превышает значение PR, то он отбрасывается. Значение PR при настройке QoS-профайлов можно задавать как в виде % от скорости интерфейса (maxbw), так и в виде значения скорости (peak_rate).

create/delete qosprofile [QP2| QP3 | QP4 | QP5 | QP6 | QP7]     - создавать/удалять дополнительные QoS-профайлы.

Определение параметров гарантии/шейпинга:
configure qosprofile egress <qpX> [{minbw <%>} {maxbw <%>} | {peak_rate <peak_bps> [K|M]}] [ports <port_list>]
configure qosprofile <qpX> [{minbw <%>} {maxbw <%>} | {{committed_rate <bps> [K|M]} {peak_rate <bps> [K|M]} | [ports <port_list>]

Задание максимальных значений заполняемости буфера и весов QoS-профайлов на определённых портах:
configure qosprofile <qpX> [[{maxbuffer <%>} {weight <1-16> | use-strict-priority}] | [maxbuffer <%> ports <port-list>]]
configure port <list> shared-packet-buffer <1-100>      - задать % разделяемого буферного пространства (общего), которое может использовать порт для буферизации пакетов.
show qosprofile [ports <port_list>]   - посмотреть, как настроено.

Настройка Egress Port Rate Limits

configure ports <port_list> rate-limit egress [no-limit | <cir-rate> [Kbps | Mbps | Gbps] {max-burst-size <burst-size> [Kb | Mb]}]

Механизм полисинга Meter

На Summit-X480 meter может быть применён только к входящему трафику. На Summit-X650 и Summit-X670 - к входящему и исходящему.

Создание и настройка.

create meter <metername>
delete meter <metername>
show meter <metername>
configure meter <metername> {committed-rate <cir> [Gbps | Mbps | Kbps]} {max-burst-size <burst-size> [Kb | Mb]} {out-actions [drop | set-drop-precedence {dscp [none | <dscp-value>]}}

Применение к трафику в ACL.

entry meter-traffic {
       if {
               ...
       } then {
              meter <metername>;
       }
}

[править] Диагностика

show ports [port-list] qosmonitor [congestion]- статистика распределения исходящих пакетов по QoS-профайлам на портах [сброшенным из-за перегрузки].
show qosprofile [ports {all | <port_list>}]   - посмотреть, как настроены QoS-профайлы.
show diffserv replacement                     - посмотреть, какое значение DSCP ставят у исходящего трафика QoS-профайлы. 
show diffserv examination                     - посмотреть таблицу соответствия кодов DSCP входящего трафика QoS-профайлам.
show dot1p                                    - посмотреть таблицу соответствия маркеров CoS 802.1p входящего трафика QoS-профайлам. 
show dot1p replacement                        - посмотреть, какие значения CoS 802.1p ставят у исходящего трафика QoS-профайлы (изменить невозможно).
show wredprofile {ports [<port-list> | all]}  - посмотреть параметры WRED.
show ports <port_list> wred {no-refresh}      - посмотреть статистику сброса WRED по портам.
clear counters wred                           - сбросить статистику wred.