MultiLayer Switch QoS - MLS QoS
Na Cisco switchích se pro konfiguraci řady QoS funkcí využívají příkazy mls qos. Zkratka MLS je z označení MultiLayer Switch, což je switch, který mimo klasického switchování na 2. vrstvě OSI, nabízí nějaké další funkce na vyšších vrstvách OSI. Jedna z těchto rozšířených vlastností je podpora DiffServ QoS. Nutno podotknout, že některé z těchto konfiguračních vlastností obsahuje i Catalyst 2960, což je globálně L2 switch (na rozdíl od Catalyst 3750, který je L3).
Na switchi je QoS defaultně vypnutý a pokud chceme využít nějakou funkci, tak jej musíme nejprve zapnout.
SWITCH(config)#mls qos // globální zapnutí QoS pro switch SWITCH#show mls qos // ověří, že je QoS zapnutý
Důvěra QoS značkám
Switche tvoří přístupovou vrstvu, která se často nastavuje jako Trust Boundary. Proto se jedná o ideální místo, kde provádět klasifikaci a značkování. Případně můžeme na určitých portech důvěřovat zasílaným hodnotám.
Pozn.: Aby mohli pakety nést údaj CoS (Class of Service) v 2. vrstvě OSI, tak musí být port v módu 802.1q trunk.
Pokud důvěřujeme zařízení připojenému na portu (například Cisco IP telefonu), tak můžeme nastavit důvěru určité hodnotě, která je obsažena v rámci/paketu.
SWITCH(config-if)#mls qos trust dscp SWITCH(config-if)#mls qos trust cos SWITCH(config-if)#mls qos trust ip-precedence
Pokud je zapnuto CDP a na portu je Cisco IP telefon, tak můžeme nastavit, že zadané (některým z předchozích příkazů) hodnotě se důvěřuje, pouze pokud je připojené zařízení Cisco telefon.
SWITCH(config-if)#mls qos trust device cisco-phone
Pokud nastavíme důvěru připojenému IP telefonu, tak se toto nastavení týká pouze paketů ve voice VLAN. Pokud je do telefonu připojeno PC, tak můžeme instruovat telefon, jak se chovat k těmto paketům. Doporučeno je přeznačkovat tento provoz na CoS 0.
SWITCH(config-if)#switchport priority extend cos 0 // nastavení CoS paketům z PC za telefonem SWITCH(config-if)#switchport priority extend trust // důvěra hodnotám z PC za telefonem
Kontrolu QoS konfigurace interfacu můžeme provést pomocí
SWITCH#show mls qos interface g1/0/2
Nastavení CoS pro příchozí rámce
Pokud nastavíme důvěru CoS a přijde paket, který není tagovaný, tak se mu nastaví defaultní hodnota 0. Hodnota CoS je důležitá pro výběr výstupní fronty (použije se CoS-to-DSCP mapa). Tuto defaultní CoS hodnotu pro port můžeme změnit.
SWITCH(config-if)#mls qos cos 3
Případně můžeme nastavit, aby se hodnota CoS u příchozích paketů přepisovala defaultní hodnotou. Následující příkaz využijeme dohromady s předchozím.
SWITCH(config-if)#mls qos cos override
Mapovací tabulky
Když switche zpracovávají provoz a využívají QoS, tak pro všechny pakety používají interní DSCP hodnoty odpovídající prioritě provozu. Proto je třeba často převádět CoS hodnoty u příchozích paketů na DSCP a následně DSCP na CoS, které se používá pro výběr výstupní fronty. K tomuto účelu slouží mapovací tabulky, které existují s určitými defaultními hodnotami (uvedeno dále), ale můžeme je přenastavit.
Mapovacích tabulek máme více, i když nejpoužívanější jsou první dvě:
- CoS-DSCP map - pro převod CoS na DSCP
- DSCP-CoS map - pro převod DSCP na CoS
- IP-Prec-DSCP map - pro převod IP Precedence na DSCP
- DSCP-mutation - pokud spojujeme dvě domény, které používají jiné DSCP hodnoty, tak na hranici sítí použijeme tuto mapu k přepisu DSCP na naše hodnoty, výchozí je null, tzn. nemění hodnoty
- Policed-DSCP - slouží k přepsaní DSCP na novou hodnotu v rámci policingu a markingu, výchozí je null, tzn. nemění hodnoty
Default CoS-DSCP map
CoS | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
DSCP | 0 | 8 | 16 | 24 | 32 | 40 | 48 | 56 |
Default DSCP-CoS map
DSCP | 0-7 | 8-15 | 16-23 | 24-31 | 32-39 | 40-47 | 48-55 | 56-63 |
CoS | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Změnu defaultních hodnot mapovacích tabulek ukazují následující příklady. Pro tabulku CoS-to-DSCP zadáme 8 DSCP hodnot, které odpovídají CoS hodnotám 0 až 7.
SWITCH(config)#mls qos map cos-dscp 0 8 16 24 32 46 48 56
Pro tabulku DSCP-to-CoS konfigurujeme jedním příkazem jednu CoS hodnotu. Můžeme zadat až 8 DSCP hodnot následovaných klíčovým slovem to
a pak CoS hodnotou, která jim odpovídá. Pro definici celé tabulky musíme příkaz použít vícekrát.
SWITCH(config)#mls qos map dscp-cos 0 8 16 to 0
Zobrazení aktuálních map provedeme následovně:
SWITCH#show mls qos maps cos-dscp
Vstupní a výstupní fronty - Ingress and Egress Queues
WRR - Weighted Round Robin
U starších switchů (například Catalyst 3550) se používal plánovač front (Queue Scheduler) WRR - Weighted Round Robin. Funguje jednoduše, Round Robin znamená, že se z výstupních front (na C3550 jsou 4, jedna může být nastavena na prioritní, ta se pak nepoužije) odebírají pakety postupně z každé fronty (kruhově 1, 2, 3, 4, 1, 2, atd.). Tím, že přidáme váhu jednotlivým frontám, zajistíme, že se z každé fronty odebere proporcionálně určitý počet paketů každé kolo. Tedy, že některá fronta je odbavována rychleji. Tím můžeme dosáhnout rozdělení pásma na portu pro určité fronty. Zařazování dat do front můžeme řídit.
SRR - Shaped/Shared Round Robin
Na novějších switchích (jako Catalyst 3560, 3750, 2960) byla technologie změněna. Používá se nejen výstupní fronta, ale i vstupní fronta a WRR plánovač byl nahrazen SRR. Jelikož WRR není příliš "fér", tak SRR se to snaží napravit. Může pracovat ve dvou módech, buď Shared mode nebo Shaped mode. Jako zahazovací strategii podporuje pouze Weighted Tail Drop (WTD) se třemi prahovými hodnotami (první dvě můžeme měnit, třetí je pevně dána na 100%). Oproti Tail Drop, který prostě zahazuje příchozí pakety, když je plná fronty, tak WTD zahazuje určitý provoz (asociovaný k určitému prahu) dříve, než je fronta plná.
Následující obrázek (ze stránek Cisco.com) zobrazuje schematicky řešení front u Catalyst 3750, kde jsou 2 vstupní a 4 výstupní fronty.
Shared mode
- je vylepšenou obdobou WRR, jedno kolo rozděluje na minikola, kdy rozhoduje, zda odeslat jeden paket nebo ne (neodesílá větší množství paketů z jedné fronty najednou)
- takže per-kolo se chová mnohem lépe, ale z dlouhého hlediska je výsledek stejný
- můžeme říct, že tato metoda garantuje pásmo pro provoz (frontu), ale neomezuje ho, takže pokud je jinde volno, může využít celé pásmo
Shaped mode
- tento mód je rozdílný, váha určuje maximální povolenou přenosovou rychlost
- tato metoda garantuje a zároveň omezuje pásmo na danou hodnotu
- váhy se zadávají pomocí absolutních hodnot, pásmo se z nich určí jako rychlost-interfacu/váha
- tento mód se může aplikovat pouze na výstupní fronty
Konfigurace SRR
Nejprve potřebujeme rozdělit provoz do jednotlivých front, to provedeme buď podle CoS nebo DSCP. Mapujeme vždy učité CoS/DSCP hodnoty (najednou jich můžeme zadat max. 8) na určitou frontu a její práh (threshold). Switch 3750 má dvě vstupní fronty (1 a 2) a čtyři výstupní (1, 2, 3 a 4). Práh (threshold) souvisí s WTD zahazovacím algoritmem, k dispozici máme tři hodnoty (1, 2 a 3). Práh s id 3 má pevně nastavenu hodnotu 100%, tedy zahazuje, až když je fronta plná. Prahy 1 a 2 můžeme konfigurovat.
Pozn.: Cisco říká, že většina defaultních nastavení je vyhovující pro většinu aplikací, takže změny je třeba jen málokdy.
SWITCH(config)#mls qos srr-queue input cos-map queue 1 threshold 3 5 // CoS 5 půjde do vstupní fronty 1 s prahem 3 (100%) SWITCH(config)#mls qos srr-queue output cos-map queue 2 threshold 2 3 4 // CoS 3 a 4 půjdou do výstupní fronty 2 s prahem 2 SWITCH(config)#mls qos srr-queue output dscp-map queue 1 threshold 3 40 41 42 43 44 45 46 47 // DSCP hodnoty 40 až 47 půjdou do fronty 1 s prahem 3
Nastavení WTD prahových hodnot (práh id 1 a 2) pro určitou frontu provedeme následovně. Zadává se rozdílně pro vstupní a výstupní fronty. Pro výstupní fronty můžeme vytvořit dva sety (1 a 2) nastavení a ty pak přiřadíme na port.
SWITCH(config)#mls qos srr-queue input threshold 1 60 70 // vstupní fronta 1, práh 1 = 60%, práh 2 = 70% SWITCH(config)#mls qos queue-set output 2 threshold 2 60 80 100 200 // set 2, výstupní fronta 2, práh 1 = 60%, práh 2 = 80%, rezervováno 100% pro frontu, maximum 200% (kam může fronta narůst)
Dále můžeme nastavit velikosti bufferu, která se přiřadí jednotlivým frontám (tedy velikost front).
SWITCH(config)#mls qos srr-queue input buffers 90 10 // fronta 1 = 90%, fronta 2 = 10%, toto je default SWITCH(config)#mls qos queue-set output 1 buffers 25 25 25 25 // vytvoří set 1, kde všechny 4 fronty mají 25%, toto je default
Pro vstupní fronty se váha nastavuje globálně. Tím nastavujeme, jaké pásmo má která fronta.
SWITCH(config)#mls qos srr-queue input bandwidth 4 4 // fronta 1 =4/(4+4)=1/2 pásma, fronta 2 = 1/2, defaultní nastavení
Jednu vstupní frontu můžeme nastavit jako prioritní (expedited forwarding), ta je při zahlcení upřednostňována. Pokud chceme vypnout prioritní frontu, nastavíme váhu = 0 (defaultně je vstupní fronta 2 prioritní).
SWITCH(config)#mls qos srr-queue input priority-queue 1 bandwidth 10 // fronta 1 je prioritní a má vyhrazené pásmo 10% (maximum může být 40%)
Pro výstupní fronty jsme vytvořili sety, které následně aplikujeme na port. Defaultně mají všechny porty set 1.
SWITCH(config-if)#queue-set 2
Na jednotlivé porty můžeme nastavit Shaped nebo Shared mód a rozdělit pásmo pro jednotlivé výstupní fronty (nastavit jejich váhu).
SWITCH(config-if)#srr-queue bandwidth share 25 25 25 25 // shared mode, všechny fronty mají 25%, default SWITCH(config-if)#srr-queue bandwidth shape 25 0 0 0 // shape mode, fronta 1 dostane 25% a ostatní fronty jsou v shared módu (zadaná 0), default
Také jednu výstupní frontu na portu můžeme nastavit jako prioritní. Defaultně není žádná. Pokud použijeme prioritní frontu, tak se ignorují nastavení váhy (shared, shaped) pro frontu 1.
SWITCH(config-if)#priority-queue out // fronta 1 se stane prioritní
Pokud chceme omezit celkovou rychlost portu, tak můžeme použít jeden jednoduchý příkaz, který nastaví % rychlosti. Můžeme zadat 10 až 90%.
SWITCH(config-if)#srr-queue bandwidth limit 80
Ještě uvádím pouze seznam souvisejících show příkazů.
SWITCH#show class-map test-class SWITCH#show mls qos SWITCH#show mls qos aggregate-policer test-policer SWITCH#show mls qos input-queue SWITCH#show mls qos interface SWITCH#show mls qos maps SWITCH#show mls qos queue-set 1 SWITCH#show mls qos vlan 100 SWITCH#show policy-map test-policy
Auto-QoS
Defaultně je QoS na switchi vypnutý a pakety se zpracovávají pomocí BestEffort. Pokud QoS zapneme, tak se použijí určité přednastavené hodnoty, které jsou dostatečné pro běžný provoz (některé věci, ale musíme nastavit ručně). Funkce Auto-QoS slouží ke zjednodušení konfigurace. Auto-QoS si udělá představu o síťovém designu a jako výsledek nakonfiguruje kompletně QoS pro daný účel (změní defaultní hodnoty a nakonfiguruje vše potřebné, včetně zapnutí QoSu).
Auto-QoS je použitelný pro Cisco IP telefony, Cisco SoftPhone a uplink porty (trunky), kde důvěřuje předávaným hodnotám. Umožňuje detekovat přítomnost Cisco telefonu, nakonfiguruje klasifikaci a výstupní fronty.
Auto-QoS se konfiguruje na portech. Při prvním použití provede zapnutí QoSu, upraví Cos-DSCP mapu, namapuje určité CoS a DSCP hodnoty na vstupní a výstupní fronty, nakonfiguruje prahové hodnoty a velikost front, na portu vytvoří prioritní frontu, nastaví důvěru CoS a DSCP pro cisco-phone, případně vytvoří určité Policy mapy a Class mapy (mají v názvu slovo AutoQoS). Při dalším použití již konfiguruje pouze daný port.
Při použití Auto-QoS se zadá řada příkazů, jako bychom je zadali sami, pomocí CLI. Tím pádem může dojít k přepsání části naší konfigurace nebo některá naše konfigurace může způsobit problémy Auto-QoSu. Takže se doporučuje použít Auto-QoS dříve, než provedeme vlastní konfiguraci QoSu. Pokud zrušíme Auto-QoS na portu pomocí klíčového slova no
, tak se odstraní související příkazy na portu (ne v globální konfiguraci).
Konfigurace je opravdu jednoduchá.
SWITCH(config-if)#auto qos voip cisco-phone // Cisco IP telefon, potřebuje CDP SWITCH(config-if)#auto qos voip cisco-softphone // Cisco SW IP telefon SWITCH(config-if)#auto qos voip trust // trunk port SWITCH(config-if)#no auto qos // zruší se konfigurace na portu
Pro kontrolu nastavení můžeme použít.
SWITCH#show auto qos interface g1/0/1
Zaujimalo by ma aky druh oznacenia v tomto ptikaze oznacuje cisco-phone
SWITCH(config-if)#mls qos trus device cisco-phone
je to hostname(asi nie), alebo nejakym prikazom oznaceny nazov zariadenia k mac adrese?
A ci sa auto-qos pocas pouzivania meni, alebo berie statistiky len z prvotneho provozu.
Ak sa dynamicky meni ako sa sprava k nami doplnenemu qos?
odpověď na [1]morgun: ? cisco-phone neoznačuje přímo jedno zařízení, je to něco jako makro a značí libovolný Cisco IP telefon (informace se zjistí přes CDP).
Auto-qos se při používání se nemění. Po použití příkazu se spustí "makro", které vytvoří konfiguraci (napevno nastaví příkazy).
Zrovna na 2950 bych potreboval obcas manualne omezit rychlost na urcitych portech, tak jednoduse jak na 2960, ale srr-queue bandwidth tam nejde a speed 10 neomezi dostatecne.
Omlouvám se za slovíčkaření, ale jsem mimo misku, když si myslím, že věta: "Aby mohli pakety nést údaj CoS (Class of Service) v 2. vrstvě OSI, tak musí být port v módu 802.1q trunk", by měla znít: "Aby mohli RÁMCE nést údaj CoS (Class of Service) v 2. vrstvě OSI, tak musí být port v módu 802.1q trunk"?
odpověď na [4]Sas: Správně . Napsal jsem tu článek, že se často nesprávně zaměňuje termín paket a rámec a dopustil jsem se toho také.
Dobrý den, prosím o radu jak nastavit na switchy qos pro IPTV ( multicast ) používáme tedy suwitche DCN a mypu ale ios je tam skoro schodny s ciscem.
Nevim jak mam zaradit do skupiny multicas v urcitych vlanach a ostatni v jine vlane.
treba na
vlan 100 a 101 IPTV multicas
vlan 200 data
vlan 300 servis
Děkuji moc za radu