В качестве предисловия...
Конфигурация 1:
- HTTP трафик будет обработан шейпером до 3 Mbps и промаркирован как AF41. HTTP трафик превышающий CIR в 3 Mbps будет помещен в буфер очереди и будет обрабатываться FIFO алгоритмом по умолчанию, и если буфер окажется переполненным (параметр hold-queue x out) , пакет будет сброшен.
- Почтовый трафик будет обработан шейпером до 1 Mbps и промаркирован как AF41. Почтовый трафик превышающий CIR в 1 Mbps будет помещен в буфер очереди и будет обрабатываться FIFO алгоритмом по умолчанию, и если буфер окажется переполненным (параметр hold-queue x out), пакет будет сброшен.
- Весь оставшийся трафик будет обработан с помощью алгоритма WFQ (директива fair-queue).
Weighted Fair Queuing (WFQ)
Weighted Fair Queuing диаметрально отличается от PQ или CQ алгоритмов. Первая и самая важная отличительная особенность, то что, WFQ не позволяет классифицировать трафик! WFQ классифицирует пакеты основываясь на потоках (flows). Под потоком (flow) понимаются все пакеты которые имеют один и тот же адрес источника и назначения, а также порты источника и назначения, вкупе с одинаковым транспортным протоколом. Следующее большое отличие между WFQ и PQ and CQ - это scheduler, который отдает предпочтение low-volume, higher-precedence flows над large-volume, lower-precedence flows. Именно потому что WFQ является flow based queing tools, а каждый поток использует отдельную очередь, количество этих очередей по сравнению с PQ или CQ значительно выше— до 4096 queues per interface.
Конфигурация 2: CBWFQ
policy-map WAN-QoS
class http
priority 3000
set dscp af11
class Mail
bandwidth 2000
set dscp af41
class class-default
fair-queue
- HTTP трафик вплоть до 3 Mbps будет обработан приоритетно и послан на интерфейс первым во время перегрузки (congestion) на TX-Ring и промаркирован как AF11.
- Почтовый трафик получит не менее 2 Mbps в момент перегрузки (congested) и промаркирован как AF41.
Напомню, что любые софтверные очереди (software queue) активируются только тогда, когда физическая очередь TX-Ring оказывается переполнена.
- Весь оставшийся трафик будет обработан с помощью алгоритма WFQ (директива fair-queue).
CBWFQ/LLQ (Queuing mechanism) on subinterfaces.
Обычно мы не можем сконфигурировать и применить CBWFQ/LLQ (Queuing mechanism) на логический интерфейс, например Tunnel0 или subinterface.
#################################################################################
Cisco IOS logical interfaces do not inherently support a state of congestion and do not support the direct application of a service policy that applies a queueing method. Instead, you first need to apply shaping to the subinterface using either generic traffic shaping (GTS) or class-based shaping. Refer to Policing and Shaping for more information.
The router prints this log message when an Ethernet subinterface is configured with a service policy that applies queueing without shaping:
router(config)# interface ethernet0/0.1
router(config-subif)# service-policy output test
CBWFQ : Not supported on subinterfaces
In other words, you must configure a hierarchical policy with the shape command at the parent level. Use thebandwidth command for CBWFQ, or the priority command for Low Latency Queueing (LLQ) at lower levels. Class-based shaping limits the output rate and (we can assume) leads to a congested state on the logical subinterface. The subinterface than applies "backpressure," and Cisco IOS begins queueing the excess packets that are held by the shaper.
#################################################################################
Чтобы это стало возможным нам необходимо немного обмануть систему. Для этого нам нужно создать иерархическое правило HQoS в котором мы сначала создадим parent policy на котором сконфигурирован shaper ограничивающий трафик в пределах CIR для нашего логического интерфейса, а затем к нему применяется Queuing policy в качестве child policy.
Например, если у нас есть сабинтерфейс с установленным значением CIR 10Mbps и нам необходимо ограничить сверху HTTP трафик до 3 Mbps, а также обеспечить его приоритетность в периоды перегрузки, а почтовому трафику предоставить не менее 2 Mbps, мы сконфигурируем нашу HQoS политику следующим образом:
policy-map CHILD
class HTTP
priority 3072
set dscp af11
class Mail
bandwidth 2048
set dscp af41
class class-default
fair-queue
policy-map PARENT
class class-default
shape average 10000000
service-policy CHILD
Приведенная выше конфигурация будет делать следующее:
- будет осуществлять шейпинг всего исходящего трафика на этом интерфейсе до значений определенных CIR (shape average 10000000) 10 Mbps.
- Весь трафик выше этого значения в 10 Mbps будет подвергаться буферизации и ставиться в очередь Shaping Queue (по умолчанию FIFO).
- По умолчанию Shaping Queue - FIFO алгоритм.
- Однако мы переопределяем этот алгоритм, применяя CHILD policy, фактически мы меняем FIFO алгоритм на CBFWQ/LLQ и т.д..
Рассмотрим еще один вариант.
Оба метода - и shape и police ограничивают исходящий трафик до значения maximum kbps (CIR).
Важно отметить, что ни один ни другой механизм, не предоставляет гарантий минимальной полосы пропускания в периоды перегрузки на интерфейсе. Для этих целей, необходимо использовать команды bandwidth или priority.
Importantly, neither mechanism provides a minimum bandwidth guarantee during periods of congestion. Use the bandwidth or priority command to provide such guarantees.
A hierarchical policy uses two service policies – a parent policy to apply a QoS mechanism to a traffic aggregate and a child policy to apply a QoS mechanism to a flow or subset of the aggregate. Logical interfaces, such as subinterfaces and tunnel interfaces, require a hierarchical policy with the traffic-limiting feature at the parent level and queuing at lower levels. The traffic-limiting feature reduces the output rate and (предсказуемо) creates congestion, as seen by queuing excess packets.
Внимание: Такая конфигурация не рекомендуется и показана только для иллюстрации различий между POLICER и SHAPER для целей ограничений агрегированного трафика, в нашем случае класс class-default.
В этой ситуации команда police посылает пакеты на выходной интерфейс от классов определенных в политике child базируясь на размере пакета и количестве байт или токенов в корзине Bc (based on the size of the packet and the number of bytes remaining in the conform and exceed token buckets).
Результатом этого будет то, что битрейт выделенный для голосового и IP трафика (given to the Voice over IP (VoIP) and Internet Protocol (IP) classes) не может быть гарантирован, так как алгоритм работы police перечеркивает гарантии трафику сделанные командой priority (overriding the guarantees made by the priority feature).
class-map match-all IP
match ip precedence 3
class-map match-all VoIP
match ip precedence 5
policy-map child
class VoIP
priority 128
class IP
priority 1000
policy-map parent
class class-default
police 3300000 103000 103000 conform-action transmit exceed-action drop
service-policy child
Тем не менее,если мы будем использовать команду shape, мы получим иерархическую систему очередей (result is a hierarchical queuing system), и все гарантии при этом сохранятся (and all guarantees are made). Другими словами, когда битрейт трафика превысит указанный shape rate, трафик VoIP и IP классов получат свои гарантии по битрейту, а трафик класса class-default (at the child level) будет подвергаться сбросу.
In other words, you must configure a hierarchical policy with the shape command at the parent level. Use the bandwidth command for CBWFQ, or the priority command for Low Latency Queueing (LLQ) at lower levels. Class-based shaping limits the output rate and (we can assume) leads to a congested state on the logical subinterface. The subinterface than applies "backpressure," and Cisco IOS begins queueing the excess packets that are held by the shaper.
В соответствии с вышеприведенной конфигурацией, policing должен быть заменен на shaping.
Например:
policy-map parent
class class-default
shape average 3300000 103000 0
service-policy child
Inside each queue, the queuing methods use FIFO Queuing. The interesting logic for queuing
occurs after the packets have been enqueued, when the router decides from which queue to take
the next packet. Queue schedulingdescribes the process of the device, in this case a router,
choosing which queue to service next. This process is also called a service algorithm, or a queue
service algorithm. The scheduler may reserve amounts of bandwidth, or a percentage of link
bandwidth, for a particular queue. The scheduler may always service one queue first, which
means the packets in that queue will experience very low delay and jitter.