[ Pobierz całość w formacie PDF ]
.Zamieniliśmy je na SFQ, więc każdy przepływ danych jest traktowanyrówno.# tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip \sport 80 0xffff flowid 1:3# tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip \sport 25 0xffff flowid 1:4Powyższe komendy, dołączone bezpośrednio do korzenia rozsyłają ruch do odpowiednich kolejek.Zauważ, że użyliśmy komendy tc class add by STWORZY klasy w obrębie qdisc, ale by dodać je użyliśmykomendy tc qdisc add.Możesz zastanawiać się co dzieje się z ruchem, który nie podlega klasyfikacji przez żadną z dwóch reguł.W tymwypadku, data będą przetwarzane w obrębie klasy 1:0 i w związku z tym nie będą podlegać ograniczeniom.Jeśli ruch smtp i WWW spróbują przekroczyć ustalony limit 6mbit/s, przepustowość zostanie podzielona zgodnie zwagą, to jest 5/8 dla serwera WWW i 3/8 dla serwera poczty.Przy okazji można powiedzieć, że przy tych ustawieniach, serwer WWW zawsze otrzyma przynajmniej 5/8 *6mbit = 3.75mbit'a.Inne parametry: split & defmapTak jak powiedziano wcześniej, kolejka z dyscypliną potrzebuje wywoływać filtry by określić do której klasyzostanie skolejkowany pakiet.Poza wywołaniem filtra, CBQ oferuje inne opcje - defmap i split.Jest to trochę trudne do zrozumienia, ale niekonieczne.Ale ponieważ jest to jedyne miejsce, w którym w ogóle wyjaśnia się takie terminy, postaram się zrobić cow mojej mocy.Ponieważ zwykle będziesz filtrował tylko na podstawie pola ToS, dostępna jest specjalna składnia.Kiedy CBQpotrzebuje określić gdzie skolejkować pakiet, sprawdza czy ten węzeł to węzeł rozdzielczy (ang.split node).Jeślitak, jedna z pod-kolejek określiła, że chciałaby otrzymywać wszystkie pakiety z określonym, skonfigurowanympriorytetem - który może pochodzić z pola ToS, lub opcji gniazd ustawionych przez aplikację.Bity priorytetów pakietów są poddawane logicznej operacji OR z polem defmap by sprawdzić czy istnieje pasującyodpowiednik.Innymi słowy, jest to krótszy sposób na stworzenie bardzo szybkiego filtru, który pasuje tylko dookreślonych priorytetów.Mapa defmap równa 0xFF (heksdecymalnie) będzie pasowała do wszystkiego, a 0 doniczego.Przykładowa konfiguracja, by rozjaśnić to tłumaczenie:# tc qdisc add dev eth1 root handle 1: cbq bandwidth 10Mbit allot 1514 \cell 8 avpkt 1000 mpu 64# tc class add dev eth1 parent 1:0 classid 1:1 cbq bandwidth 10Mbit \rate 10Mbit allot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 \avpkt 1000Standardowa preambuła CBQ.Nigdy nie przywyknę do ilości numerków, które należy podać.defmap odwołuje się do bitów TC_PRIO, które zdefiniowane są jak następuje:TC_PRIO.Numer Odpowiada w ToS-------------------------------------------------BESTEFFORT 0 Maksymalna niezawodnośćFILLER 1 Minimalny kosztBULK 2 Maksymalna przepustowość (0x8)INTERACTIVE_BULK 4INTERACTIVE 6 Minimalna zwłoka (0x10)CONTROL 7Numer TC_PRIO odpowiada bitom, liczonym od prawej.Zajrzyj do sekcji opisującej pfifo_fast po więcejszczegółów jak bity ToS konwertowane są na priorytety.A teraz klasy interaktywna i dla reszty ruchu:# tc class add dev eth1 parent 1:1 classid 1:2 cbq bandwidth 10Mbit \rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 \avpkt 1000 split 1:0 defmap c0# tc class add dev eth1 parent 1:1 classid 1:3 cbq bandwidth 10Mbit \rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 \avpkt 1000 split 1:0 defmap 3f`Kolejką rozdzielającą' jest 1:0 i w niej dokonywany jest wybór.c0 to binarnie 11000000, 3F to 00111111, więcobie łącznie będą obejmować cały ruch.Pierwsza klasa pasuje jeśli ustawione są bity 6 i 7 odpowiadając tym samymruchowi `interaktywnemu' i `kontrolnemu'.Druga klasa odpowiada reszcie.Węzeł 1:0 ma teraz tabelę taką jak ta:priorytet wyślij do0 1:31 1:32 1:33 1:34 1:35 1:36 1:27 1:2Co więcej, możesz również wydać polecenie `zmiany maski', które określa dokładnie które priorytety chciałbyśzmienić.Potrzebujesz tego tylko gdy używasz `tc class change'
[ Pobierz całość w formacie PDF ]