Dalla manpage, l'unico vincolo burst
è che deve essere abbastanza alto da consentire la velocità configurata: deve essere almeno rate / HZ. HZ è un parametro di configurazione del kernel; puoi capire di cosa si tratta sul tuo sistema controllando la configurazione del tuo kernel. Ad esempio, su Debian puoi:
$ egrep '^CONFIG_HZ_[0-9]+' /boot/config-`uname -r`
CONFIG_HZ_250=y
quindi HZ sul mio sistema è 250. Per raggiungere una velocità di 10 Mbps, avrei quindi bisogno burst
di almeno 10.000.000 bit / sec ÷ 250 Hz = 40.000 bit = 5000 byte. (Notare che il valore più alto nella manpage proviene da quando HZ = 100 era il valore predefinito).
Ma oltre a ciò, burst
è anche uno strumento politico. Configura la misura in cui è possibile utilizzare meno larghezza di banda ora per "salvarla" per un utilizzo futuro. Una cosa comune qui è che potresti voler consentire a piccoli download (diciamo, una pagina web) di andare molto velocemente, pur limitando i grandi download. Puoi farlo aumentando burst
le dimensioni che consideri un piccolo download. (Tuttavia, passeresti spesso a un qdisc di classe come htb, in modo da poter segmentare i diversi tipi di traffico.)
Quindi: configuri il burst in modo che sia almeno abbastanza grande da ottenere il desiderato rate
. Oltre a ciò, puoi aumentarlo ulteriormente, a seconda di ciò che stai cercando di ottenere.
Modello concettuale di un filtro secchio token
Un "secchio" è un oggetto metaforico. Le sue proprietà chiave sono che può contenere token e che il numero di token che può contenere è limitato: se si tenta di aggiungerne altri, "trabocca" e i token extra vengono persi (proprio come se si cercasse di inserire troppa acqua in un secchio reale). Viene chiamata la dimensione del bucket burst
.
Per poter effettivamente trasmettere un pacchetto sulla rete, quel pacchetto deve ottenere token uguali alla sua dimensione in byte o mpu
(qualunque sia il più grande).
C'è (o può esserci) una linea (coda) di pacchetti in attesa di token. Ciò si verifica quando il bucket è vuoto o, in alternativa, ha meno token rispetto alla dimensione del pacchetto. C'è solo così tanto spazio sul marciapiede davanti al secchio e la quantità di spazio (in byte) viene impostata direttamente da limit
. In alternativa, può essere impostato indirettamente con latency
(in un mondo ideale, il calcolo sarebbe rate
× latency
).
Quando il kernel vuole inviare un pacchetto dall'interfaccia filtrata, tenta di posizionare il pacchetto alla fine della riga. Se non c'è spazio sul marciapiede, è un peccato per il pacchetto, perché alla fine del marciapiede c'è una fossa senza fondo e il kernel rilascia il pacchetto.
Il pezzo finale è una macchina per fare token che aggiunge rate
/ HZ
token al secchio ad ogni tick. (Ecco perché il tuo bucket deve essere almeno così grande, altrimenti alcuni token appena coniati verranno immediatamente scartati).
tbf
fa parte del framework di controllo del traffico Linux.man tbf
oman tc-tbf
dovrebbe portare documentazione.