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/.