Mininet. Token Bucket Filter
Управление пропускной способностью с помощью дисциплина очередей 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. Введение
tabe widget2 Теоретические сведения
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, следующий:tc 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) используем параметры командной строки:
sudo mn --topo=linear,2 -xРис. 1.: Лабораторная топология
3.2 Рабочие файлы
- Подключимся к виртуальной машине:
ssh -Y mininet@192.168.x.y - Для рабочих файлов будем использовать каталог
~/work/lab_tbf:mkdir -p ~/work/lab_tbf
4 Интерактивный эксперимент
4.1 Отсутствие ограничения скорости
- Запустим iPerf3 в режиме сервера, выполните команду
iperf3 -sв терминале хостаh2:iperf3 -s - Запустим iPerf3 в клиентском режиме, запустите команду
iperf3 -c 10.0.0.2для хостаh1:iperf3 -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:sudo 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 — тактовая частота, настроенная как параметр ядра, и может быть извлечена с помощью следующей команды:
egrep '^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:iperf3 -s - Запустим iPerf3 в клиентском режиме, запустите команду
iperf3 -c 10.0.0.2для хостаh1:iperf3 -c 10.0.0.2 - Чтобы остановить сервер, нажмите
Ctrl+cв терминале хостаh2. - Удалите конфигурацию на хосте
h1:sudo 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):sudo 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:iperf3 -sЗапустим iPerf3 в клиентском режиме, запустите команду
iperf3 -c 10.0.0.2для хостаh1:iperf3 -c 10.0.0.2Чтобы остановить сервер, нажмите
Ctrl+cв терминале хостаh2.Удалите конфигурацию на коммутаторе
s1:sudo tc qdisc del dev s1-eth2 root
4.4 Объединение NETEM и TBF
NETEM используется для введения задержки, джиттера, повреждения пакетов и т. д.
TBF может использоваться для ограничения скорости.
Возможно комбинировать несколько модулей.
Первый
qdisc(qdisc1) присоединён к корневой метке. Затем последующиеqdiscможно прикрепить к своим родителям, указав правильную метку.Объединим NETEM и TBF, чтобы сделать эмуляцию адекватней. Введём задержку, джиттер и повреждение пакетов, указав скорость на интерфейсе коммутатора
s1.Введём в терминале коммутатора
s1:sudo tc qdisc add dev s1-eth2 root handle 1: netem delay 10ms- Ключевое слово
handleзадаёт дескриптор подключения, имеющий смысл очерёдности подключения разных дисциплинqdisc.
- Ключевое слово
Теперь можно убедиться, что соединение от хоста
h1к хостуh2имеет заданную задержку.Запустите команду
pingс терминала хостаh1:ping 10.0.0.2Нажмите
Ctrl+c, чтобы остановить тест.Добавим второе правило на коммутаторе
s1, которое задаёт ограничение скорости с помощьюtbf:sudo 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:iperf3 -sЗапустим iPerf3 в клиентском режиме, запустите команду
iperf3 -c 10.0.0.2для хостаh1:iperf3 -c 10.0.0.2Чтобы остановить сервер, нажмите
Ctrl+cв терминале хостаh2.Удалите конфигурацию на коммутаторе
s1:sudo tc qdisc del dev s1-eth2 root