Kto pierwszy, kto ostatni…? – Kolejki w sieci SDN

23 Czerwca 2023

W artykule Jakość to będzie… – policing w sieci SDN została podjęta tematyka zapewnienia szeroko rozumianej jakości transmisji danych w sieciach SDN. Omówiłem w nim traffic policing, czyli przycinanie ruchu do wartości określonych przez użytkownika. Niniejszy artykuł jest kontynuacją wspomnianego tekstu i ma na celu zaznajomienie czytelnika z innym sposobem zapewnienia QoS, poprzez tzw. traffic shaping.

Idea kolejkowania ruchu

Traffic shaping to inaczej kształtowanie ruchu. Charakteryzuje się wykorzystaniem mechanizmów QoS do przesłania określonej porcji danych w możliwie efektywny sposób, tj. bez znaczących strat pakietów. Innymi słowy, ruch zamiast być przycinany do określonego poziomu, może zostać wstrzymany przez urządzenie sieciowe, a przez to jego charakterystyka może ulec wygładzeniu (patrzy: rysunek 1.).

Shaping | EXATEL
Rysunek 1. Wynik kształtowania ruchu mechanizmami policingu i shapingu | źródło: cisco.com

 

Gdy natężenie ruchu w sieci nie przekracza zadeklarowanych wartości, jest on bez przeszkód transmitowany przez sieć. Gdy zbliża się do limitów zostaje przytrzymany. Swoiste przytrzymanie ruchu sieciowego nazywamy buforowaniem. Buforowanie polega na zapisaniu pakietów w dedykowanym miejscu w pamięci urządzenia. Użytkownik może zadeklarować wielkość takiego bufora. Jeśli bufor zostanie przepełniony, kolejne pakiety są odrzucane (patrz rysunek 2.).

Kolejkowanie - buforowanie nadmiarowych pakietów

Rysunek 2. Kolejkowanie - buforowanie nadmiarowych pakietów

Buforowanie ma również swoje zastosowanie w codziennym odtwarzaniu filmów na internetowych platformach video takich jak YouTube. Do prawidłowego odtworzenia filmu potrzeba określonej porcji danych z sieci. Jeśli dane dotrą do odbiorcy, film jest odtwarzany. Jeśli nie, dane są zbierane w buforze by następnie przekazać widzowi pełną klatkę, a w konsekwencji ruchomy obraz. W tym przypadku buforowanie służy do gromadzenia danych. W sieciach ma na celu przytrzymanie nadmiarowego ruchu, co nazywamy kolejkowaniem.

 

Kolejkowanie w sieciach

Najprostsze kolejkowanie w sieciach mogłoby składać się z jednego bufora. W istocie pojedyncza kolejka o zadanych parametrach pozwala utrzymać ruch na określonym poziomie np. 100 Mb/s. Jednakże, prawdziwa wartość mechanizmu kolejkowania pakietów ujawnia się przy tzw. schedulingu, czyli szeregowaniu pakietów z użyciem wielu kolejek.

W sieci możemy wyróżnić różne typy ruchu i związane z nim zapotrzebowania. Mogą to być strumienie audio/video do rozmów real-time, mogą to być zwykłe dane, które muszą zostać przesłane end-to-end. Ruch typu real-time musi zostać obsłużony w możliwie najszybszym czasie, bez opóźnień i wahań czasu dotarcia kolejnych pakietów. Z kolei jedynym wymaganiem na transmisję danych jest pewność dotarcia do odbiorcy. Widać zatem, że oba typy ruchu mają różne priorytety. Jeśli dwa takie strumienie spotkają się w sieci, warto je rozróżnić, oznaczyć i przyporządkować do odpowiedniej kolejki, gdzie kolejka dla ruchu real-time powinna mieć wyższy priorytet niż kolejka dla zwykłych danych. Na koniec określony mechanizm urządzenia powinien dokonać wyboru czy przekazać na wyjście urządzenia sieciowego pakiet z kolejki z wyższym priorytetem czy z niższym, a jeśli z wyższym, to na ile pakietów kolejki wyższej powinien zostać pobrany pakiet z kolejki niższej. Za to odpowiada właśnie scheduler, czyli algorytm szeregujący pakiety z poszczególnych kolejek. Jednym z popularniejszych algorytmów tego typu jest WFQ (z ang. Weighted Fair Queueing).

Kształtowanie ruchu (traffic shapingu) jest zatem dość złożonym procesem, w którym można wyróżnić następujące fazy (patrz rysunek 3.):

  • klasyfikację – rozróżnienie ruchu na podstawie określonych pól w pakietach np. MPLS_TC lub VLAN_PCP pakietów przychodzących do switch-a. Są to 3 bitowe pola składowe nagłówków MPLS/VLAN, dzięki którym można wyróżnić do 8 klas ruchu.
  • kolejkowanie – zaklasyfikowane pakiety zostają przyporządkowane do kolejek na switch-u przeznaczonych dla różnych typów ruchu bądź o różnym priorytecie.
  • szeregowania – algorytm szereguje pakiety i decyduje, który pakiet z której kolejki pobrać i przekazać na bufor wyjściowy.

 

Proces traffic shapingu
Rysunek 3. Proces traffic shapingu

Realizacja kolejkowania w sieci SDN

By ruch sieciowy mógł zostać poddany procesowi traffic shapingu, należy skonfigurować urządzenia sieciowe. Zaletą sieci SDN jest automatyzacja tego procesu. Kontroler sieci SDN jako centralna jednostka przetrzymuje informacje o całej topologii sieci. Dzięki temu jest w stanie wyróżnić porty końcowe sieci operatora (patrz rysunek 4.) tzw. porty klienckie UNI (z ang. User Network Interface), jak również porty między kolejnymi urządzeniami wewnątrz sieci operatora I-NNI (z ang. Internal Network-to-Network Interface). Co więcej, kontroler ma możliwość równoczesnej konfiguracji wszystkich urządzeń sieciowych, które widzi w sieci. Dokonuje wyboru portów do konfiguracji spośród danych urządzeń i podejmuje na nich działanie.

W przypadku traffic shapingu konieczne jest wskazanie portów INNI, instalacja na nich klasyfikatorów, kolejek oraz aktywacja stosownego algorytmu szeregowania pakietów.

W przypadku sieci SDN opartej na protokole OpenFlow i przy wykorzystaniu urządzeń sieciowych Open vSwitch proces ten można zrealizować w następujących etapach:

  • konfiguracja kolejek na switchu
  • konfiguracja przepływów przez dany switch.
Sieć operatorska | EXATEL

Rysunek 4. Przykładowa sieć z oznaczeniem typów portów: UNI i INNI

Instalacja kolejek

W celu instalacji kolejek na porcie switch-a należy utworzyć kolejkę, dodać ją do profilu QoS, zaś profil powiązać ze stosownym portem INNI.

W poniższym przykładzie zostały utworzone dwie kolejki ograniczające ruch do 10Mb/s i 50Mb/s, po czym powiązano je z portem TE1 switch-a (port INNI mający link do kolejnego switcha)

# ovs-vsctl create queue other-config:max-rate=10000000
c80b2a19-90e8-4eed-a1d4-5db061a6f864
# ovs-vsctl create queue other-config:max-rate=50000000
94965335-6dd5-4064-91f2-9b5c09f8e7ce
# ovs-vsctl create qos type=linux-htb
d56353d2-8b42-4074-a64f-2aeac0ff776e
# ovs-vsctl set qos d56353d2-8b42-4074-a64f-2aeac0ff776e queues:1=c80b2a19-90e8-4eed-a1d4-5db061a6f864
# ovs-vsctl set qos d56353d2-8b42-4074-a64f-2aeac0ff776e queues:2=94965335-6dd5-4064-91f2-9b5c09f8e7ce
# ovs-vsctl set port TE1 qos=d56353d2-8b42-4074-a64f-2aeac0ff776e

W wyniku konfiguracji został utworzony profil QoS z dwiema kolejkami (id 1 i 2). Do kształtowania ruchu została wykorzystana linux-owa implementacja algorytmu HTB (Hierarchical Token Bucket).

# ovs-vsctl list qos
_uuid               : d56353d2-8b42-4074-a64f-2aeac0ff776e
external_ids        : {}
other_config        : {}
queues            : {1=c80b2a19-90e8-4eed-a1d4-5db061a6f864, 2=94965335-6dd5-4064-91f2-9b5c09f8e7ce}
type                : linux-htb

Instalacja przepływów

Po utworzeniu kolejek należy je skonfigurować do przyjmowania określonych pakietów. W tym celu protokół OpenFlow zdefiniował przepływy, tzw. flow-y, czyli krótkie porcje konfiguracji złożone z pól match i action. Pole match pozwala wykryć i zaklasyfikować pakiety o określonych parametrach, zaś pole action opisuje jakie działanie na pakiecie ma zostać podjęte.

W poniższym przykładzie przyjmijmy, że pakiety wchodzące portem TE2 będą kierowane do kolejki o id 1, zaś pakiety wchodzące portem TE3 zostaną skierowane do kolejki o id 2, a dalej na port wyjściowy TE1.

# ovs-ofctl add-flow ETH1 in_port=2,actions=set_queue:1,output=1
# ovs-ofctl add-flow ETH1 in_port=3,actions=set_queue:2,output=1

W wyniku tych działań do puli flow-ów urządzenia zostaną dodane reguły OpenFlow kształtujące ruch do zadanych przez kolejki poziomów zależnie od portu wejściowego, na którym pojawia się pakiet.

# ovs-ofctl dump-flows ETH1
 cookie=0x0, duration=9.397s, table=0, n_packets=0, n_bytes=0, in_port=TE3 actions=set_queue:2,output:TE1
 cookie=0x0, duration=2.841s, table=0, n_packets=0, n_bytes=0, in_port=TE2 actions=set_queue:1,output:TE1

 

Potencjał QoS w sieci SDN

Powyższe rozważania zamykają tematykę traffic policingu i traffic shapingu pokazując przy tym jak znaczącym i złożonym mechanizmem są techniki zapewnienia jakości w sieci. Mechanizmy QoS pozwalają w elastyczny sposób manipulować ruchem sieciowym oraz różnicować jego poziom i priorytet względem innych źródeł ruchu. W kontekście sieci SDN, QoS zyskuje dodatkową elastyczność względem tradycyjnych rozwiązań. W połączeniu z programowalną warstwą aplikacji umożliwiającą implementację i wdrożenie wielu funkcji sieciowych, możliwe jest zaaplikowanie dodatkowej funkcjonalności biznesowej. Przykładowo, w połączeniu z otwartym API możliwe jest dynamiczne zarządzanie poziomem QoS. Użytkownik końcowy za dodatkową opłatą może sam decydować o szybkości ruchu. Takie podejście do zarządzania usługami i ruchem sieciowym redukuje koszty oraz otwiera nowy model biznesowy, w którym funkcja sieciowa jest bliżej użytkownika niż kiedykolwiek wcześniej.

Opublikowane przez: Jerzy Pielichowski

Inne artykuły_