Na página de manual, a única restrição burst
é que ela deve ser alta o suficiente para permitir sua taxa configurada: deve ser pelo menos taxa / HZ. HZ é um parâmetro de configuração do kernel; você pode descobrir o que é no seu sistema verificando a configuração do kernel. Por exemplo, no Debian, você pode:
$ egrep '^CONFIG_HZ_[0-9]+' /boot/config-`uname -r`
CONFIG_HZ_250=y
então HZ no meu sistema é 250. Para atingir uma taxa de 10mbps, seria necessário, burst
no mínimo, 10.000.000 bits / s ~ 250 Hz = 40.000 bits = 5000 bytes. (Observe que o valor mais alto na página de manual é quando HZ = 100 era o padrão).
Mas além disso, burst
também é uma ferramenta de política. Ele configura até que ponto você pode usar menos largura de banda agora para "salvá-la" para uso futuro. Uma coisa comum aqui é que você pode permitir que pequenos downloads (digamos, uma página da web) sejam muito rápidos, enquanto controla grandes downloads. Você faz isso aumentando burst
o tamanho que considera um pequeno download. (Porém, muitas vezes você alterna para um qdisc de classe, como o htb, para segmentar os diferentes tipos de tráfego.)
Então: você configura o burst para ser pelo menos grande o suficiente para atingir o desejado rate
. Além disso, você pode aumentar ainda mais, dependendo do que você está tentando alcançar.
Modelo conceitual de um filtro de bucket de token
Um "balde" é um objeto metafórico. Suas principais propriedades são que ele pode conter tokens e que o número de tokens que ele pode conter é limitado - se você tentar adicionar mais, ele "transborda" e os tokens extras são perdidos (assim como tentar colocar muita água em um balde real). O tamanho do balde é chamado burst
.
Para realmente transmitir um pacote para a rede, esse pacote deve obter tokens iguais ao seu tamanho em bytes ou mpu
(o que for maior).
Há (ou pode haver) uma linha (fila) de pacotes aguardando tokens. Isso ocorre quando o balde está vazio ou, em alternativa, possui menos tokens que o tamanho do pacote. Há muito espaço na calçada em frente ao balde, e a quantidade de espaço (em bytes) é definida diretamente por limit
. Como alternativa, pode ser definido indiretamente com latency
(em um mundo ideal, o cálculo seria rate
× latency
).
Quando o kernel deseja enviar um pacote pela interface filtrada, ele tenta colocar o pacote no final da linha. Se não houver espaço na calçada, isso é lamentável para o pacote, porque no final da calçada há um poço sem fundo, e o kernel deixa o pacote cair.
A peça final é uma máquina de fabricação de tokens que adiciona rate
/ HZ
tokens ao balde a cada carrapato. (É por isso que seu balde deve ter pelo menos esse tamanho, caso contrário, alguns dos tokens recém-criados serão imediatamente descartados).
tbf
faz parte da estrutura de controle de tráfego do Linux.man tbf
ouman tc-tbf
deve trazer documentação.