Moduł sch_ep
rozszerza możliwości jądra systemu Linux o kolejny
algorytm obsługi kolejki: ep
(od ang. External
Priority). Sam nie zajmuje się przechowywaniem pakietów, potrafi
natomiast przygotowywać pakiety do obsługi przez istniejące algorytmy.
Jego sposób działania przedstawia diagram 3.4.
Każdy pakiet, jaki system próbuje wstawić do kolejki (poprzez funkcję
enqueue
), przekazywany jest - po zmianie (w sposób
zdefiniowany w trakcie konfiguracji algorytmu) jednego z wymienionych
pól - do klasy wewnętrznej obsługiwanej przez dowolny inny
algorytm. Kiedy system zgłasza żądanie wyboru pakietu do wysłania
(dequeue
), wykonawca przekazuje to żądanie do klasy wewnętrznej
i dopisuje wynik do bazy danych o zrealizowanym ruchu.
Siłą tak napisanego wykonawcy jest jego ogólność: podczas tworzenia
algorytmu administrator wskazuje, które pola pakietu czy struktury
sk_buff
wykonawca powinien zmieniać i podaje dla każdego z nich
zbiór wartości odpowiadających wyznaczanym przez decydenta
priorytetom. Za samo szeregowanie pakietów na podstawie tych wartości
odpowiedzialny jest już algorytm klasy wewnętrznej.
Przykład zastosowania
Niech decydent wyznacza dla każdego adresu IP jeden z 8 priorytetów (od 0 do
7), na podstawie których należy podzielić ruch na trzy pasma w sposób
analogiczny do przykładu z rozdziału 3.3.2. Jednym ze
sposobów realizacji tego zadania jest
przypisanie kolejce wewnętrznej algorytmu prio
z filtrem tcindex
,
wybierającym jedną z trzech klas na podstawie wartości
pola sk_buff->tc_index
i uruchomienie wykonawcy w trybie zmiany
pola tc_index
pakietu.
Pierwsze polecenie wybiera wykonawcę (algorytm ep
) do obsługi
całego ruchu wychodzącego poprzez interfejs eth0. Opcja
tc_valuemap
pozwala na podanie ciągu wartości pola tc_index
odpowiadających możliwym wartościom priorytetów (dokładniejszy opis
składni tego polecenia znajduje się w punkcie 3.3.5).
Pozostałe polecenia tworzą wewnątrz wykonawcy strukturę przedstawioną na rysunku 3.5.
Tak skonfigurowany filtr tcindex wybiera dla każdego pakietu jedną z
klas 10:0, 20:0 i 30:0 na podstawie wartości jego pola
tc_index
, które z kolei jest ustawiane przez sch_ep
zgodnie z tabelą 3.1.
|
Algorytm prio
działa zgodnie z opisem w punkcie 2.2.1
- podczas wyboru pakietu do wysłania pierwszeństwo zawsze będą miały
te z priorytetami 5, 6 i 7, a jeśli takich nie będzie, to 3 i 4.
Symulacja
Sposób działania modułu sch_ep
najwyraźniej widać podczas
symulacji z wykorzystaniem programu tcsim
wchodzącego w skład pakietu tcng. Przeprowadza on bardzo dokładną
emulację zachowania sieciowej części systemu Linux, ale nie udostępnia
systemu plików procfs
, więc zamiast (opisanego w rozdziale
3.3.4) modułu tl_db
wykorzystano obliczanie
priorytetu na podstawie ostatniego bajtu adresu IP
(wykonując modulo
).
Zmiany wymagał też plik konfiguracyjny:
Oprócz definicji opisanej hierarchii klas plik ten zawiera też polecenia wysłania 7 pakietów, po jednym z adresów odpowiadających różnym priorytetom (od 1 do 7).
Wynikiem działania symulatora dla podanego pliku
konfiguracyjnego jest plik, którego istotne fragmenty (ograniczone do
szczegółowych informacji o operacjach enqueue
oraz ogólnych o
dequeue
) zawiera ramka:
Pierwsza kolumna to litera oznaczająca typ operacji: ,,E'', ,,e'' (od Enqueue) lub ,,D'' (Dequeue).
Wiersze od 1 do 4 opisują proces dodania (enqueue) pierwszego pakietu (z adresu 10.9.201.1); z wiersza 2 wynika, że pakiet ten trafił to klasy 30:0. Kolejne czwórki linii (6-9, 10-13, 14-17, 18-21, 22-25 i 26-29) świadczą o tym, że pakiety zostają skierowane do klas zgodnie z tabelką 3.2.
|