Управление пропускной способностью с помощью дисциплина очередей Token Bucket Filter (TBF).
1 Общая информация
1.1 Цели
- Освоить использование дисциплины очередей Token Bucket Filter (TBF).
1.2 Задачи
- Получить понятие об алгоритме Token Bucket.
- Использовать Token Bucket Filter (tbf) в Linux.
- Понять, как комбинировать дисциплины очередей в Linux Traffic Control (tc).
- Объединить tbf и NETEM.
- Эмулируйте свойства WAN в Mininet.
1.3 Видео: Token Bucket Filter. Введение
2 Теоретические сведения
2.1 Введение в алгоритм Token Bucket
- При моделировании глобальной сети (WAN) иногда необходимо ограничить пропускную способность устройств (конечных хостов и сетевых устройств), чтобы наблюдать за поведением сети в различных условиях.
- Token Bucket — это алгоритм, используемый в сетях с коммутацией пакетов для ограничения пропускной способности и пиковой нагрузки трафика.
- Сущность Token Bucket состоит в добавлении токенов (представленных в виде пакетов или байтов) с фиксированной скоростью в буфер (ведро) с фиксированной ёмкостью.
- Когда приходит новый пакет длиной \(n\) байт, буфер (ведро) проверяется на количество доступных токенов; если доступно хотя бы \(n\) токенов, \(n\) токенов удаляются из ведра, и пакет отправляется в сеть.
- В противном случае токены не удаляются, и пакет считается несоответствующим. В таком случае пакет может быть отброшен, поставлен в очередь или передан, но помечен как несоответствующий.
- Параметры алгоритма:
rate
есть скорость передачи; она определяется частотой, с которой токены добавляются в корзину.- Burstiness (всплеск): когда ведро полностью занято (т. е. никакие пакеты не потребляют токены), новые пакеты будут потреблять токены сразу, без ограничений. Всплеск определяется как количество токенов, которые могут поместиться в ведро (или размер ведра).
- Иногда создаётся ещё одно маленькое ведро, с размером, равным максимально передаваемому элементу (Maximum Transmission Unit — MTU). Скорость обработки этого буфера намного превышает исходную (peak rate — пиковая скорость).
2.2 Основной синтаксис tbf
- Основной синтаксис
tbf
, используемый сtc
, следующий:1tc qdisc [add | ...] dev [dev_id] root tbf limit [BYTES] burst [BYTES] rate [BPS] [mtu BYTES] [ peakrate BPS ] [ latency TIME ]
- Здесь:
tc
: инструмент управления трафиком Linux;qdisc
: дисциплина очереди (qdisc) представляет собой набор правил, определяющих порядок, в котором обслуживаются пакеты, поступающие с выходных данных IP-протокола. Дисциплина очереди применяется к очереди пакетов, чтобы решить, когда отправлять каждый пакет;[add | del | replace | change | show]
: операция надqdisc
;dev [dev_id]
: задаёт интерфейс;tbf
: указывает, что используется алгоритм Token Bucket Filter;limit [BYTES]
: размер очереди пакетов в байтах;burst [BYTES]
: количество байтов, которое может поместиться в корзину;rate [BPS]
: скорость передачи, определяемая частотой, с которой токены добавляются в корзину;mtu [BYTES]
: максимальная единица передачи в байтах;peakrate [BPS]
(пиковая скорость [бит/с]): максимальная скорость пакета;latency [TIME]
: максимальное время ожидания пакета в очереди.
3 Подготовка стенда
3.1 Лабораторная топология
В топологии используется сеть 10.0.0.0/8, назначенная Mininet по умолчанию.
Топология представляет собой коммутатор с двумя подключёнными к нему хостами.
Для запуска топологии (рис. 1) используем параметры командной строки:
1sudo mn --topo=linear,2 -x
3.2 Рабочие файлы
- Подключимся к виртуальной машине:
1ssh -Y mininet@192.168.x.y
- Для рабочих файлов будем использовать каталог
~/work/lab_tbf
:1mkdir -p ~/work/lab_tbf
4 Интерактивный эксперимент
4.1 Отсутствие ограничения скорости
- Запустим iPerf3 в режиме сервера, выполните команду
iperf3 -s
в терминале хостаh2
:1iperf3 -s
- Запустим iPerf3 в клиентском режиме, запустите команду
iperf3 -c 10.0.0.2
для хостаh1
:1iperf3 -c 10.0.0.2
- Чтобы остановить сервер, нажмите
Ctrl+c
в терминале хостаh2
.
4.2 Ограничение скорости на конечных хостах
- Команду
tc
можно применить к сетевому интерфейсу устройства для формирования исходящего трафика. - Будем ограничивать скорость отправки конечного хоста с помощью фильтра Token Bucket Filter (tbf), который является реализацией алгоритма Token Bucket.
4.2.1 Определим интерфейс хостов h1
и h2
- На хосте
h1
введите командуifconfig
, чтобы отобразить информацию, относящуюся к его сетевым интерфейсам и назначенным им IP-адресам.- Хост
h1
имеет два интерфейса:h1-eth0
иlo
. Интерфейсh1-eth0
на хостеh1
настроен с IP-адресом 10.0.0.1 и маской подсети 255.0.0.0. Этот интерфейс необходимо использовать вtc
при эмуляции сети.
- Хост
- В командной строке хоста
h2
также введите командуifconfig
.- Хост
h2
имеет два интерфейса:h2-eth0
иlo
. Интерфейсh2-eth0
на хостеh1
настроен с IP-адресом 10.0.0.2 и маской подсети 255.0.0.0. Этот интерфейс необходимо использовать вtc
при эмуляции сети.
- Хост
4.2.2 Эмуляция глобальной сети 10 Гбит/с с высокой задержкой
- Будем использовать команду
tbf
на сетевом интерфейсе для управления скоростью исходящего трафика. - Измените пропускную способность хоста
h1
:1sudo tc qdisc add dev h1-eth0 root tbf rate 10gbit burst 5000000 limit 15000000
- Эта команда устанавливает пропускную способность на 10 Гбит/с на интерфейсе
h1-eth0
хостаh1
. - Параметры Token Bucket Filter:
- rate : 10gbit;
- burst : 5,000,000;
- limit : 15,000,000.
- Распишем элементы команды:
sudo
: включить выполнение команды с более высокими привилегиями безопасности;tc
: вызвать управление трафиком Linux;qdisc
: изменить дисциплину очередей сетевого планировщика;add
(добавить): создать новое правило;dev h1-eth0 root
: интерфейс, на котором будет применяться правило;tbf
: использовать алгоритм Token Bucket Filter;rate
: укажите скорость передачи (10 Гбит/с);burst
: количество байтов, которое может поместиться в корзину (5 000 000) за один такт;limit
: размер очереди в байтах (15 000 000).
- Расчёт всплеска.
tbf
требует установки значения всплеска при ограничении скорости. Это значение должно быть достаточно высоким, чтобы обеспечить установленную вами скорость.- Она должна быть не ниже указанной частоты, делённой на HZ, где HZ — тактовая частота, настроенная как параметр ядра, и может быть извлечена с помощью следующей команды:
1egrep '^CONFIG_HZ_[0-9]+' /boot/config-`uname -r`
- HZ на
h1
— 250. Таким образом, для расчёта всплеска делим 10 Гбит/с на 250:- 10 Gbps = 10,000,000,000 bps;
- burst = 10,000,000,000 [bps]/250 [s-1] = 40,000,000 [bit] = 40,000,000/8 [byte] = 5,000,000 [byte].
- Полученное значение должно использоваться в команде в качестве значения burst (всплеска).
- Проверим конфигурацию с помощью инструмента
iperf3
для измерения пропускной способности. - Запустим iPerf3 в режиме сервера, выполните команду
iperf3 -s
в терминале хостаh2
:1iperf3 -s
- Запустим iPerf3 в клиентском режиме, запустите команду
iperf3 -c 10.0.0.2
для хостаh1
:1iperf3 -c 10.0.0.2
- Чтобы остановить сервер, нажмите
Ctrl+c
в терминале хостаh2
. - Удалите конфигурацию на хосте
h1
:1sudo tc qdisc del dev h1-eth0 root
4.3 Ограничение скорости на коммутаторах
Применим Token Bucket Filter к интерфейсам коммутатора.
При ограничении скорости на интерфейсе
s1-eth2
коммутатораs1
все сеансы связи между коммутаторомs1
и коммутаторомs2
будут фильтроваться в соответствии с применяемыми правилами.Введите в терминале
s1
командуifconfig
, чтобы отобразить информацию, связанную с его сетевыми интерфейсами:s1-eth1
: интерфейс, соединяющий коммутаторs1
с хостомh1
;s1-eth2
: интерфейс, соединяющий коммутаторs1
с коммутаторомs2
;s2-eth1
: интерфейс, соединяющий коммутаторs2
с хостомh2
;s2-eth2
: интерфейс, соединяющий коммутаторs2
с коммутаторомs1
.
Примените правило ограничения скорости
tbf
к интерфейсу коммутатораs1
, который соединяет его с коммутаторомs2
(s1-eth2
):1sudo tc qdisc add dev s1-eth2 root tbf rate 10gbit burst 5000000 limit 15000000
- Параметры Token Bucket Filter следующие:
rate
: 10gbit;burst
: 5,000,000;limit
: 15,000,000.
- Параметры Token Bucket Filter следующие:
Проверим конфигурацию с помощью инструмента
iperf3
для измерения пропускной способности.Запустим iPerf3 в режиме сервера, выполните команду
iperf3 -s
в терминале хостаh2
:1iperf3 -s
Запустим iPerf3 в клиентском режиме, запустите команду
iperf3 -c 10.0.0.2
для хостаh1
:1iperf3 -c 10.0.0.2
Чтобы остановить сервер, нажмите
Ctrl+c
в терминале хостаh2
.Удалите конфигурацию на коммутаторе
s1
:1sudo tc qdisc del dev s1-eth2 root
4.4 Объединение NETEM и TBF
NETEM используется для введения задержки, джиттера, повреждения пакетов и т. д.
TBF может использоваться для ограничения скорости.
Возможно комбинировать несколько модулей.
Первый
qdisc
(qdisc1
) присоединён к корневой метке. Затем последующиеqdisc
можно прикрепить к своим родителям, указав правильную метку.Объединим NETEM и TBF, чтобы сделать эмуляцию адекватней. Введём задержку, джиттер и повреждение пакетов, указав скорость на интерфейсе коммутатора
s1
.Введём в терминале коммутатора
s1
:1sudo tc qdisc add dev s1-eth2 root handle 1: netem delay 10ms
- Ключевое слово
handle
задаёт дескриптор подключения, имеющий смысл очерёдности подключения разных дисциплинqdisc
.
- Ключевое слово
Теперь можно убедиться, что соединение от хоста
h1
к хостуh2
имеет заданную задержку.Запустите команду
ping
с терминала хостаh1
:1ping 10.0.0.2
Нажмите
Ctrl+c
, чтобы остановить тест.Добавим второе правило на коммутаторе
s1
, которое задаёт ограничение скорости с помощьюtbf
:1sudo tc qdisc add dev s1-eth2 parent 1: handle 2: tbf rate 2gbit burst 1000000 limit 2000000
- Параметры Token Bucket Filter следующие:
rate
: 2gbit;burst
: 1,000,000;limit
: 2,000,000.
- Параметры Token Bucket Filter следующие:
Проверим предыдущую конфигурацию с помощью инструмента iperf3 для измерения пропускной способности.
Запустим iPerf3 в режиме сервера, выполните команду
iperf3 -s
в терминале хостаh2
:1iperf3 -s
Запустим iPerf3 в клиентском режиме, запустите команду
iperf3 -c 10.0.0.2
для хостаh1
:1iperf3 -c 10.0.0.2
Чтобы остановить сервер, нажмите
Ctrl+c
в терминале хостаh2
.Удалите конфигурацию на коммутаторе
s1
:1sudo tc qdisc del dev s1-eth2 root