NAZWA¶
tc - pokaż / manipuluj ustawieniami sterowania przepływem
SKŁADNIA¶
tc qdisc [ add | change | replace | link ] dev DEV
[ parent
qdisc-id
| root ] [ handle qdisc-id ] qdisc [ specyficzne
parametry ]
tc class [ add | change | replace ] dev DEV
parent qdisc-id
[
classid class-id ] qdisc [ specyficzne parametry ]
tc filter [ add | change | replace ] dev DEV
[ parent qdisc-id
| root ] protocol protocol
prio priority filtertype [
specyficzne parametry ]
flowid flow-id
tc [-s | -d ] qdisc show [ dev DEV
]
tc [-s | -d ] class show dev DEV
tc filter show dev DEV
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
Tc używane jest do konfigurowania Sterowania Przepływem w
jądrze Linux. Sterowanie Przepływem składa się z:
- CIĘCIA (SHAPING)
- Gdy ruch jest przycinany to pod kontrolą jest
częstość jego transmisji. Przycinanie może być
czymś więcej niż tylko zmniejszaniem dostępnego pasma
- bywa także używane w celu wygładzenia nagłych
przyrostów ruchu, aby sieć jako całość
działała lepiej. Cięcia pasma następuje zawsze na
wyjściu interfejsu sieciowego.
- SZEREGOWANIA (SCHEDULING)
- Poprzez szeregowanie transmisji pakietów możliwym
staje się zwiększenie interaktywności ruchu, który
tego wymaga, przy jednoczesnym gwarantowaniu pasma dla dużych
transferów. Takie porządkowanie kolejności bywa
również nazywane priorytetyzacją i następuje tylko i
wyłącznie na wyjściu.
- NADZOROWANIA (POLICING)
- Tak jak cięcie pasma dotyczy transmitowania ruchu tak
nadzorowanie i preselekcja odnosi się do ruchu, który
przychodzi. Selekcjonowanie zachodzi na wejściu.
- ODRZUCANIA (DROPPING)
- Ruch o natężeniu przekraczającym ustalone
pasmo może być odrzucany zarówno na wejściu jak i na
wyjściu.
Przetwarzanie ruchu jest kontrolowane przez trzy rodzaje obiektów:
dyscypliny kolejkowania (qdiscs), klasy (classes), oraz filtry (filters).
QDISCS¶
qdisc jest skrótem od 'queueing discipline' (dyscyplina
kolejkowania) i jest pojęciem podstawowym w rozumieniu sterowania
przepływem. Jeśli kiedykolwiek jądro chce wysyłać
pakiet do interfejsu sieciowego to pakiet ten jest
kolejkowany przy
pomocy odpowiedniego obiektu qdisc skonfigurowanego dla tego interfejsu. Zaraz
potem jądro próbuje pobrać możliwie największą
ilość pakietów z obiektu qdisc (z - nazwijmy umownie -
wyjścia z kolejki), aby przekazać je sterownikowi karty sieciowej.
Prostym QDISC jest kolejka 'pfifo', która wcale nie dokonuje przetwarzania
napływająch pakietów i jest tylko czystą kolejką FIFO
(pierwszy na wejściu, pierwszy na wyjściu). Jej jedyne zadanie to
przetrzymywanie pakietów w krótkich chwilach, gdy interfejs sieciowy
nie może ich obsłużyć.
KLASY¶
Niektóre obiekty dyscypliny kolejkowania (qdisc) nie są takie proste
jak opisany powyżej i mogą zawierać w sobie tak zwane klasy.
Klasy te są z kolei swoistymi kontenerami dla innych obiektów qdisc
- ruch może być więc kolejkowany w każdym innym obiekcie
qdisc, który należy do tych zdefiniowanych wewnątrz
klas. Gdy jądro próbuje zdjąć pakiet z takiego
klasyfikującego qdisc to może on pochodzić z
którejkolwiek z należących do qdisc klas. Dla przykładu
qdisc może priorytetyzować pewną część ruchu
poprzez usiłowanie zdjęcia pakietów z jednych ze swych kolejek
wcześniej niż z innych.
QDISC A KLASY¶
Chociaż istnieją obiekty qdisc (dyscypliny kolejkowania), które
mogą w sobie zawierać klasy to nie należy utożsamiać
pojęcia qdisc z pojęciem klasy. Klasa jest swoistym slotem, w
którym można osadzić potomne qdisc. Klasa sama w sobie nie jest
obiektem kolejkującym.
ALGORYTMY KOLEJKOWANIA¶
Niektóre opracowania i tłumaczenia posługują się
terminem Algorytmy Kolejkowania. Algorytm kolejkowania to innymi słowy
logika działania danego typu qdisc, czyli w praktyce użytej kolejki
pakietów. Algorytm kolejkowania może być elementarny lub
złożony. Elementarne (podstawowe) algorytmy kolejkowania obecne
są w kolejkach, które wyspecjalizowane są w sterowaniu
przepływającym przez daną kolejkę ruchem pakietów.
Nie mamy w takich kolejkach do czynienia z niczym ponad stosowanie pewnego
algorytmu do zarządzania przepływnością tego co do kolejki
przychodzi. Algorytmy złożone to jak sugeruje nazwa takie,
które stanowią logikę obiektów qdisc zawierających w
sobie więcej niż jeden obiekt, a dokładnie wiele obiektów
opartych na elementarnych algorytmach. Przykładem implementacji
złożonego algorytmu może być obiekt qdisc zawierający
klasy, a opisany wcześniej.
FILTRY¶
Filtr jest używany przez kolejki klasyfikujące by
określić do jakiej konkretnie kolejki pakiet powinien trafić.
Gdy na wejściu kolejki zawierającej podklasy pojawia się ruch
to ruch ten musi zostać sklasyfikowany. Aby to osiągnąć
możemy zastosować wiele różnych metod. Jedną z tych
metod przydzielania ruchu spełniającego jakieś kryteria do
konkretnych podklas jest właśnie użycie filtrów. Filtry
przydzielamy do obiektów qdisc. Wszystkie podłączone filtry
są uruchamiane (tzn. każdy pakiet podlegający danej dyscyplinie
kolejkowania jest z nimi porównywany), aż do momentu aż
będzie pasował do jakiegoś filtra i powróci z werdyktem.
Jeśli żaden filtr nie "złapał" pakietu to
mogą być brane pod uwagę jeszcze inne kryteria. Zależy to
od typu qdisc.
Jest bardzo istotnym by zauważyć, że filtry są obecne
wewnątrz obiektów qdisc - one bezpośrednio nie
decydują o tym co się stanie.
BEZKLASOWE QDISC¶
Bezklasowe obiekty qdisc (bazujące na elementarnych algorytmach
kolejkowania) są to:
- [p|b]fifo
- Najprostszy możliwy do zastosowania obiekt qdisc,
czyste zachowanie FIFO - pierwszy na wejściu - pierwszy na
wyjściu. Możliwy limit to pakiety lub bajty.
- pfifo_fast
- Standardowy obiekt qdisc jeśli jądro skompilowano
z opcją 'Advanced Router'. Zawiera trójwstęgową
kolejkę, która honoruje flagi Typu Usługi (TOS), tak jak i
priorytet, który może zostać przypisany do pakietu.
- red
- Losowa Wczesna Detekcja (ang. Random Early Detection - w
skr. RED) symuluje fizyczne przeciążenia losowo porzucając
pakiety, gdy natężenie ruchu zbliża się do ustalonego
limitu. Dobrze radzi sobie ze sterowaniem ruchem masowym, czyli
zawierającym duże transfery w dużej ilości.
- sfq
- Stochastyczne Sprawiedliwe Kolejkowanie (ang. Stochastic
Fairness Queueing - w skr. SFQ) tak szereguje kolejkowany ruch, żeby
każda 'sesja' miała taką samą zdolność
transmisji.
- tbf
- Filtr Kubełka Żetonów (ang. The Token Bucket
Filter - w skr. TBF) jest przewidziany do spowalniania ruchu do
precyzyjnie określonej częstości. Świetnie się
skaluje do dużych szerokości pasm.
KONFIGUROWANIE BEZKLASOWYCH QDISC¶
Jeśli nie jest obecny klasyfikujący obiekt qdisc, wtedy bezklasowe
obiekty qdisc mogą zostać skojarzone tylko z interfejsem sieciowym.
Tylko jednen taki bezklasowy qdisc może być przyłączony do
jednego urządzenia sieciowego bezpośrednio. Pełna
składnia:
tc qdisc add dev DEV
root QDISC PARAMETRY-QDISC
By usunąć wprowadź
tc qdisc del dev DEV
root
Obiekt qdisc typu
pfifo_fast jest ustawiany automatycznie jako
domyślny qdisc dla każdego interfejsu sieciowego, jeśli nic
jeszcze nie zostało odpowiednio skonfigurowane.
KLASYFIKUJĄCE QDISC¶
Klasyfikujące obiekty qdisc to:
- CBQ
- Kolejkowanie Bazujące na Klasach (ang. Class Based
Queueing) implementuje bogatą hierarchię klas dla dzielenia
pasma. Zawiera ono elementy przycinające ruch, jak i
możliwości priorytetyzacji. Przycinanie jest przeprowadzane przy
pomocy wyliczania czasu bezczynności łącza. Obliczenia
bazują na średniej wielkości pakietu i szerokości
dostępnego pasma na najniższej warstwie łącza. Ten
ostatni parametr może być trudno definiowalny dla
niektórych typów interfejsów sieciowych.
- HTB
- Hierarchiczny Kubełek Żetonów (ang. The
Hierarchy Token Bucket) implementuje bogatą hierarchię klas,
kładąc szczególny nacisk na zgodność z
istniejącymi praktykami. Udogodnienia HTB gwarantują pasmo dla
klas i jednocześnie pozwalają specyfikować wysokie limity
dzielenia między klasami. HTB zawiera elementy przycinania pasma
bazujące na TBF i może priorytetyzować podczepione
klasy.
- PRIO
- Obiekty qdisc typu PRIO są nieprzycinającymi
kontenerami dla konfigurowalnej liczby podklas, których kolejki
są opróżniane w kolejności. Pozwala to prostym
sposobem włączyć priorytetyzację ruchu, gdzie klasy o
niższym priorytecie mogą tylko wysyłać, jeśli
klasy o priorytecie wyższym nie mają już pakietów do
wysłania. By ułatwić konfigurację, domyślnym
kryterium są bity Typu Usługi (TOS) z pakietów.
SPOSÓB DZIAŁANIA¶
Klasy tworzą drzewo, gdzie każda klasa ma jednego rodzica. Klasa
może mieć wiele potomków. Niektóre obiekty qdisc
pozwalają na dodawanie podklas w trakcie działania (CBQ, HTB),
podczas gdy inne (PRIO) są tworzone ze statyczną liczbą
potomków.
Obiekty qdisc pozwalające na dynamiczne dodawanie podklas mogą
mieć ich zero lub więcej. Do tych podklas kierowany będzie
potem ruch.
Ponadto, każda klasa zawiera tak zwaną
kartę qdisc
która domyślnie zachowuje się jak
pfifo a każdy
dodawany do klasy obiekt qdisc aplikowany jest przed kartą. Qdisc
może znów zawierać klasy, lecz każda klasa może
mieć tylko jedną taką kartę. Pod pojęciem karty
rozumiemy tu domyślnie aktywowany sposób kolejkowania, który
jest potem zastępowany przez ten już skonfigurowany.
Gdy pakiet wchodzi do klasyfikującego obiektu qdisc to może być
sklasyfikowany i trafić do jednej z zawartych podklas. Są tu
dostępne trzy kryteria, chociaż nie wszystkie obiekty qdisc
używają wszystkich trzech:
- tc filtry
- Jeśli do klasy przyłączone są filtry tc
to są one rozpatrywane w pierwszej kolejności. Filtr może
być uczulony na dowolne pola nagłówka pakietu, jak i na
znacznik zapory ogniowej (fwmark) dodany przez mechanizmy ipchains lub
iptables działające w jądrze. Zobacz także
tc-filters(8).
- Typ Usługi (TOS)
- Niektóre obiekty qdisc mają wbudowane reguły
do klasyfikowania pakietów bazując na polu TOS.
- skb->priority
- Programy działające w przestrzeni
użytkownika mogą zakodować identyfikator danej klasy,
która powinna być użyta w odniesieniu do wysyłanych
przez program pakietów. Znacznik ten nazywa się
'skb->priority' i można go ustawić przy pomocy opcji
SO_PRIORITY.
Każdy węzeł wewnątrz drzewa może posiadać swoje
własne filtry, lecz filtry wyższego poziomu mogą także
wskazywać bezpośrednio na niższe klasy.
Jeśli klasyfikacja nie powiedzie się to pakiety są kolejkowane do
karty qdisc podłączonej do danej klasy. Przeczytaj jednak
specyficzne podręczniki, aby uzyskać więcej
szczegółów.
NAZEWNICTWO¶
Wszystkie obiekty qdisc, klasy i filtry mają IDentyfikatory, które
mogą być albo wyspecyfikowane jawnie, albo też przydzielone
automatycznie.
IDentyfikatory skłądają się z dwóch numerów:
głównego i dodatkowego. Numery te są oddzielone znakiem
dwukropka. Numer główny specyfikuje obiekt nadrzędny qdisc,
zaś numer dodatkowy obiekt będący potomkiem.
- QDISCS
- Obiekt qdisc, który potencjalnie może
posiadać klasy zajmuje przypisany mu numer główny, zwany
uchwytem (handle), zostawiając przestrzeń nazw numeru
dodatkowego dla swych podklas. Uchwyt jest wyrażany np. jako '10:'.
Jest w zwyczaju dokładne przypisywanie uchwytu do qdisc, który
będzie miał pod sobą potomków.
- KLASY
- Klasy rezydujące pod qdisc dzielą z obiektem
macierzystym numer główny, lecz każda z klas posiada
oddzielny numer dodatkowy nazywany identyfikatorem klasy (classid).
Identyfikator klasy nie ma związku z klasą macierzystą,
tylko i wyłącznie z macierzystym obiektem qdisc. Stosuje
się takie samo nazewnictwo jak przy qdisc.
- FILTRY
- Filtry mają trzyczęściowe IDentyfikatory,
które są potrzebne tylko wówczas, gdy używamy
hierarchii filtrów opartej na tablicy haszującej Więcej o
tym możesz przeczytać w tc-filters(8).
JEDNOSTKI¶
Wszystkie parametry akceptują zapis zmiennoprzecinkowy, z
możliwością zakończenia go jednostką.
Pasma lub częstości mogą zostać podane w:
- kbps
- Kilobajtach na sekundę
- mbps
- Megabajtach na sekundę
- kbit
- Kilobitach na sekundę
- mbit
- Megabitach na sekundę
- bps lub czysta liczba
- Bitach na sekundę.
Ilość danych może być podana w:
- kb or k
- Kilobajtach
- mb or m
- Megabajtach
- mbit
- Megabitach
- kbit
- Kilobitach
- b lub czysta liczba
- Bajtach.
Długości czasu mogą być wyspecyfikowane w:
- s, sec or secs
- całkowitej liczbie sekund
- ms, msec or msecs
- Milisekundach
- us, usec, usecs lub czysta liczba
- Mikrosekundach.
POLECENIA TC¶
Poniższe polecenia są dostępne dla obiektów qdisc, klas i
filtrów:
- add
- Dodaje qdisc, klasę lub filtr do węzła. Dla
wszystkich encji musi być podany rodzic (parent) albo przez
przekazanie jego IDentyfikatora, albo przez dołączenie
bezpośrednio do bazowego urządzenia sieciowego.
Podczas tworzenia qdisc lub filtra możemy nadać nazwę
używając jako parametru uchwytu (handle) Klasy zaś
mogą być nazywane przy użyciu parametru zwanego
identyfikatorem (classid)
- remove
- Obiekt qdisc może być usunięty przez podanie
jego uchwytu, którym może być również 'root'.
Wszystkie podklasy i ich karty qdisc są automatycznie usuwane,
podobnie jak przypisane filtry.
- change
- Niektóre encje mogą zostać zmodyfikowane 'na
miejscu'. Składnia taka jak w przypadku 'add', z tym wyjątkiem,
że nie można zmieniać uchwytu, podobnie zresztą jak
rodzica. Innymi słowy, change nie może
służyć do usuwania węzła.
- replace
- Dokonuje niemal atomowej operacji remove/add na
istniejącym węźle o podanym identyfikatorze. Jeśli
węzeł nie istnieje jeszcze to jest tworzony.
- link
- Dostępne tylko dla qdisc. Dokonuje zastąpienia
(replace) na już istniejącym węźle.
HISTORIA¶
tc zostało napisane przez Alexeja N. Kuznetsova i dodane w
jądrach Linux 2.2.
ZOBACZ TAKŻE¶
tc-cbq(8),
tc-htb(8),
tc-sfq(8),
tc-red(8),
tc-tbf(8),
tc-pfifo(8),
tc-bfifo(8),
tc-pfifo_fast(8),
tc-filters(8)
AUTHOR¶
Stronę podręcznika utrzymuje bert hubert (ahu@ds9a.nl) Niewielkie
rozszerzenia i tłumaczenie na język polski napisał paweł
wilk (siefca@gnu.org)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 8 tc
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.