Queues в RouterOS: Simple Queues MikroTik (часть 1)

В первой части статьи будет рассмотрен один из механизмов QoS, реализованный в RouterOS, по управлению очередями и пропускной способностью, а именно Simple Queues.

Комментариев: 2Просмотров: 50319
01февраля 2019
все статьи

Введение

Одним из способов управления качеством обслуживания в сети является внедрение механизмов QoS (quality of service — качество обслуживания). Использование MikroTik QoS позволяет повысить приоритет трафика  одного типа над другим, ограничить полосу пропускания для разных типов трафика. Распространённым сценарием является использование комбинированных методик. В этом случае из общего трафика выделяются потоки в соответствии с заданными критериями и между ними распределяются ресурсы: потокам, для которых важно время обработки, выделяется приоритет в обслуживании, а потокам, для которых важна пропускная способность, выделяется большая гарантированная полоса. Штатные средства RouterOS позволяют выполнить распределение ресурсов между потоками трафика с помощью инструментов Simple Queues (простые очереди) и Queue Tree (дерево очередей).

Следует упомянуть, что конфигурация QoS выполняется на каждом устройстве, поэтому, должна быть распространена на все устройства локальной сети. Эффект от внедрения QoS будет ограничен локальной сетью, поскольку смежные сети, находящиеся под управлением других лиц, работают в соответствии со своими политиками, которые могут не совпадать с вашей.

К важным методам обеспечения качества обслуживания также следует отнести архитектуру построения сети и административные меры. В блок административных мер входит контроль за пользовательским трафиком, в допустимых рамках, и контроль за утилизацией каналов связи и аплинков.

1. Типы очередей

В RouterOS существует несколько типов очередей, управление которыми выполняется в разделе /queue type. Пользователь может создавать свои типы очередей, однако за основу будет браться одна из существующих.

RouterOS поддерживает следующие типы очередей:

  • none
  • pfifo
  • bfifo
  • mq-pfifo
  • red
  • sfq
  • pcq

1.1 Очередь типа none

Очередь типа none подразумевает под собой использование только аппаратной очереди сетевого интерфейса, через который трафик будет отправлен. Данный тип очереди не позволяет выполнять дополнительные настройки по приоритизации трафика.

1.2 Очереди типа pfifo, bfifo, mq-pfifo

Алгоритм FIFO (first in — first out, первый пришёл — первый ушёл) заключается в том, что данные, попадающие в очередь первыми, будут первыми переданы на дальнейшую обработку. Такой подход не позволяет распределять между потоками данных временные ресурсы в соответствии с их приоритетом и применим, в первую очередь, в системах с невысокой утилизацией каналов передачи данных.

На рисунке 1.1 представлен механизм работы очереди типа FIFO: в очередь поступают пакеты трёх потоков данных. Пакет первого потока поступает в очередь первым и первым из неё выходит, первый пакет второго потока выходит вторым, пакет третьего потока — третьим и второй пакет второго потока — четвёртым.

Алгоритм FIFO
Рисунок 1.1 — Принцип организации очередей FIFO

Разница между pfifo и bfifo заключается в том, что первый метод применяет алгоритм FIFO попакетно, а второй — побайтово. Очевидно, что данный тип очередей использует единый буфер хранения пакетов, определяемый параметром pfifo-limit и bfifo-limit.

Тип очереди mq-pfifo аналогичен pfifo с той лишь разницей, что использует несколько буферов хранения пакетов для каждого из потоков. Размер буфера определяется параметром mq-pfifo-limit.

В случае переполнения буфера, вновь пришедшие пакеты будут отброшены. Таким образом, размер очереди позволяет искать компромисс между высокой утилизацией канала (большой размер очереди) и низким уровнем задержки (малый размер очереди).

1.3 Очередь типа red

Центральным понятием для очередей типа RED (random early drop — случайное превентивное отбрасывание) является средний размер очереди. Пользователь устанавливает значения минимального и максимального порогов red-min-threshold и red-max-threshold и, в зависимости от положения среднего размера очереди относительно этих порогов, выполняется управление потоком данных:

  • средний размер очереди < red-min-threshold: входящие пакеты не отбрасываются;
  • red-min-threshold  < средний размер очереди < red-max-threshold: входящие пакеты отбрасываются с заданной вероятностью;
  • средний размер очереди > red-max-threshold: все входящие пакеты отбрасываются.

1.4 Очередь типа sfq

Формирование очереди типа SFQ (Stochastic fairness queuing — стохастическая честная очередь) происходит в три этапа: сначала для каждого из входящих пакетов рассчитывается хэш-функция (при расчёте используются значения IP-адресов и портов источника и назначения), потом, в соответствии с рассчитанной хэш-функцией, пакет распределяется в одну из 1024 очередей, а затем пакеты из очередей передаются на дальнейшую обработку по алгоритму round-robin (один пакет из первой очереди, один пакет из второй и т.д.).

Принцип организации очередей SFQ
Рисунок 1.2 — Принцип организации очередей SFQ

Очередь использует два параметра: sfq-allot — размер каждой из 1024 очередей в байтах, sfq-perturb — время, по истичении которого следует сменить хэширующий алгоритм.

Таким образом удаётся достичь равноправного распределения пропускной способности между всеми потоками данных. Однако у этого алгоритма есть недостаток: в случае, если какой-то из хостов будет оперировать множеством потоков данных, то получит приоритет трафика перед остальными, т.к. его трафик будет помещаться в различные очереди. В некоторых случаях этого можно избежать, выбрав параметры, участвующие в расчёте хэш-функции, но для этого потребуется сменить тип очереди на PCQ.

1.5 Очередь типа pcq

Очередь PCQ (per-connection queuing — распределение очередей по соединениям) является расширенным вариантом SFQ. Как уже было упомянуто, для PCQ можно выбрать параметры участвующие в расчёте хэш-функции (параметр pcq-classifier). Кроме того, можно задать размер каждой из подочередей через параметр pcq-limit.

Одним из преимуществ очередей типа PCQ является возможность гибкого управления доступной полосой для подочередей с помощью параметров pcq-rate и pcq-total-limit. Параметр pcq-rate устанавливает пороговую величину пропускной способности для каждой из подочередей, а pcq-total-limit – суммарный порог для всех подочередей. Полоса, указанная в параметре pcq-total-limit равномерно распределяется между всеми потоками, однако, пропускная способность потока не может превысить pcq-rate, даже если утилизация канала имеет запас. Если для очереди не установлены пороговые значения, то доступная полоса будет распределяться равномерно между подпотоками.

Наглядная демонстрация влияния размера очереди с иллюстрациями представлена в официальной документации — https://wiki.mikrotik.com/wiki/Manual:Queue_Size.

2. Принципы ограничения скорости

Поток данных проходящий через интерфейс, независимо от того входящий или исходящий, может быть обработан двумя способами: ограничение и выравнивание (см. рисунок 2.1).

Приоритизация трафика MikroTik
Рисунок 2.1 — Принцип ограничения и выравнивания трафика

Ограничение трафика подразумевает, что весь трафик свыше заданного ограничения будет отброшен. Этот механизм представлен на рисунке 2.1а — данные, превосходящие порог отбрасываются. Такой тип ограничения скорости уместен для трафика, который чувствителен к задержкам: поскольку данные не хранятся в буфере, а передаются далее либо отбрасываются.

Выравнивание предполагает наличие буфера данных, через который проходят все пакеты в рамках потока данных. В случае, если поток превышает заданные ограничения, то пакеты сохраняются в буфере до того момента, пока не будет возможности их передать далее. Такой механизм представлен на рисунке 2.1б — трафик выше порога не отбрасывается, а сохраняется в буфере и передаётся далее с задержкой. Если поток достиг заданного ограничения и буфер полностью заполнен, входящие пакеты будут отброшены. Такой подход используется для типов трафика нечувствительного к задержкам. Кроме того, подобный механизм выравнивает утилизацию каналов связи, выравнивая поток передачи данных.

Исходя из этого, применяют два понятия, связанных с ограничением скорости: CIR и MIR. CIR (committed information rate — гарантированная скорость) — скорость, которая выделяется очереди в самом худшем случае, но гарантированно. MIR (maximum information rate — максимальная скорость) — скорость, которая выделяется очереди в лучшем случае, если эта полоса не используется другими очередями.

В синтаксисе RouterOS CIR обозначается как limit-at, а MIR — max-limit.

2.1 Использование Burst

Помимо механизмов ограничения скорости через CIR и MIR, в RouterOS существует возможность кратковременного увеличения полосы пропускания для очереди, называемая burst (импульс, взрыв).

Работа в режиме burst определяется тремя параметрами, значения которых устанавливает пользователь:

  • burst-limit – пороговое значение полосы, которая выделяется потоку трафика, если режим burst активен;
  • burst-time – интервал времени, в течении которого выполняется оценка средней скорости передачи данных (average-rate). Средняя скорость передачи данных является внутренним параметром, используемым при управлении режимом burst (см. пример ниже);
  • burst-threshold – порог значение средней скорости передачи данных, превышение которого деактивирует режим burst.

Результатом использования режима burst является значение текущей скорости передачи данных (actual-rate), выделяемая потоку данных.

Рассмотрим пример, в котором пользователь выполняет загрузку двух файлов, размер каждого из файлов 4 Мбайт (32 Мбит) (см. рисунок 2.2). Загрузка первого файла начинается на нулевой секунду, второго – на семнадцатой. На сетевом устройстве пользователя выполнена следующая конфигурация:

  • limit-at = 1M;
  • max-limit = 2M;
  • burst-threshold = 1500k;
  • burst-time = 16s;
  • burst-limit = 4M.

Использование Burst
Рисунок 2.2 — Демонстрация работы burst-режима

По оси асбцисс отложены временные отрезки, а по оси ординат — пропускная способность. Проанализируем выделенную пользователю полосу канала поэтапно:

  • 0-5 секунд: пользователь скачивает файл со скорость burst-limit, т. к. burst-режим разрешён (отметим, что burst-limit превосходит max-limit);
  • 5 секунда: средняя скорость достигает порога burst-threshold и burst-режим отключается;
  • 6-9 секунд: пользователь получает полосу, в соответствии с max-limit, т. к. burst-режим отключен. Первый файл скачен и actual-rate падает до нуля;
  • 17-18 секунды: пользователь начинает скачивать второй файл и ему выделяется полоса max-limit, т. к. burst-режим по-прежнему отключен;
  • 18 секунда: средняя скорость падает ниже burst-threshold и burst-режим становится доступным;
  • 19-22 секунды: пользователю выделяется полоса burst-limit;
  • 22 секунда: средняя скорость становится выше burst-threshold и burst-режим отключается;
  • 23-28 секунды: пользователю выделяется полоса max-limit, т. к. burst-режим отключен;
  • 29-31 секунды: второй файл скачан и текущая скорость падает до нуля.

Таким образом, применение burst оказывается полезным для повышения кратковременной скорости, например при открытии веб-страниц, и повышает лояльность пользователей. Однако, для правильной работы burst, необходимо продумать его конфигурацию и иметь запас пропускной способности.

3. Hierarchical token bucket (HTB)

Организация очередей и их взаимосвязи в RouterOS выполнены с использованием логики алгоритма HTB (hierarchical token bucket — иерархическое распределение).

Основным достоинством HTB является возможность установки отношений между очередями и организация их в иерархическую структуру. Таким образом, между очередями могут быть установлены отношения «родительский-дочерний» с наследованием распределяемых ресурсов. В рамках алгоритма HTB выделяют понятия входящей очереди (inner queue) и конечной (leaf queue). Очередь, у которой есть хотя бы одна дочерняя очередь является входящей и она отвечает за распределение трафика, тогда как конечная, у которой нет дочерних, является потребителем трафика.

Для каждой из очередей могут быть заданы следующие параметры: CIR, MIR и приоритет. Приоритет будет использован только в том случае, если удовлетворены CIR для всех конечных очередей и осталась часть пропускной способности. Очередь обладающая большим приоритетом (8 — наименьший приоритет, 1 — наивысший приоритет) получит дополнительную пропускную способность в первую очередь. В случае, если приоритеты конечных очередей совпадают, пропускная способность сверх CIR будет распределяться между ними равномерно. Распределение доступной полосы сверх CIR будет выполнено только в случае, если для конечных очередей установлены значения приоритетов, при этом приоритет входящей очереди не берётся в расчёт.

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

  • CIR родительской очереди должна быть не меньше суммы CIR дочерних очередей;
  • MIR родительской очереди должна быть не меньше любой из MIR дочерних очередей.

В официальной документации приведены несколько примеров распределения пропускной способности между очередями в соответствии с иерархией (https://wiki.mikrotik.com/wiki/Manual:HTB), разберём один из них (см. рисунок 3.1).

Queues MikroTik
Рисунок 3.1 — Пример организации структуры очередей

Распределение пропускной способности будет выполняться в соответствии со следующим алгоритмом:

1. Очереди Queue03, Queue04, Queue05 резервируют по 2Мбит/с в соответствии со значениями CIR;

2. Очередь Queue02 резервирует 8 Мбит/с;

3. Поскольку Queue02 зарезервировала 8 Мбит/с из которых конечные очереди Queue04 и Queue05 суммарно потребляют 4 Мбит/с, то оставшиеся 4 Мбит/с должны быть распределены между ними. Для этого выполняется анализ установленных значений приоритетов и 4 Мбит/с выделяется очереди Queue04 (Queue04 более приоритетна, чем Queue05);

4. Распределена вся доступная полоса, установленная в качестве MIR для очереди Queue01: Queue03 получает 2 Мбит/с, Queue04 — 6 Мбит/с, Queue05 — 2 Мбит/с.

При работе с HTB следует руководствоваться следующим алгоритмом: на первом этапе необходимый трафик выделяется и маркируется, далее промаркированный трафик ассоциируется с одной из созданных очередей, и на последнем этапе очередь закрепляется за конкретным интерфейсом.

4. MikroTik Simple Queues

Как уже было упомянуто, одним из способов организации MikroTik QoS в RouterOS является настройка Simple Queues, конфигурация которого будет рассмотрена в этом разделе.

MikroTik Simple Queues является достаточно гибким инструментом, позволяющим быстро выполнить ограничение полосы для какого-то хоста, либо, используя комплексный подход, продумать структуру и выполнить конфигурацию для множества сетей и потоков данных.

Настройка простых очередей выглядит как набор правил и связанных с ними политик. Пакет, обрабатываемый блоком Simple Queues, последовательно проверяется на соответствие всем правилам до того момента, пока правило не сработает. После срабатывания, к пакету будут применены политики, определённые этой записью. Механизм проверки соответствия схож с механизмом в Filter, рассмотренным в другом цикле статей. Отсюда следует, что большое число правил приводит к росту нагрузки на аппаратные ресурсы маршрутизатора.

В простых правилах может быть использована маркировка пакетов, выполняемая в Mangle. На рисунке 4.1 представлена упрощённая схема прохождения пакетов в RouterOS. Обработка пакетов блоком Simple Queues выполняется на двух этапах: Input для входящих пакетов и Postrouting — для исходящих (см. рисунок 4.2). Важно отметить, что применение Simple Queues MikroTik является одним из последних этапов обработки, поэтому маркировка выполняется на любом из предшествующих ему этапов. Также, важно обратить внимание на то, что использование Fasttrack влияет на работу очередей, поэтому, в рамках демонстрационных примеров эта опция будет отключена.

Simple Queues MikroTik
Рисунок 4.1 — Простая схема прохождения пакетов в RouterOS

MikroTik QoS в RouterOS
Рисунок 4.2 — Схема прохождения пакетов для цепочек Input и Postrouting в RouterOS

4.1 Параметры Simple Queues

Конфигурация простых правил выполняется в разделе /queue simple и при создании правил можно настроить следующие параметры:

Наименование параметра

Значение по умолчанию

Описание

name

queueN

Имя правила

target

 

Источник трафика, к которому будет применено правило.

В качестве данного параметра могут быть указаны интерфейс, подсеть или IP-адрес хоста.

Поскольку ограничение скорости указывается в формате „upload/download“, то в этом параметре указывается источник.

parent

none

Имя очереди, являющейся родительским по отношению к текущей (см. раздел 3).

packet-marks

-

Проверка маркировки пакетов — правило сработает, только если маркировка пакета соответствует указанной в данном параметре.

priority

8/8

Установка приоритета очереди для upload/download потоков.

queue

default-small/default-small

Имя типа очереди, используемого при обработке (см. раздел 1)

limit-at

0/0

CIR для upload/download потоков.

max-limit

0/0

MIR для upload/download потоков.

burst-limit

0/0

Параметры использования опции burst  для upload/download потоков (см. раздел 2).

burst-treshold

0/0

burst-time

0s/0s

bucket-size

0.1/0.1

Важно понимать, что в случае, если не указан параметр «target», ограничение скорости будет применено к трафику дважды. Это происходит потому что в Packet Flow Diagram (см. рисунок 4.1) блок обработки простых правил присутствует дважды и устройство не сможет разделить upload- и download-потоки. В рамках статьи понятия upload/download тождественны uplink/downlink.

5. Практика Simple Queues

Для демонстрации настройки простых очередей рассмотрим пример на рисунке 5.1. Каждое из устройств на схеме является маршрутизатором, функционирующем на RouterOS. R1 и R2 являются потребителями трафика – на них будет запущен bandwidth-test по направлению к BT_server. На маршрутизаторе R_queue будет выполнена настройка простых очередей.

Практика Simple Queues
Рисунок 5.1 — Схема сети для рассмотрения практических примеров

Начальная конфигурация устройств:

R1:

Конфигурация устройств R1

R2:

Конфигурация устройств R2

BT_server:

BT_server

R_queue:

R_queue

5.1 Ограничение скорости для подсети

Выполним ограничение скорости для подсети 172.16.1.0/24 upload 10 Мбит/с, download 5 Мбит/с. Для этого на R_queue выполним команду /queue simple add target=172.16.1.0/24 max-limit=10M/5M, а на R1 и R2 запустим тестирование пропускной способности.

Конфигурация R_queue:

Конфигурация R_queue

Queues MikroTik
Рисунок 5.2 — Результаты тестирования downlink

MikroTik Qos
Рисунок 5.3 — Результаты тестирования в направлении uplink

На рисунках 5.2 и 5.3 видно, что трафик потребителя R1 ограничен, в соответствии с задачей, ~10Мбит/~5Мбит, тогда как пропускная способность R2 ограничивается физическими возможностями порта.

5.2 Распределение общей полосы по приоритетам

В примере 5.1 был рассмотрен простейший способ ограничения скорости для определённой подсети. Такая реализация может быть использована в небольших сетях, либо как временное решение. На практике чаще пропускная способность канала должна быть разделена между несколькими потребителями в разных пропорциях.

Рассмотрим пример, в котором пропускная способность канала связи равна 10Мбит/с и должна быть поделена между двумя потребителями: первый потребитель ограничен 8 Мбит/с, второй — 5 Мбит/с. Поскольку суммарная пропускная способность выше полосы канала (8 Мбит/с+5 Мбит/с > 10 Мбит/с), то установим приоритет для второго потребителя.

Для этого создадим иерархию простых очередей: родительская очередь ограничена 10 Мбит/с, а дочерние — 8 и 5 Мбит/с соответственно, причём имеют разные приоритеты. Важно отметить, что target родительской очереди должен соответствовать target всех дочерних.

Конфигурация R_queue:

Конфигурация R_queue

Приоритет трафика MikroTik
Рисунок 5.4 — Результаты тестирования в направлении downlink

Приоритизация трафика MikroTik
Рисунок 5.5 — Результаты тестирования в направлении uplink

Пропускная способность канала распределяется в соответствии с приоритетами — сначала 5 Мбит/с выделяется R2, а потом оставшаяся полоса — R1. R2 не получает всю пропускную способность канала связи, т.к. выставлено ограничение max-limit=5M. При этом, если остановить потребление трафика на R2, R1 получит пропускную способность в соответствии с ограничениями — 8 Мбит/с:

Приоритет трафика
Рисунок 5.6 — Результаты тестирования в направлении downlink

Приоритизация трафика
Рисунок 5.7 — Результаты тестирования в направлении uplink

5.3 Использование CIR и MIR при распределении пропускной способности

Недостатком решения, рассмотренного в примере 5.2, является то, что при отсутствии одного из потребителей, часть пропускной способности не используется, даже, если в ней есть потребность со стороны активного потребителя трафика. Так, например, при отсутствии трафика R1, R2 сможет использовать только 5 Мбит/с.

Решим эту задачу, задав значения CIR и MIR. Для обоих потребителей установим MIR равным 10 Мбит/с, а CIR — 2 Мбит/с. Приоритеты останутся теми же: приоритизация трафика второго потребителя будет выше.

Конфигурация R_queue:

Конфигурация R_queue

Simple Queues MikroTik
Рисунок 5.8 — Результаты тестирования в направлении downlink

Simple Queues
Рисунок 5.9 — Результаты тестирования в направлении uplink

Сначала пропускная способность распределяется в соответствии с CIR — по 2 Мбит/с, а затем, т.к. приоритет R2 выше, чем у R1, оставшаяся часть полосы канала предоставляется R2: 10Мбит — 2 Мбит -2 Мбит = 6 Мбит, т.е. итоговая пропускная способность R2 – 8 Мбит/с (2 Мбит/с от CIR + 6 Мбит/с при приоритетном распределении полосы канала). При этом, если отключить R2, то R1 начинает утилизировать всю доступную полосу:

Конфигурация R_queue

Simple Queues MikroTik
Рисунок 5.10 — Результаты тестирования в направлении downlink

Simple Queues
Рисунок 5.11 — Результаты тестирования в направлении uplink

Заключение

В первой части статьи представлены принципы организации очередей и их типы в RouterOS. Также рассмотрен инструмент Simple Queues с демонстрацией базовых примеров ограничения скорости. Также, в рамках практических примеров, рассматриваются примеры построения структуры очередей на основе отношений «родительский-дочерний».

Вам помогла эта статья?

Приглашаем пройти обучение в нашем тренинг-центре и научиться настраивать оборудование MikroTik на профессиональном уровне! Узнайте расписание ближайших курсов и бронируйте место!

 

поделиться материалом:

Читайте также

комментарии — 2
Евгений22 июля 2021 в 08:45
Я читаю эту статью и пытаюсь разобраться уже в готовых установках и правилах. А представьте кто создаёт эти микропрограммы для функционирования этого всего, какого тем разработчикам этих функций и комманд!
Mush23 декабря 2019 в 20:53
Спасибо большое. Очень доступно все описано.