Фильтр Token Bucket является безклассовой очередью для управления трафиком командой tc(8).
TBF является простой очередью и не планирует трафик. Пакеты помещаются в очередь, пока не будет достигнут определенный размер очереди, который затем передается на обработку (но происходит некоторая задержка данных, т.к. происходит ожидание необходимого количества пакетов для поддержания постоянной скорости передачи). Если же скорость превышает заданную, то "лишние" пакеты просто отбрасываются. На всех платформах (кроме Alpha) позволяет обрабатывать более 1 мбит/с обычного трафика с минимальной задержкой, отправляя данные точно с заданной скоростью.
Более высокая скорость поддерживается, но задержка на обработку увеличивается. В этом случае данные из очереди отправляются с заданной скоростью, но возможно увеличение скорости на несколько миллисекунд. Поскольку пакеты отправляются в очередь сетевого адаптера, часто это не является проблемой.
Ядра с высоким 'HZ' могут обрабатывать высокие скорости с минимальной задержкой. На платформе Alpha HZ в десять раз выше, что позволяет ограничивать скорость до 10 мбит/с с приемлемой задержкой. Эти условия достижимы для пакетов с размером около 1000 байтов.
При создании TBF для очереди накапливаются токены, отражающие объем помещённого в очередь трафика. Токены прибывают с постоянной скоростью до тех пор, пока буфер не окажется полон.
Если нужное количество токенов недоступно, пакеты, не добирающие заданную скорость, помещаются в очередь. После этого вычисляется дефицит токенов и очередь замораживается до тех пор, когда отправляется первый пакет из очереди.
Если ограничена передача пакетов с максимальной скоростью, должна быть настроена пиковая скорость (peakrate) для ограничения скорости, при достижении которой очищается буфер. Ограничение пиковой скорости реализовано в виде второго TBF с очень маленьким буфером.
Для достижения приемлемой задержки второй буфер может содержать только один пакет, который соответствует вышеупомянутому пределу в 1 мбит/с.
Этот предел связан с минимальным временем, необходимым ядру для отправки в виде одного "мига", который зависит от HZ как 1/HZ. Для идеальной классификации только один пакет может быть отправлен в один "миг". Для HZ=100 это означает 100 пакетов по 1000 байтов, что приблизительно соответствует 1 мбит/с.
Если буфер будет слишком маленький, лишние пакеты будут отбрасываться поскольку потребуется получить заданную скорость и для этого нужно набрать необходимое количество токенов. Минимальный размер буфера определяется делением заданного уровня скорости на HZ.
Подсчет токенов осуществляется по таблице, заполняемой при анализе 8 пакетов по умолчанию. Это поведение может быть изменено указанием другого размера ячейки (cell) . Например, для указания размера буфера в 6000 байт с 16-байтной ячейкой, установите burst как 6000/16.
Если потребуется указать максимальную скорость передачи пакетов, используйте следующие параметры:
Так и burstsize, вы можете установить размер ячейки (cell) .
Для установки очереди с гарантированной скоростью 0,5 мбит/с, а максимальной скоростью
1,0 мбит/c, буфером в 5 кб, ограничивающей ожидание 70 мс и приемлемым временем задержки
выполните:
# tc qdisc add dev eth0 root tbf rate 0.5mbit \
burst 5kb latency 70ms peakrate 1mbit \
minburst 1540
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |