Ограничение трафика linux tc
Содержание 1. Введение 1.1. Что такое управление трафиком и как это работает? 1.2. Что такое htb? 1.3. Что такое tcng? 2. Требования 2.1. Требования к ядру 2.2. Требования tc 2.3. Требования tcng 3. Примеры конфигураций 3.1. Использование tcng для ограничения загрузки 3.2. Использование двухскоростного трехцветного измерителя 4. Разнообразные замечания 5. Ссылки и другая документация
- которые имеют хотя бы базовое представление об управлении трафиком
- которые в состоянии скомпилировать iproute2 и tcng из исходных текстов или умеют собирать пакеты RPMS из существующих SRPM
- работающих на системах, чьё ядро имеет поддержку модулей htb и dsmark
- которые в состоянии скомпилировать ядро с поддержкой htb и dsmark
Управление трафиком — название, объединяющее в себе все части подсистемы организации очередей в сети или сетевом устройстве. Управление трафиком состоит из нескольких операций: классифицирование (classification) — механизм, позволяющий идентифицировать пакеты и помещать их в определенные потоки или классы; ограничение входящего трафика (policing) — механизм, с помощью которого можно ограничить количество пакетов или байт в потоке, соответствующих определенной классификации; планирование (scheduling) — процесс принятия решений, при котором пакеты упорядочиваются и переупорядочиваются для дальнейшей передачи; наконец, ограничение исходящего трафика (shaping) — процесс при котором пакеты задерживаются и передаются таким образом, чтобы реализовать постоянную и предсказуемую скорость потока.
Все эти характеристики системы управления трафиком могут быть скомбинированы комплексными методами для резервирования или ограничения полосы пропускания для отдельных потоков (или приложений).
Одним из ключевых моментов управления трафиком является понятие токенов. Реализация ограничения входящего и исходящего трафиков требует вычисления количества пакетов или байт проходящих за момент времени для определения скорости. Каждый пакет или байт ( в зависимости от реализации) соответствует токену и передается только в случае наличия свободного токена. Общее образное хранилище, где находятся токены, называется буфером (bucket). Если кратко, то буфер характеризует две величины: количество токенов, которые могут быть одновременно использованы (размер буфера) и скорость, с которой буфер заполняется новыми токенами.
В секции 1.2 приведены примеры буферов системы управления трафиком в Linux.
В Linux, управление трафиком исторически сложная задача. Команда tc обеспечивает интерфейс со структурами ядра, ответственными за ограничение, планирование и классификацию трафика. Синтаксис этой команды, однако, весьма загадочен. Проект tcng предоставляет более дружественный пользователю интерфейс к такой мощной утилите как tc, определяя свой язык описания конфигурации. Его использование при написании конфигурации системы управления трафиком упрощает поддержку, облегчает понимание и, что важно, увеличивает переносимость.
Hierarchichal Token Bucket — это классовая дисциплина обработки очереди, написанная Мартином Девером (Martin Devera) с упрощенным набором конфигурационных параметров по сравнению с CBQ. Есть много хорошей документации по HTB и ее применению на сайте автора и сайте Стефа Коэна (Stef Coene). Ниже приведено очень краткое описание системы HTB.
Идеологически, HTB представляет собой набор иерархически упорядоченных буферов токенов (да, наверно вы и сами догадались об этом [В переводе с английского HTB означает «иерархический буфер токенов» — Прим.пер.]). Давайте рассмотрим простейший сценарий. Главная дисциплина обработки исходящей очереди любого устройства, называется корневой (root qdisc).
Корневая дисциплина содержит один класс (в сложных конфигурациях корневая дисциплина может содержать несколько классов). Этот класс HTB создается с указанием двух параметров: rate и ceil. Значения этих параметров должны совпадать для корневого класса и задают общую полосу пропускания канала.
В HTB, rate задает гарантированную полосу пропускания для данного класса, а ceil, сокращение от ceiling, определяет максимальную полосу пропускания, которую класс может получить. Любая полоса пропускания, находящаяся между rate и ceil одалживается у родительского класса, откуда вытекает утверждение, что для корневого класса значение параметров rate и ceil должны совпадать.
В корневом классе можно определять подклассы, каждому из которых можно выделить некоторую часть доступной полосы пропускания родительского класса. У классов-потомков, значения параметров rate и ceil не обязаны совпадать с соответствующими значениями родительского класса. Это позволяет резервировать часть пропускной способности заданного класса. Кроме того, это позволяет HTB рассчитывать отношение, в котором должна быть разделена полоса пропускания между классами. Это станет ясней после рассмотрения примеров.
Hierarchical Token Bucket реализует классовый механизм формирования очередей для системы управления трафиком в linux; пользователю предоставляются параметры rate и ceil для контроля над полосой пропускания отдельных классов и задания отношения распределения пропускной способности в случае, когда часть полосы пропускания остается свободной (до значения ceil).
При указании пропускной способности вы должны помнить, что ограничение полосы пропускания будет работать только в том случае, если вы (машина, на которой выполняется управление трафиком — Прим.пер.) являетесь узким местом между ЛВС и Internet. Обычно, это используется в домашних и офисных сетях, где вся локальная сеть обслуживается DSL- или T1-соединением.
На деле это означает, что вам, вероятно, нужно будет установить значение пропускной способности равным реальной пропускной способности канала, минус небольшая ее часть.
Traffic Control Next Generation (tcng) — это проект Вернера Альмесбергера (Werner Almesberger) призванный реализовать мощный, абстрактный и стандартизированный язык для описания структур управления трафиком. Синтаксический анализатор tcc из дистрибутива tcng преобразовывает язык tcng в различные форматы. По умолчанию, tcc читает входной файл (переданный в качестве аргумента или стандартный ввод) и выводит в стандартный вывод последовательности команд tc (смотрите ниже iproute2) необходимые для создания желаемой структуры управления трафиком в ядре.
Обратитесь к справочнику по параметрам tcng за информацией о поддерживаемых дисциплинах обработки очереди. Джакоб Теплитски (Jacob Teplitsky), активный участник списка рассылки LARTC и контрибьютор проекта tcng, написал поддержку htb для tcng.
Программа tcsim — имитатор системы управления трафиком, который работает с конфигурационными файлами tcng и имитирует поведение ядра при передаче данных, согласно структурам управления трафиком. Не смотря на то, что tcsim является значительной частью проекта tcng, в этом документе он вообще не рассматривается.