table of contents
- trixie-backports 4.29.1-1~bpo13+1
- testing 4.29.1-1
- unstable 4.29.1-1
| TC(8) | Linux | TC(8) |
NUME¶
sfq - coadă de așteptare stocastică echitabilă (Stochastic Fairness Queueing)
SINOPSIS¶
tc qdisc ... [ divisor hashtablesize ] [ limit pachete ] [ perturb secunde ] [ quantum octeți ] [ flows număr ] [ depth număr ] [ headdrop ] [ redflowlimit octeți ] [ min octeți ] [ max octeți ] [ avpkt octeți ] [ burst pachete ] [ probability P ] [ ecn ] [ harddrop ]
DESCRIERE¶
Stochastic Fairness Queueing este o disciplină de coadă fără clase disponibilă pentru controlul traficului cu comanda tc(8) .
SFQ nu modelează traficul, ci doar programează transmiterea pachetelor, pe baza „fluxurilor”. Scopul este de a asigura echitatea, astfel încât fiecare flux să poată trimite date pe rând, împiedicând astfel ca un singur flux să acopere restul.
Acest lucru poate avea, de fapt, un anumit efect în atenuarea unei tentative de refuz al serviciului.
SFQ economisește resurse și, prin urmare, livrează întotdeauna un pachet dacă are unul disponibil.
ALGORITM¶
La introducerea în coadă, fiecare pachet este atribuit unui hash bucket, pe baza valorii hash a pachetului. Această valoare hash este obținută fie dintr-un clasificator de flux extern (utilizați tc filter pentru a le stabili) fie dintr-un clasificator intern implicit, dacă nu a fost configurat niciun clasificator extern.
Când se utilizează clasificatorul intern, sfq utilizează
- (i)
- Adresa sursă
- (ii)
- Adresă de destinație
- (iii)
- Portul sursă și portul destinație
Dacă acestea sunt disponibile. SFQ recunoaște ipv4 și ipv6, precum și UDP, TCP și ESP. Pachetele cu alte protocoale sunt criptate (hashed) pe baza reprezentării pe 32 de biți a destinației și sursei lor. Un flux corespunde în mare parte unei conexiuni TCP/IP.
Fiecare dintre aceste găleți (buckets) ar trebui să reprezinte un flux unic. Deoarece mai multe fluxuri pot fi rezumate (hashed) în aceeași găleată, algoritmul intern de rezumare (hashing) sfqs poate fi perturbat la intervale configurabile, astfel încât inechitatea să dureze doar pentru o perioadă scurtă de timp. Perturbarea poate provoca însă o reordonare neintenționată a pachetelor. După linux-3.3, nu mai există problema reordonării pachetelor, dar sunt posibile pierderi de pachete dacă rehashing-ul atinge o limită (numărul de fluxuri sau pachete per flux).
La eliminarea din coadă, fiecare hashbucket (găleată-rezumat) cu date este interogată în mod circular.
Înainte de linux-3.3, lungimea maximă a SFQ în timpul compilării era de 128 de pachete, care puteau fi distribuite în cel mult 128 de găleți din cele 1024 disponibile. În cazul depășirii capacității, se efectua eliminarea cozii „tail-drop” din găleata cea mai plină, menținându-se astfel echitatea.
După linux-3.3, lungimea maximă a SFQ este de 65535 pachete, iar limita divizorului este de 65536. În cazul depășirii capacității, se efectuează tail-drop pe cea mai plină găleată, cu excepția cazului în care s-a solicitat eliminarea începutului „headdrop”.
PARAMETRI¶
- divisor
- Poate fi utilizat pentru a stabili o dimensiune diferită a tabelei hash, disponibilă începând cu nucleul 2.6.39. Divizorul specificat trebuie să fie o putere a lui doi și nu poate fi mai mare de 65536. Valoarea implicită: 1024.
- limit
- Limita superioară a SFQ. Poate fi utilizată pentru a reduce lungimea implicită de 127 de pachete. După linux-3.3, poate fi mărită.
- depth
- Limita de pachete pe flux (după linux-3.3). Valoarea implicită este 127 și poate fi redusă.
- perturb
- Intervalul în secunde pentru perturbarea algoritmului cozii. Valoarea implicită este 0, ceea ce înseamnă că nu are loc nicio perturbare. Nu stabiliți o valoare prea mică, deoarece fiecare perturbare poate provoca reordonarea sau pierderea unor pachete. Valoarea recomandată este 60. Această valoare nu are niciun efect atunci când se utilizează clasificarea fluxului extern. Este mai bine să creșteți valoarea divizorului pentru a reduce riscul coliziunilor hash.
- quantum
- Numărul de octeți pe care un flux îl poate scoate din coadă în timpul unei runde a procesului circular „round robin”. Valoarea implicită este MTU-ul interfeței, care este și valoarea recomandată și valoarea minimă.
- flows
- După linux-3.3, este posibil să se modifice limita implicită a fluxurilor. Valoarea implicită este 127.
- headdrop
- Comportamentul implicit al SFQ este de a efectua „tail-drop” al pachetelor dintr-un flux. Puteți solicita în schimb un „headdrop”, deoarece se știe că acesta oferă un răspuns mai bun pentru fluxurile TCP.
- redflowlimit
- Configurează modulul RED opțional în partea
superioară a fiecărui flux SFQ. Principiul detectării
timpurii aleatorii (Random Early Detection) constă în
marcarea sau eliminarea pachetelor într-un mod probabilistic.
(consultați «man tc-red» pentru detalii despre RED)
redflowlimit configurează limita maximă pentru dimensiunea reală (nu medie) a cozii pe flux SFQ în octeți.
- min
- Dimensiunea medie a cozii la care marcarea devine posibilă. Valoarea implicită este max /3
- max
- La această dimensiune medie a cozii, probabilitatea de marcare este maximă. Valoarea implicită este redflowlimit /4.
- probability
- Probabilitatea maximă pentru marcare, specificată ca număr în virgulă mobilă între 0,0 și 1,0. Valoarea implicită este 0,02.
- avpkt
- Specificată în octeți. Utilizată împreună cu burst pentru a determina constanta de timp pentru calcularea dimensiunii medii a cozii. Valoarea implicită este 1000.
- burst
- Utilizată pentru a determina cât de repede este
influențată dimensiunea medie a cozii de dimensiunea
reală a cozii.
Valoarea implicită este: (2 * min + max) / (3 * avpkt)
- ecn
- RED poate fie „marca”, fie „renunța/elimina”. Notificarea explicită de congestie permite RED să notifice gazdele la distanță că rata lor depășește lățimea de bandă disponibilă. Gazdele care nu sunt compatibile cu ECN pot fi notificate numai prin renunțarea la un pachet. Dacă acest parametru este specificat, pachetele care indică faptul că gazdele lor respectă ECN vor fi doar marcate și nu renunțate, cu excepția cazului în care dimensiunea cozii atinge adâncimea depth de pachete.
- harddrop
- Dacă dimensiunea medie a cozii de flux este mai mare de max octeți, acest parametru forțează o renunțare în loc de marcarea ecn.
EXEMPLU ȘI UTILIZARE¶
Pentru a atașa la dispozitivul ppp0:
# tc qdisc add dev ppp0 root sfq
Vă rugăm să rețineți că SFQ, la fel ca toate qdisc-urile care nu modelează (conservă munca), este util numai dacă deține coada. Acesta este cazul când viteza legăturii este egală cu lățimea de bandă disponibilă efectiv. Acest lucru este valabil pentru modemurile telefonice obișnuite, conexiunile ISDN și legăturile ethernet directe necomutate.
De cele mai multe ori, modemurile prin cablu și dispozitivele DSL nu se încadrează în această categorie. Același lucru este valabil și atunci când sunt conectate la un comutator și încearcă să trimită date către un segment congestionat, conectat și el la comutator.
În acest caz, coada efectivă nu se află în Linux și, prin urmare, nu este disponibilă pentru planificare.
Încorporați SFQ într-un qdisc cu clase pentru a vă asigura că deține coada.
Este posibil să se utilizeze clasificatori externi cu sfq, de exemplu pentru filtrul hash de trafic (flux) bazat numai pe adresele IP sursă/destinație:
# tc filter add ... flow hash keys src,dst perturb 30 divisor 1024
Rețineți că divizorul dat trebuie să corespundă celui utilizat de sfq. Dacă ați modificat valoarea implicită sfq de 1024, utilizați aceeași valoare și pentru filtrul hash de flux.
Exemplu de sfq cu modul RED opțional:
# tc qdisc add dev eth0 parent 1:1 handle 10: sfq limit 3000 flows
512 divisor 16384
redflowlimit 100000 min 8000 max 60000 probability 0.20 ecn headdrop
SURSA¶
- o
- Paul E. McKenney „Stochastic Fairness Queuing”, IEEE INFOCOMM'90 Proceedings, San Francisco, 1990.
- o
- Paul E. McKenney „Stochastic Fairness Queuing”, „Interworking: Research and Experience”, v.2, 1991, p.113-131.
- o
- See also: M. Shreedhar și George Varghese „Efficient Fair Queuing using Deficit Round Robin”, Proc. SIGCOMM 95.
CONSULTAȚI ȘI¶
AUTORI¶
Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, Eric Dumazet <eric.dumazet@gmail.com>.
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 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.
| 24 ianuarie 2012 | iproute2 |