TC(8)

NUME
tbf - filtru găleată de jetoane (Token Bucket)

SINOPSIS
tc qdisc ... tbf rate rata burst octeți/celulă ( latency ms | limit octeți ) [ mpu octeți [ peakrate rata mtu octeți/celulă ] ]

„burst” este cunoscut și sub denumirea de tampon(buffer) și „maxburst”. mtu este cunoscut și sub denumirea de „minburst”.

DESCRIERE

Filtrul Token Bucket este o disciplină de coadă clasică disponibilă pentru controlul traficului cu comanda tc(8) .

TBF este un modelator pur și nu planifică niciodată traficul. Nu conservă activitatea și se poate limita singur, chiar dacă pachetele sunt disponibile, pentru a se asigura că rata configurată nu este depășită. Este capabil să modeleze până la 1 Mbit/s de trafic normal cu o intensitate minimă ideală, trimițând date exact la ratele configurate.

Sunt posibile rate mult mai mari, dar cu prețul pierderii „burstiness”-ului minim. În acest caz, datele sunt în medie scoase din coadă la rata configurată, dar pot fi trimise mult mai repede, la intervale de milisecunde. Datorită cozilor suplimentare existente în adaptoarele de rețea, acest lucru nu reprezintă de obicei o problemă.

ALGORITM
După cum sugerează și numele, traficul este filtrat pe baza consumului de jetoane. Jetoanele corespund aproximativ cu octeți, cu constrângerea suplimentară că fiecare pachet consumă anumite jetoane, indiferent cât de mic este. Acest lucru reflectă faptul că chiar și un pachet de dimensiune zero ocupă legătura pentru o anumită perioadă de timp.

La creare, TBF este alimentat cu jetoane care corespund cantității de trafic care poate fi transmisă într-o singură rafală(burst). Jetoanele sosesc la un ritm constant, până când găleata(bucket) este plină.

Dacă nu sunt disponibile jetoane, pachetele sunt puse în coadă, până la o limită configurată. TBF calculează acum deficitul de jetoane și limitează viteza până când primul pachet din coadă poate fi trimis.

Dacă nu este acceptabil să se transmită pachete la viteza maximă, se poate configura o rată de vârf pentru a limita viteza cu care se golește găleata(bucket-ul). Această rată de vârf este implementată ca un al doilea TBF cu o găleată foarte mică, astfel încât să nu se producă o transmitere excesivă.

Pentru a atinge perfecțiunea, a doua găleată poate conține doar un singur pachet, ceea ce duce la limita de 1 Mbit/s menționată anterior.

Această limită este cauzată de faptul că nucleul poate limita viteza doar pentru minimum 1 „jiffy”, care depinde de HZ ca 1/HZ. Pentru o modelare perfectă, doar un singur pachet poate fi trimis pe jiffy - pentru HZ=100, aceasta înseamnă 100 de pachete de aproximativ 1000 de octeți fiecare, ceea ce corespunde aproximativ la 1 mbit/s.

PARAMETRI
Consultați tc(8) pentru a afla cum se specifică unitățile acestor valori.

limit sau latency
    Limita este numărul de octeți care pot fi așteptați în coadă până când jetoanele devin disponibile. Puteți specifica acest lucru și invers, definind parametrul de latență, care specifică durata maximă de timp pe care un pachet o poate sta în TBF. Ultimul calcul ia în considerare dimensiunea găleții(bucket), rata și, eventual, rata de vârf (peakrate), dacă este definită. Acești doi parametri se exclud reciproc.

burst
    Cunoscut și sub denumirea de buffer(tampon) sau maxburst. Dimensiunea găleții, în octeți. Aceasta este cantitatea maximă de octeți care pot fi disponibili instantaneu pentru jetoane. În general, ratele de modelare mai mari necesită un tampon mai mare. Pentru 10 Mbit/s pe Intel, aveți nevoie de cel puțin 10 kiloocteți tampon dacă doriți să atingeți rata configurată!

    Dacă tamponul este prea mic, pachetele pot fi pierdute deoarece sosesc mai multe jetoane pe tic de cronometru decât încap în tampon. Dimensiunea minimă a tamponului poate fi calculată împărțind rata la HZ.

    Calculele privind utilizarea jetoanelor sunt efectuate utilizând un tabel care, în mod implicit, are o rezoluție de 8 pachete. Această rezoluție poate fi modificată specificând dimensiunea celulei cu burst(rafala). De exemplu, pentru a specifica un tampon de 6000 octeți cu o dimensiune a celulei de 16 octeți, stabiliți un burst de 6000/16. Probabil că nu va trebui să definiți niciodată această valoare. Trebuie să fie o putere integrală a lui 2.

mpu Un pachet de dimensiune zero nu utilizează lățime de bandă zero. Pentru Ethernet, niciun pachet nu utilizează mai puțin de 64 de octeți. Unitatea minimă de pachet determină utilizarea minimă a jetonului (specificată în octeți) pentru un pachet. Valoarea implicită este zero.

rate
    Regulatorul de viteză. A se vedea observațiile de mai sus privind limitele! Consultați tc(8) pentru unități.

În plus, dacă se dorește o rată de vârf, sunt disponibili următorii parametri:

peakrate
    Rata maximă de golire a găleții. Nu este necesar să se stabilească rata maximă, aceasta fiind necesară numai dacă se dorește o modelare perfectă a scalei de timp în milisecunde.

mtu/minburst
    Specifică dimensiunea intervalului de viteză maximă. Pentru o precizie perfectă, trebuie stabilită la MTU-ul interfeței. Dacă este necesară o viteză maximă, dar este acceptabilă o anumită instabilitate, această dimensiune poate fi mărită. Un minburst de 3000 octeți permite o viteză maximă de aproximativ 3 Mbit/s, având în vedere pachete de 1000 de octeți.

    La fel ca în cazul dimensiunii normale a rafalei, puteți specifica și o dimensiune celulă.

EXEMPLU ȘI UTILIZARE

Pentru a atașa un TBF cu o rată maximă susținută de 0,5 Mbit/s, o rată de vârf de 1,0 Mbit/s, un tampon de 5 kiloocteți, cu o limită a dimensiunii cozii pre-bucket calculată astfel încât TBF să provoace cel mult 70 ms de latență, cu un comportament perfect al ratei de vârf, executați:

# tc qdisc add dev eth0 handle 10: root tbf rate 0.5mbit \
  burst 5kb latency 70ms peakrate 1mbit \
  minburst 1540

Pentru a atașa un qdisc intern, de exemplu sfq, executați:

# tc qdisc add dev eth0 parent 10:1 handle 100: sfq

Fără qdisc intern, coada TBF funcționează ca bfifo. Dacă qdisc intern este modificat, limita/latența nu mai este eficientă.

CONSULTAȚI ȘI
tc(8)

AUTOR
Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>. Această pagină de manual este întreținută de bert hubert <ahu@ds9a.nl>

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.