CZ 
13.09.2024 Lubor VÍTEJTE V MÉM SVĚTĚ

Cisco QoS 4 - garance rychlosti - řazení do front - Queuing

| Petr Bouška - Samuraj |
V této časti se budeme věnovat oblasti správy zahlcení - Congestion Management. K tomu se využívají různé fronty (queues). V praxi jde o to, že můžeme vymezit určité pásmo pro nějako komunikaci, tedy garantovat šířku pásma. A případně ještě zajistit expresní odbavení (tedy nízkou latenci) - prioritizovat provoz. V druhé části se pouze lehce zmíním o podobné oblasti, zabránění zahlcení - Congestion Avoidance, které se řeší inteligentním zahazováním.
zobrazeno: 25 597x | Komentáře [0]

Congestion Management - Queuing

Fronta (queue) je vlastně paměť, která se využije ve chvíli, kdy je rychlost příchozích paketů větší, než rychlost odchozí. Tehdy se pakety ukládají do fronty, a podle algoritmu fronty se odebírají a odesílají. Pokud by fronta neexistovala, tak by se pakety rovnou zahazovaly. Pokud je příchozí rychlost menší, tak se fronta nepoužije.

Pozn.: Softwarové interfacy (jako subinterface nebo tunel) nemají fronty.

Na Cisco zařízeních se dá použít celá řada mechanismů front, záleží na zařízení a IOSu. Některé hlavní mechanismy jsou:

  • First In First Out - FIFO - default pro linky nad 2Mbps, pakety odcházejí v pořadí, v jakém přišli
  • Weighted Fair Queuing - WFQ - default pro linky pod 2Mbps, rozdělování pásma podle váhy
  • Class Based Weighted Fair Queuing - CBWFQ - pomocí tříd
  • Low Latency Queuing - LLQ - vytváří prioritní fronty spolu s CBWFQ
  • IP RTP Prioritization - přidává možnost low-latency queuing do WFQ a CBWFQ, vhodné pro VoIP, přidává speciální frontu, která je upřednostněna, provoz se definuje pomocí rozsahu UDP portů

Pozn.: Implementace front se liší podle HW zařízení, hlavní rozdíl je mezi menšími routery a mezi switchi a velkými routery, které používají speciální hardware.

Každý interface má hardwarovou frontu, která je typu FIFO. Před HW frontou se nachází softwarové fronty, na které můžeme aplikovat libovolný z podporovaných typů front. Router se snaží minimalizovat velikost HW fronty, aby se minimalizovala FIFO část modelu řazení do front. Pokud je SW fronta prázdná a v HW je ještě místo, tak se SW fronta obchází a paket se do ní vůbec nedostane (to může být častý případ v LAN). Velikost HW fronty je možno změnit pro interface příkazem tx-ring-limit, ale nedoporučuje se to.

Schéma front na interfacu

First In First Out - FIFO

  • používá pouze jednu frontu (jednu třídu provozu)
  • před frontou je Tail Drop - pokud je fronta plná, tak se paket zahodí
  • je to default mechanismu pro linky nad 2Mbps
  • podporovaný všude a jednoduchý
  • není efektivní (způsobuje zahlcení, kdy agresivní toky zaberou celou linku, a jitter)

Pokud chceme zapnout na pomalejším interfacu (sériové lince), kde je defaultně WFQ, tak to provedeme tak, že vypneme WFQ

ROUTER(config-if)#no fair-queue 

Informace o zvolené frontě jsou vidět v detailu interfacu:

SWITCH#show interface g1/0/2
GigabitEthernet1/0/2 is up, line protocol is up (connected)
...
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
...

Weighted Fair Queuing - WFQ

  • fair queuing - měl by spravedlivě rozdělovat pásmo mezi datové toky
  • provoz je rozdělen do toků (daných adresami, protokolem.), každý tok má svoji frontu
  • weight - přidává nastavení váhy, podle které některý tok získá větší pásmo
  • rozdělování do front se provádí pomocí hashe, který se počítá z TCP a IP hlavičky - hash je index fronty, do které se zařadí
  • existuje pevný počet front, který musí být větší než očekávaný počet různých toků
  • jednoduše se konfiguruje a funguje automaticky
  • neumožňuje garantovat pásmo
  • defaultní mechanismus pro pomalé linky (do 2Mbps) nebo pokud se na interface aplikuje service-policy, která využívá fronty

Pro zahazování paketů se používá Modified Tail Drop, který pracuje buď jako early dropping  - zahazuje dříve než je plný (podle nastavení) nebo aggressive droping - až při dosažení maxima. Agresivnější (objemné) toky jsou vždy zahazovány nejvíce. Pokud se má něco zahodit, tak se zahodí poslední paket z nejdelší fronty, čili to nemusí být ten paket, který přišel poslední. Délka fronty se hodnotí podle finish time (čas, kdy by paket celý odešel, takže záleží na velikosti paketů a ne na počtu).

ROUTER(config-if)#fair-queue // zapne WFQ, mohou následovat parametry 
ROUTER#show queueing fair    // zobrazí stav WFQ konfigurace
ROUTER#show queue f0/2       // informace o frontě pro interface

Class Based Weighted Fair Queuing - CBWFQ

  • umožňuje garantovat šířku pásma jednotlivým třídám
  • pro každou třídu se používá samostatná fronta, maximum je 64 tříd a jedna default (kam padá vše ostatní, používá FIFO)
  • můžeme nastavovat bandwith, procenta bandwith nebo procenta dostupné bandwith
  • funguje to tak, že definujeme třídu a jí nastavíme garantované pásmo, které třída získá při zahlcení, dále můžeme ještě nastavit velikost fronty
  • při zaplnění fronty se použije Tail Drop, nebo můžeme nakonfigurovat WRED
  • z nastaveného pásma se určuje váha pro danou třídu
  • standardně musí na interfacu zůstat 25% pásma volného (můžeme definovat max. 75%), ale lze změnit konfiguračně

Pozn.: Můžeme upravit vlastnosti i pro class-default, například nastavit fair-queue místo FIFO.

ROUTER(config-pmap-c)#bandwidth 1024        // fixní vymezení pásma v kbps
ROUTER(config-pmap-c)#bandwidth percent 50  // procentuální
ROUTER(config-pmap-c)#bandwidth remaining percent 20 // procenta z dostupného pásma
ROUTER(config-pmap-c)#queue-limit 20        // velikost fronty, počet paketů
ROUTER(config-if)#max-reserved-bandwidth 80 // změníme defaulních 75% 
ROUTER#show policy-map interface f0/1       // informace o aplikované policy-map obsahuje I info o frontách
ROUTER#show queueing interface f0/1         // zobrazí aktuální mechanismus na interfacu

Low Latency Queuing - LLQ

  • nejpoužívanější
  • vytváří se vysoce prioritní fronty, které mají garantovánu šířku pásma a nízkou latenci, zároveň jsou policovány, aby nepřekročily zadanou šířku pásma (aby nezabrali celé pásmo), ale pouze v případě zahlcení (zaplnění pásma), jinak může provoz překročit danou hodnotu
  • LLQ přidává striktně prioritní frontu do CBWFQ, která redukuje jitter u přenosu hlasu
  • umožňuje vytvoření jedné prioritní fronty uvnitř CBWFQ na úrovni třídy
  • u třídy, která používá LLQ, nemůžeme využít WRED ani definovat velikost fronty
ROUTER(config-pmap-c)#priority 1024       // garantuje a omezuje přesně dané pásmo v kbps, zajistí expedited forwarding
ROUTER(config-pmap-c)#priority percent 25 // obdoba, ale v procentech

Congestion Avoidance

V předchozí části jsme řešili správu zahlcení tak, aby některý provoz nezískal celé pásmo, zatímco jiný by byl stále zahazovaný. Pomohly nám k tomu fronty, z kterých se určitým algoritmem vybíral provoz. V této části se budeme snažit předejít zahlcení a to pomocí předčasného chytrého zahazování.

Standardně se využívá mechanismus Tail Drop. Ten se chová ke každému provozu stejně, když se fronta zaplní, tak se pakety zahazují, dokud zahlcení nepomine. Zahazování paketů způsobuje další problémy, jako snižování rychlosti na TCP, znovu vysílání, synchronizace kvůli TCP Windows, apod. Pokud použijeme dlouhé fronty, tak narůstá zpoždění (delay), různě velké fronty způsobují jitter, agresivní toky zaberou větší část fronty, takže ty ostatní jsou více zahozeny. Někde se používá vylepšená metoda Weighted Taild Drop - WTD. Zde se určitý provoz (podle váhy) začáíná zahazovat dříve než jiný.

Proto se používají lepší metody. Nejrozšířenější jsou variace algoritmu Random Early Detection (RED). Inteligentním zahazováním paketů, dříve než se zaplní fronta, můžeme zpomalovat TCP session (z principu TCP - reaguje na zahozené pakety zpomalením).

Chování provozu při zahlcení je takové, že dochází ke globálně synchronizovaným vlnám zahlcení, následovaným nevyužitím celého pásma. Je to proto, že při zahlcení se začne zahazovat veškerý provoz, všechna TCP spojení tedy zpomalí, a proto v součtu zůstane volné pásmo a rychlost začne opět narůstat. A tak se vše opakuje.

Některé varianty RED jsou:

  • Random Early Detection - RED - náhodně zahazuje pakety než se naplní fronta, průměrná délka fronty je nízká (jsou zpomaleny vlastní datové toky, zmenší se TCP window), pracuje ve třech módech, nejprve nezahazuje, když roste fronta, tak náhodně zahazuje, na konci je tail drop
  • Weighted Random Early Detection - WRED - podle váhy jsou různé profily kdy a jak zahazuje, takže důležitější toky zahazuje méně, má defaultní profily pro IP Precedence a DSCP, ale můžeme měnit, konfiguruje se na interfacu pomocí random-detect
  • Class Based Weighted Random Early Detection - CBWRED - rozšíření pro třídy, konfiguruje se na policy-map
ROUTER(config-pmap-c)#random-detect              // použije IP Precedence default profil
ROUTER(config-pmap-c)#random-detect dscp-based   // použije DSCP default profil
ROUTER(config-pmap-c)#random-detect dscp 3 20 40 // změní DSCP profil, hodnoty jsou DSCP, min-práh, max-práh 

Související články:

Cisco IOS

Velký seriál o operačním systému aktivních prvků firmy Cisco. Obsahuje jedny z nejčtenějších článků na tomto webu. Články popisují konfiguraci switchů a routerů, primárně s Cisco IOS. Věci ohledně portů, VLAN, STP, ACL, QoS, apod.

QoS - Quality of Service

Tato série článků se věnuje obsáhlé problematice zajištění kvality při přenosu dat, tedy Quality of Service. Vše je řešeno s přihlédnutí k aktuálním trendům používaným na Cisco aktivních prvcích, spolu s příklady konfigurace.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

Zatím zde nejsou žádné komentáře.

Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách