TC(8) Linux TC(8) NUME sfq - coada de ateptare stocastica echitabila (Stochastic Fairness Queueing) SINOPSIS tc qdisc ... [ divisor hashtablesize ] [ limit pachete ] [ perturb secunde ] [ quantum octei ] [ flows numar ] [ depth numar ] [ headdrop ] [ redflowlimit octei ] [ min octei ] [ max octei ] [ avpkt octei ] [ burst pachete ] [ probability P ] [ ecn ] [ harddrop ] DESCRIERE Stochastic Fairness Queueing este o disciplina de coada fara clase disponibila pentru controlul traficului cu comanda tc(8) . SFQ nu modeleaza traficul, ci doar programeaza transmiterea pachetelor, pe baza ,,fluxurilor". Scopul este de a asigura echitatea, astfel incat fiecare flux sa poata trimite date pe rand, impiedicand astfel ca un singur flux sa acopere restul. Acest lucru poate avea, de fapt, un anumit efect in atenuarea unei tentative de refuz al serviciului. SFQ economisete resurse i, prin urmare, livreaza intotdeauna un pachet daca are unul disponibil. ALGORITM La introducerea in coada, fiecare pachet este atribuit unui hash bucket, pe baza valorii hash a pachetului. Aceasta valoare hash este obinuta fie dintr-un clasificator de flux extern (utilizai tc filter pentru a le stabili) fie dintr-un clasificator intern implicit, daca nu a fost configurat niciun clasificator extern. Cand se utilizeaza clasificatorul intern, sfq utilizeaza (i) Adresa sursa (ii) Adresa de destinaie (iii) Portul sursa i portul destinaie Daca acestea sunt disponibile. SFQ recunoate ipv4 i ipv6, precum i UDP, TCP i ESP. Pachetele cu alte protocoale sunt criptate (hashed) pe baza reprezentarii pe 32 de bii a destinaiei i sursei lor. Un flux corespunde in mare parte unei conexiuni TCP/IP. Fiecare dintre aceste galei (buckets) ar trebui sa reprezinte un flux unic. Deoarece mai multe fluxuri pot fi rezumate (hashed) in aceeai galeata, algoritmul intern de rezumare (hashing) sfqs poate fi perturbat la intervale configurabile, astfel incat inechitatea sa dureze doar pentru o perioada scurta de timp. Perturbarea poate provoca insa o reordonare neintenionata a pachetelor. Dupa linux-3.3, nu mai exista problema reordonarii pachetelor, dar sunt posibile pierderi de pachete daca rehashing-ul atinge o limita (numarul de fluxuri sau pachete per flux). La eliminarea din coada, fiecare hashbucket (galeata-rezumat) cu date este interogata in mod circular. Inainte de linux-3.3, lungimea maxima a SFQ in timpul compilarii era de 128 de pachete, care puteau fi distribuite in cel mult 128 de galei din cele 1024 disponibile. In cazul depairii capacitaii, se efectua eliminarea cozii ,,tail-drop" din galeata cea mai plina, meninandu-se astfel echitatea. Dupa linux-3.3, lungimea maxima a SFQ este de 65535 pachete, iar limita divizorului este de 65536. In cazul depairii capacitaii, se efectueaza tail-drop pe cea mai plina galeata, cu excepia cazului in care s-a solicitat eliminarea inceputului ,,headdrop". PARAMETRI divisor Poate fi utilizat pentru a stabili o dimensiune diferita a tabelei hash, disponibila incepand cu nucleul 2.6.39. Divizorul specificat trebuie sa fie o putere a lui doi i nu poate fi mai mare de 65536. Valoarea implicita: 1024. limit Limita superioara a SFQ. Poate fi utilizata pentru a reduce lungimea implicita de 127 de pachete. Dupa linux-3.3, poate fi marita. depth Limita de pachete pe flux (dupa linux-3.3). Valoarea implicita este 127 i poate fi redusa. perturb Intervalul in secunde pentru perturbarea algoritmului cozii. Valoarea implicita este 0, ceea ce inseamna ca nu are loc nicio perturbare. Nu stabilii o valoare prea mica, deoarece fiecare perturbare poate provoca reordonarea sau pierderea unor pachete. Valoarea recomandata este 60. Aceasta valoare nu are niciun efect atunci cand se utilizeaza clasificarea fluxului extern. Este mai bine sa cretei valoarea divizorului pentru a reduce riscul coliziunilor hash. quantum Numarul de octei pe care un flux il poate scoate din coada in timpul unei runde a procesului circular ,,round robin". Valoarea implicita este MTU-ul interfeei, care este i valoarea recomandata i valoarea minima. flows Dupa linux-3.3, este posibil sa se modifice limita implicita a fluxurilor. Valoarea implicita este 127. headdrop Comportamentul implicit al SFQ este de a efectua ,,tail-drop" al pachetelor dintr-un flux. Putei solicita in schimb un ,,headdrop", deoarece se tie ca acesta ofera un raspuns mai bun pentru fluxurile TCP. redflowlimit Configureaza modulul RED opional in partea superioara a fiecarui flux SFQ. Principiul detectarii timpurii aleatorii (Random Early Detection) consta in marcarea sau eliminarea pachetelor intr-un mod probabilistic. (consultai <> pentru detalii despre RED) redflowlimit configureaza limita maxima pentru dimensiunea reala (nu medie) a cozii pe flux SFQ in octei. min Dimensiunea medie a cozii la care marcarea devine posibila. Valoarea implicita este max /3 max La aceasta dimensiune medie a cozii, probabilitatea de marcare este maxima. Valoarea implicita este redflowlimit /4. probability Probabilitatea maxima pentru marcare, specificata ca numar in virgula mobila intre 0,0 i 1,0. Valoarea implicita este 0,02. avpkt Specificata in octei. Utilizata impreuna cu burst pentru a determina constanta de timp pentru calcularea dimensiunii medii a cozii. Valoarea implicita este 1000. burst Utilizata pentru a determina cat de repede este influenata dimensiunea medie a cozii de dimensiunea reala a cozii. Valoarea implicita este: (2 * min + max) / (3 * avpkt) ecn RED poate fie ,,marca", fie ,,renuna/elimina". Notificarea explicita de congestie permite RED sa notifice gazdele la distana ca rata lor depaete laimea de banda disponibila. Gazdele care nu sunt compatibile cu ECN pot fi notificate numai prin renunarea la un pachet. Daca acest parametru este specificat, pachetele care indica faptul ca gazdele lor respecta ECN vor fi doar marcate i nu renunate, cu excepia cazului in care dimensiunea cozii atinge adancimea depth de pachete. harddrop Daca dimensiunea medie a cozii de flux este mai mare de max octei, acest parametru foreaza o renunare in loc de marcarea ecn. EXEMPLU I UTILIZARE Pentru a ataa la dispozitivul ppp0: # tc qdisc add dev ppp0 root sfq Va rugam sa reinei ca SFQ, la fel ca toate qdisc-urile care nu modeleaza (conserva munca), este util numai daca deine coada. Acesta este cazul cand viteza legaturii este egala cu laimea de banda disponibila efectiv. Acest lucru este valabil pentru modemurile telefonice obinuite, conexiunile ISDN i legaturile ethernet directe necomutate. De cele mai multe ori, modemurile prin cablu i dispozitivele DSL nu se incadreaza in aceasta categorie. Acelai lucru este valabil i atunci cand sunt conectate la un comutator i incearca sa trimita date catre un segment congestionat, conectat i el la comutator. In acest caz, coada efectiva nu se afla in Linux i, prin urmare, nu este disponibila pentru planificare. Incorporai SFQ intr-un qdisc cu clase pentru a va asigura ca deine coada. Este posibil sa se utilizeze clasificatori externi cu sfq, de exemplu pentru filtrul hash de trafic (flux) bazat numai pe adresele IP sursa/destinaie: # tc filter add ... flow hash keys src,dst perturb 30 divisor 1024 Reinei ca divizorul dat trebuie sa corespunda celui utilizat de sfq. Daca ai modificat valoarea implicita sfq de 1024, utilizai aceeai valoare i pentru filtrul hash de flux. Exemplu de sfq cu modul RED opional: # 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. CONSULTAI I tc(8), tc-red(8) AUTORI Alexey N. Kuznetsov, , Eric Dumazet . Aceasta pagina de manual este intreinuta de bert hubert TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . iproute2 24 ianuarie 2012 TC(8)