Na página de manual, a única restrição em burst
é que ela deve ser alta o suficiente para permitir sua taxa configurada: ela deve ter pelo menos taxa / HZ. HZ é um parâmetro de configuração do kernel; você pode descobrir o que está no seu sistema verificando a configuração do seu 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, eu precisaria de um burst
de pelo menos 10.000.000 bits / seg ~ 250 Hz = 40.000 bits = 5000 bytes. (Observe que o valor mais alto na página man é de quando HZ = 100 era o padrão).
Mas além disso, burst
também é uma ferramenta política. Ele configura até que ponto você pode usar menos largura de banda agora para "salvá-lo" para uso futuro. Uma coisa comum aqui é que você pode querer permitir que pequenos downloads (digamos, uma página da web) sejam muito rápidos, ao mesmo tempo em que estrangulam grandes downloads. Você faz isso aumentando burst
para o tamanho que você considera um pequeno download. (No entanto, você costuma alternar para um qdisc de classe como o htb, para poder segmentar os diferentes tipos de tráfego.)
Então: você configura o burst para ser pelo menos grande o suficiente para atingir o rate
desejado. Além disso, você pode aumentá-lo ainda mais, dependendo do que você está tentando alcançar.
Modelo Conceitual de um Filtro de Caçamba 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 depósito é chamado burst
.
Para realmente transmitir um pacote para a rede, esse pacote deve obter tokens iguais ao tamanho em bytes ou mpu
(o que for maior).
Existe (ou pode ser) uma linha (fila) de pacotes esperando por tokens. Isso ocorre quando o bucket está vazio ou, alternativamente, tem menos tokens do 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
. Alternativamente, 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 há espaço na calçada, isso é uma pena para o pacote, porque no final da calçada há um poço sem fundo, e o kernel deixa cair o pacote.
A peça final é uma máquina de geração de tokens que adiciona rate
/ HZ
tokens ao bloco a cada tick. (É por isso que seu balde deve ser pelo menos tão grande, caso contrário, alguns dos tokens recém-cunhados serão imediatamente descartados).