На странице руководства единственным ограничением burst
является то, что он должен быть достаточно высоким, чтобы разрешить настроенную вами скорость: она должна быть не ниже скорости / Гц. HZ - это параметр конфигурации ядра; Вы можете выяснить, что находится в вашей системе, проверив конфигурацию вашего ядра. Например, в Debian вы можете:
$ egrep '^CONFIG_HZ_[0-9]+' /boot/config-`uname -r`
CONFIG_HZ_250=y
таким образом, HZ в моей системе составляет 250. Чтобы достичь скорости burst
10 Мбит / с , мне, таким образом, потребуется не менее 10 000 000 бит / с ÷ 250 Гц = 40000 бит = 5000 байтов. (Обратите внимание, что более высокое значение в man-странице относится к тому, когда HZ = 100 было значением по умолчанию).
Но помимо этого, burst
это также инструмент политики. Он настраивает степень, в которой вы можете использовать меньшую пропускную способность сейчас, чтобы «сохранить» ее для будущего использования. Здесь часто встречается то, что вы можете позволить небольшим загрузкам (скажем, веб-странице) идти очень быстро, при этом ограничивая большие загрузки. Вы делаете это, увеличивая burst
размер, который вы считаете небольшой загрузкой. (Хотя вы часто переключаетесь на классный qdisc, такой как htb, поэтому вы можете сегментировать различные типы трафика.)
Итак: вы настраиваете пакет, чтобы он был как минимум достаточно большим, чтобы достичь желаемого rate
. Помимо этого, вы можете увеличить его в зависимости от того, чего вы пытаетесь достичь.
Концептуальная модель Token Bucket Filter
«Ведро» - это метафорический объект. Его ключевые свойства заключаются в том, что он может содержать токены, и что количество токенов, которые он может содержать, ограничено - если вы попытаетесь добавить больше, он «переполнится» и лишние токены будут потеряны (так же, как попытка положить слишком много воды в актуальное ведро). Размер ведра называется burst
.
Чтобы фактически передать пакет в сеть, этот пакет должен получить токены, равные его размеру в байтах или mpu
(в зависимости от того, что больше).
Существует (или может быть) строка (очередь) пакетов, ожидающих токены. Это происходит, когда корзина пуста или, наоборот, содержит меньше токенов, чем размер пакета. На тротуаре перед ковшом имеется очень много места, и количество места (в байтах) устанавливается непосредственно limit
. Альтернативно, это может быть установлено косвенно с latency
(в идеальном мире, вычисление было бы rate
× latency
).
Когда ядро хочет отправить пакет из отфильтрованного интерфейса, оно пытается поместить пакет в конец строки. Если на тротуаре нет места, это плохо для пакета, потому что в конце тротуара находится бездонная яма, и ядро отбрасывает пакет.
Последняя часть - это машина для изготовления токенов, которая добавляет rate
/ HZ
жетоны в ведро каждый тик. (Вот почему ваше ведро должно быть как минимум таким большим, в противном случае некоторые из недавно выпущенных жетонов будут немедленно сброшены).
tbf
является частью системы управления трафиком Linux.man tbf
илиman tc-tbf
должен поднять документацию.